Você já sabe o básico. Ctrl+S, Ctrl+Z, Ctrl+P — isso está no subconsciente. Este post começa exatamente onde esses terminam.
O que está aqui são os atalhos que aparecem em situações reais de desenvolvimento: renomear um parâmetro que foi duplicado em 12 chamadas, encontrar rapidamente onde aquela função é usada no workspace inteiro, ou mover um bloco de validação para cima sem tocar no mouse. Cada um deles foi testado em fluxos reais de trabalho, não em demos com arquivos de três linhas.
Nota de plataforma: Todos os atalhos são para Windows/Linux. No Mac,
CtrlviraCmdeAltviraOption.
Referência Rápida: Atalhos por Prioridade de Impacto
Antes de entrar nos detalhes, aqui está o mapa de prioridade. Se você tem tempo para aprender apenas quatro agora, aprenda os de impacto alto.
| Atalho | O que faz | Impacto |
|---|---|---|
Ctrl+P + @ / # | Navega por símbolos no arquivo ou workspace | Alto |
Ctrl+D | Seleciona próxima ocorrência com cursor múltiplo | Alto |
F2 | Rename semântico — atualiza todas as referências | Alto |
Ctrl+. | Quick fix + importa símbolo automaticamente | Alto |
Alt+↑/↓ | Move linha(s) para cima ou para baixo | Médio |
Alt+Enter (no Find) | Seleciona todas as ocorrências como cursores | Médio |
Shift+Alt+↓ | Duplica linha atual ou seleção | Médio |
Ctrl+Shift+5 | Divide o terminal em dois painéis | Baixo |
Ctrl+K Ctrl+S | Abre o editor de keybindings | Baixo |
Alt+Left/Right | Navega pelo histórico de arquivos (como o botão Voltar) | Médio |
1. Navegação por Arquivos e Símbolos
Ctrl+P — Você Usa, Mas Provavelmente Não Usa Tudo
O Quick Open parece simples porque ele é simples na superfície. Mas tem quatro modos que a maioria dos devs nunca usa:
Ctrl+P → busca arquivo por nome
Ctrl+P, depois @ → navega para símbolo dentro do arquivo atual
Ctrl+P, depois # → busca símbolo em todo o workspace
Ctrl+P, depois :42 → vai direto para a linha 42 do arquivo aberto
O modo @ é o que muda mais o fluxo. Você está num arquivo de 600 linhas e precisa ir para a função parseUserPayload. Em vez de rolar: Ctrl+P → @parse → Enter. Dois segundos.
O modo # faz o mesmo, mas varre o projeto inteiro. Útil quando você sabe o nome da função mas não sabe em qual arquivo ela vive.
Alt+Left e Alt+Right — O Botão Voltar Para Arquivos
Quando você usa "Ir para definição" (F12) para pular para um símbolo em outro arquivo, o Alt+Left te leva de volta — igual o botão Voltar do browser, mas para navegação de código. É um par com Alt+Right para avançar no histórico.
Parece trivial. Depois que vira reflexo, você percebe quantas vezes por dia usava o mouse para clicar na aba anterior.
Ctrl+G — Linha Direta
Quando o stack trace diz TypeError at line 347, você não precisa rolar. Ctrl+G → 347 → Enter. Simples, esquecido.
2. Múltiplos Cursores: Edição Paralela de Verdade
Essa seção é a mais densa porque múltiplos cursores têm três formas distintas de ativação — cada uma cobre um caso diferente.
Alt+Click — Cursor Cirúrgico
Segure Alt e clique em qualquer posição do arquivo: você cria um segundo cursor lá. Clique em cinco lugares, você tem cinco cursores simultâneos. Tudo que você digita aparece em todos os pontos.
Caso de uso direto: você tem um objeto com cinco propriedades e precisa adicionar readonly em cada uma. Em vez de editar linha por linha: Alt+Click nos cinco pontos, digita readonly uma vez, feito.
Ctrl+D — Seleção Incremental de Ocorrências
Selecione qualquer palavra. Ctrl+D seleciona a próxima ocorrência e coloca um cursor nela também. Aperte de novo, seleciona mais uma. Você vai adicionando cursores incrementalmente até cobrir exatamente o que precisa.
Isso resolveu um caso real: um helper de formatação de datas estava sendo chamado em 11 lugares com o parâmetro format — e o parâmetro precisava ser renomeado para dateFormat. Ctrl+D onze vezes, nome novo, Enter. Dez segundos sem abrir o painel de rename global.
Cuidado importante: Ctrl+D faz correspondência de texto, não de símbolo. Se você tem userId e externalUserId no arquivo, selecionar userId com Ctrl+D pode pegar o trecho dentro de externalUserId. Para rename de variáveis com ambiguidade, prefira F2.
Ctrl+Shift+L — Seleciona Tudo de Uma Vez
Variação mais agressiva do Ctrl+D: seleciona todas as ocorrências da palavra no arquivo em um atalho. Para arquivos pequenos e sem ambiguidade, é mais rápido. Para arquivos grandes, verifique antes — pode pegar mais do que você quer.
Alt+Up e Alt+Down — Mover Blocos Sem Clipboard
Selecione uma ou mais linhas. Alt+↑ ou Alt+↓ move o bloco inteiro para cima ou para baixo, mantendo a indentação. Sem Ctrl+X, sem reposicionar cursor, sem Ctrl+V, sem ajuste de espaçamento.
// Antes: validação no lugar errado
function createUser(data) {
const user = await db.insert(data) // executa antes de validar
if (!data.email) throw new Error() // validação tarde demais
return user
}
// Alt+Up na linha de validação — bloco sobe sem Ctrl+X/V
function createUser(data) {
if (!data.email) throw new Error() // valida primeiro
const user = await db.insert(data)
return user
}
Shift+Alt+Down — Duplicar Para Modificar
Duplica a linha atual ou seleção logo abaixo. O uso menos óbvio: quando você está criando um case muito parecido com um existente. Duplica, modifica os dois ou três campos que diferem. Mais rápido que escrever do zero.
3. Refatoração: F2 e Ctrl+. São Diferentes do Que Você Pensa
F2 — Rename Semântico (Não é o Ctrl+H)
Esta distinção importa mais do que parece:
| Ctrl+H | F2 | |
|---|---|---|
| Tipo de busca | Texto literal | Símbolo no escopo |
| Escopo | Arquivo atual ou workspace | Projeto inteiro |
| Risco | Pode renomear partes de strings e comentários | Renomeia apenas referências ao símbolo |
| Indicado para | Substituir strings e valores literais | Renomear variáveis, funções, componentes, tipos |
Se você ainda usa Ctrl+H para renomear variáveis, vai introduzir um bug silencioso cedo ou tarde — o Ctrl+H não distingue contexto. Um userId dentro de um comentário // fix userId bug vai ser renomeado junto com o símbolo.
F2 entende o código. Ele usa o Language Server para rastrear referências e atualiza apenas as ocorrências reais do símbolo.
Ctrl+. — Quick Fix e Import Automático
Esse é provavelmente o atalho mais subestimado da lista. Ele faz duas coisas distintas:
Quick Fix: Com o cursor em cima de qualquer sublinhado amarelo ou vermelho, Ctrl+. abre sugestões de correção contextuais — adicionar async, resolver tipo incompatível, criar stub de função ausente.
Import automático: Você escreveu um componente ou usou uma função sem importar. O editor sublinha. Cursor em cima do nome sublinhado, Ctrl+., e a opção "Add import from '...'" aparece. Um Enter e o import correto vai pro topo do arquivo.
// Você digitou isso sem import:
const schema = z.object({
name: z.string(),
age: z.number().min(18)
})
// Cursor em "z" → Ctrl+. → "Add import from 'zod'"
// Resultado automático no topo:
import { z } from 'zod'
Quantas vezes por dia você vai manualmente ao topo de um arquivo adicionar um import? Esse atalho corta isso completamente para qualquer símbolo que o Language Server reconhece.
4. Terminal e UI: Menos Alt+Tab
Ctrl+` — Toggle do Terminal Integrado
Abre e fecha o terminal sem sair do editor. O ganho não está no atalho em si, mas no hábito: terminal integrado com toggle de teclado elimina o Alt+Tab constante para uma janela separada. Nos primeiros dias parece neutro. Em uma semana você não consegue trabalhar sem ele.
Ctrl+Shift+5 — Split do Terminal
Divide o terminal atual lado a lado. O caso de uso clássico: servidor de desenvolvimento rodando numa metade, comandos de git ou test na outra. Sem abrir nova aba, sem perder o contexto do que estava rodando.
Ctrl+B — Toggle da Sidebar
Some com a sidebar de arquivos para ter mais espaço horizontal para o código. Um clique e volta. Em telas de notebook com resolução 1366×768, isso pode ser a diferença entre ver dois arquivos lado a lado ou não.
5. Busca Avançada: O Que a Maioria Ignora
Ctrl+Shift+F com Filtros de Arquivo
A busca global todo dev conhece. O que poucos usam são os filtros de inclusão e exclusão de path. Clique no ícone ... dentro do painel de busca para expandir os campos:
Arquivos para incluir: src/**/*.ts
Arquivos para excluir: **/*.test.ts, **/*.spec.ts, **/node_modules
Isso muda a qualidade da busca em projetos grandes. Quer encontrar onde AuthContext é usado no código de produção, sem o ruído dos testes? Três segundos de configuração, resultado limpo.
Alt+Enter na Busca Inline (Ctrl+F)
Pouco documentado e muito útil: com o Ctrl+F aberto e uma busca ativa, Alt+Enter seleciona todas as ocorrências no arquivo como cursores múltiplos simultâneos. Você sai do modo busca já com todos os pontos selecionados para editar.
6. Git Inline: O Que o VS Code Nativo Já Faz
Ctrl+Shift+G — Source Control Sem Extensão
O painel de Source Control do VS Code nativo é mais capaz do que a maioria usa. Além do commit e push, ele faz stage parcial de arquivo: passe o mouse pela gutter esquerda do diff e botões + aparecem para fazer stage de hunks individuais — o equivalente visual de git add -p na CLI.
Para a maioria das operações cotidianas — commit, push, pull, diff, stage parcial — você não precisa do GitLens nem do SourceTree. O painel nativo resolve.
Dica: No painel de Source Control, a seta ao lado do nome do arquivo faz stage apenas daquele arquivo. Para desfazer um stage, clique no
-que aparece no arquivo staged.
7. Customização: Dois Minutos Que Multiplicam Tudo
Ctrl+K Ctrl+S — Editor de Keybindings
Qualquer atalho deste artigo pode ser remapeado aqui. Se Alt+Click conflita com o driver da NVIDIA, abra o editor de keybindings, busque "Add Cursor" e mude para Ctrl+Alt+Click em 30 segundos.
Snippets Customizados: O Multiplicador Mais Ignorado
Ctrl+Shift+P → "Configure User Snippets" → escolha a linguagem. Um snippet bem feito para o padrão que você digita dez vezes por dia vale mais do que qualquer atalho desta lista.
Exemplo para TypeScript/React — componente funcional tipado:
{
"React FC com Props": {
"prefix": "rfc",
"body": [
"interface ${1:Component}Props {",
" $2",
"}",
"",
"export function ${1:Component}({ $3 }: ${1:Component}Props) {",
" return (",
" <div>$0</div>",
" )",
"}"
],
"description": "Componente React funcional com interface de props tipada"
}
}
rfc → Tab → estrutura completa com tipagem. Os $1, $2 são tab stops: você preenche o nome do componente, Tab, preenche os campos da interface, Tab, chega no JSX.
FAQ
Esses atalhos funcionam no VS Code para web (vscode.dev)?
A maioria funciona, com exceção dos que o browser intercepta. Ctrl+W fecha a aba do browser antes de chegar no VS Code. Para uso intenso, o desktop ainda é superior — o VS Code web tem limitações de Language Server que afetam F2 e Ctrl+. em alguns projetos.
Como saber se uma extensão sobrescreveu algum atalho meu?
Ctrl+K Ctrl+S abre o editor de keybindings. A coluna "Source" mostra se o atalho veio do sistema, de uma extensão, ou de customização sua. Extensões de modo Vim ou Emacs costumam sobrescrever muita coisa.
Por que o Ctrl+D às vezes pega ocorrências erradas?
Porque ele faz correspondência de texto, não de símbolo. count dentro de accountCount vai ser selecionado se você usar Ctrl+D em count. Nesses casos, prefira F2 para rename semântico.
O Alt+Click conflita com o driver de vídeo. Como resolver?
Drivers NVIDIA mapeiam Alt+Click para rotação de tela no Windows. Desative esse comportamento no painel de controle do driver, ou remapeie o atalho de múltiplos cursores no VS Code para Ctrl+Alt+Click via Ctrl+K Ctrl+S.
Existe extensão que ajuda a aprender os atalhos progressivamente?
"Which Key" e "VS Code Tips" são as mais usadas. O método que funciona melhor na prática: escolha três atalhos desta lista, use por uma semana até virar reflexo muscular, depois adicione mais três. Tentar aprender dez de uma vez não consolida nenhum.
F2 funciona em todos os projetos?
Depende do Language Server estar ativo. Em TypeScript com tsconfig configurado, funciona muito bem. Em Python, o Pylance resolve bem. Em projetos sem tipagem estática, o F2 pode não rastrear todas as referências — verifique se o símbolo aparece sublinhado antes de confiar no rename.
Como fazer stage parcial de um arquivo sem extensão?
No painel de Source Control (Ctrl+Shift+G), clique no arquivo modificado para abrir o diff. Na margem esquerda, passe o mouse pela área colorida — um botão + aparece em cada hunk. Clique no + do hunk que você quer incluir. O restante fica fora do commit.
Próximos Passos
Os quatro atalhos de impacto alto são o ponto de entrada. Eles aparecem em praticamente todo ciclo de desenvolvimento: Ctrl+P com @ para navegar, Ctrl+D para seleção múltipla, F2 para rename seguro, e Ctrl+. para import automático. Depois que esses quatro viram reflexo — o que leva em torno de três a quatro dias de uso intencional — os de impacto médio entram naturalmente.
Para casos de uso avançados e GIFs demonstrando o comportamento exato de cada atalho, o VS Code Tips é a melhor referência disponível publicamente.