Quais são os comandos / pressionamentos de tecla do vim mais usados?

112

Eu sou um programador Ruby tentando mudar de Textmate para MacVim, e estou tendo problemas para percorrer as listas gigantescas de coisas que você pode fazer no VIM e todos os pressionamentos de tecla para eles. Estou cansado de ouvir "Você pode usar 'I' para inserir texto, ou 'a' para anexar texto após o caractere, ou 'A' para anexar texto no final da linha, ou ..." Não consigo imaginar todos usam todos os 20 pressionamentos de tecla diferentes para navegar no texto, cerca de 10 teclas para começar a adicionar texto e 18 maneiras de selecionar visualmente um bloco interno. Ou você!?

Minha folha de referências ideal seria os 30-40 pressionamentos de tecla ou comandos mais usados ​​que todos usam para escrever código diariamente, junto com os plug-ins essenciais absolutos que os rubistas usam diariamente e os 10 comandos mais usados ​​para eles. Em teoria, uma vez que tenho isso e começar a se tornar tão proficiente em VIM como estou em Textmate, então eu posso começar a aprender os milhares de outros comandos VIM que me fará mais eficiente.

Ou estou aprendendo VIM da maneira totalmente errada?

Clinton
fonte
9
Referência obrigatória para cafepress.com/geekcheat.11507711 .
geekosaur
1
Retagged para remover 'ruby' e adicionar 'atalhos de teclado'. Parece mais apropriado.
"estou aprendendo Vim da maneira totalmente errada?" - nah, você só precisa começar com algumas noções básicas e lembrar que você ainda aprenderá mais comandos daqui a um ano. Talvez um dia você realmente use todos os comandos! Mas ninguém usa todos eles desde o primeiro dia.
Cascabel

Respostas:

306

Aqui está uma folha de dicas que escrevi uma vez, com os comandos que uso regularmente:

Referências

Geral

  • Quase todos os comandos podem ser precedidos por um número para uma contagem de repetição. por exemplo. 5dd excluir 5 linhas
  • <Esc> tira você de qualquer modo e volta ao modo de comando
  • Comandos precedidos por : são executados na linha de comando na parte inferior da tela
  • : ajuda ajuda com qualquer comando

Navegação

  • Movimento do cursor: ← hjk l →
  • Por palavras:
    • w próxima palavra (por pontuação); W próxima palavra (por espaços)
    • b palavra de volta (por pontuação); B back word (por espaços)
    • e palavra final (por pontuação); E palavra final (por espaços)
  • Por linha:
    • 0 início da linha; ^ primeiro não espaço em branco
    • $ fim da linha
  • Por parágrafo:
    • { linha em branco anterior; } próxima linha em branco
  • Por arquivo:
    • gg início do arquivo; Fim G do arquivo
    • 123G vá para o número da linha específica
  • Por marcador:
    • mx definir marca x ; 'x vá para a marca x
    • '. ir para a posição da última edição
    • '' volte ao último ponto antes de pular
  • Rolando:
    • ^ F avança em tela cheia; ^ B tela inteira para trás
    • ^ D para baixo na metade da tela; ^ U meia tela
    • ^ E rolar uma linha para cima; ^ Y rolar uma linha para baixo
    • linha central do cursor zz

Editando

  • u desfazer; ^ R refazer
  • . repita o último comando de edição

Inserindo

Todos os comandos de inserção são encerrados com <Esc>para retornar ao modo de comando.

  • eu insiro texto no cursor; Eu insiro texto no início da linha
  • um texto anexado após o cursor; Um texto anexado após o final da linha
  • o abrir uma nova linha abaixo; O abrir uma nova linha acima

Mudando

  • r substitui um único caractere; R substitui vários caracteres
  • s mudar um único personagem
  • cw mudar palavra; C muda para o fim da linha; cc mudar toda a linha
  • c<motion> muda o texto na direção do movimento
  • ci ( mudar entre parênteses (ver seleção de objeto de texto para mais exemplos)

Excluindo

  • x deletar char
  • dw excluir palavra; D deleta até o final da linha; dd deletar linha inteira
  • d<motion> exclui na direção do movimento

Copiar e colar

  • yy copiar linha para colar buffer; dd linha de corte no buffer de colagem
  • p colar buffer abaixo da linha do cursor; P colar buffer acima da linha do cursor
  • xp troca dois caracteres ( x para excluir um caractere, a seguir, p para colocá-lo de volta após a posição do cursor)

Blocos

  • v fluxo de bloco visual; V linha de bloqueio visual; ^ V coluna de bloqueio visual
    • a maioria dos comandos de movimento estendem o bloco para a nova posição do cursor
    • o move o cursor para a outra extremidade do bloco
  • d ou x corta o bloco no buffer de pasta
  • y copiar bloco para colar buffer
  • > bloco de indentação; < bloco não recuado
  • gv selecionar novamente o último bloco visual

Global

  • :% s / foo / bar / g substitui todas as ocorrências de "foo" por "bar"
    • % é um intervalo que indica todas as linhas do arquivo
    • / g é um sinalizador que muda todas as ocorrências em uma linha ao invés de apenas a primeira

Procurando

  • / pesquisa para a frente; ? pesquisar para trás
  • * procure a palavra sob o cursor; # pesquisa para trás pela palavra sob o cursor
  • n próxima correspondência na mesma direção; N próxima partida na direção oposta
  • fx encaminha para o próximo caractere x ; Fx para trás ao caractere anterior x
  • ; mova novamente para o mesmo personagem na mesma direção; , mova novamente para o mesmo caractere na direção oposta

arquivos

  • : w grava o arquivo no disco
  • : wname grava o arquivo no disco comoname
  • ZZ grava o arquivo no disco e sai
  • : n edita um novo arquivo; : n! edite um novo arquivo sem salvar as alterações atuais
  • : q sair de editar um arquivo; : q! saia da edição sem salvar as alterações
  • : e editar o mesmo arquivo novamente (se alterado fora do vim)
  • : e. explorador de diretório

janelas

  • ^ Wn nova janela
  • ^ Wj até a próxima janela; ^ Wk até a janela anterior
  • ^ W_ maximiza a janela atual; ^ W = tornar todas as janelas do mesmo tamanho
  • ^ W + aumentar o tamanho da janela; ^ W- diminuir o tamanho da janela

Navegação na fonte

  • % pula para combinar parênteses / colchetes / chaves, ou bloco de idioma se o módulo de idioma estiver carregado
  • gd vá para a definição do símbolo local sob o cursor; ^ O voltar à posição anterior
  • ^] pula para a definição do símbolo global (requer tagsarquivo); ^ T retornar à posição anterior (pilha arbitrária de posições mantida)
  • ^ N (no modo de inserção) completamento automático de palavras

Mostrar mudanças locais

O Vim tem alguns recursos que facilitam o destaque de linhas que foram alteradas de uma versão base no controle de origem. Eu criei um pequeno script vim que torna isso fácil: http://github.com/ghewgill/vim-scmdiff

Greg Hewgill
fonte
1
+1 Relativamente mínimo, embora eu deva admitir que não estou usando nenhum comando de janela ou navegando com qualquer outra coisa que não seja as teclas de seta / pageup / pagedown / home / end e gg / G. Ah, e para navegação de número de linha você também pode usar: 123 (modo de comando).
2
Bom cheatsheet. Eu adicionaria ^ w ^ w para percorrer as janelas : x em vez de ZZ para consistência, tx para frente antes do caractere e Tx para trás.
romainl
Devo notar que este é apenas o básico do que eu uso. Criei esta lista como uma ferramenta para ensinar o vim a outras pessoas. Eu uso muitos outros comandos com menos frequência e também tenho vários aliases e macros configurados para me ajudar a usar o vim com mais eficácia.
Greg Hewgill
2
Se você quiser evitar a Escchave (e RSI?), Você pode usar ^[. ^ctambém funciona (mas não expande abreviações). Fonte: vim.wikia.com/wiki/Avoid_the_escape_key
Lian
22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Isso é a melhor coisa para aprender VIM.

Justin thomas
fonte
Nunca tinha visto isso antes, referência muito legal para depois que você souber o que os comandos fazem.
amccormack
3
A parte "gráfica" é inútil se você não tiver um teclado qwerty.
Romainl
5
Surpreende-me que postar um link (que já foi postado até a morte) chame tanta atenção enquanto se esforça para que outros pôsteres colocados não ...
Lieven Keersmaekers,
O vencedor absoluto nas postagens do vim: stackoverflow.com/questions/1218390/…
Justin Thomas
4

Você executou o tutorial integrado do Vim? Caso contrário, vá para a linha de comando e digite vimtutor. É uma ótima maneira de aprender os comandos iniciais.

O Vim tem uma quantidade incrível de flexibilidade e poder e, se você for como a maioria dos usuários do vim, aprenderá muitos comandos novos e esquecerá os antigos, para reaprendê-los. A ajuda integrada é boa e vale a pena navegar periodicamente para aprender coisas novas.

Existem vários bons FAQs e cheatsheets para vim na internet. Eu recomendo pesquisar por vim + faqe vim + cheatsheet. Cheat-Sheets.org # vim é uma boa fonte, assim como o wiki do Vim Tips .

o homem de lata
fonte
Acabei de descobrir sobre isso e, felizmente, vem instalado em um Mac. Experimentando agora (à 1h ...)
Clinton,
Eu uso o vim há muito tempo e é uma das primeiras coisas que instalo em uma máquina. MacVim , no Mac OS é muito bom. Eu tendo a compilar o vim do código fonte na maioria das máquinas Linux que uso, simplesmente porque a maioria das distros não são atuais ou não têm o suporte de idioma definido corretamente. Eu mantenho uma versão atual do meu ~/.vimrc,~/.gvimrc e ~/.vimdiretório em um tar-ball para quando eu tenho que definir alguma coisa. Copiar isso e extrair os arquivos me permite ter o vim rodando com todos os meus comandos usuais e esquemas de cores em minutos no Windows, Macs e Linux.
The Tin Man
3

O que a maioria das pessoas fazer é começar com o mais básico, como talvez i, yw, yy, e p. Você pode continuar a usar as teclas de seta para se mover, selecionar texto com o mouse, usar os menus, etc. Então, quando algo está deixando você mais lento, você procura a maneira mais rápida de fazer isso e gradualmente adiciona mais e mais comandos. Você pode aprender um novo comando por dia por um tempo, então ele irá diminuir para um por semana. Você se sentirá bastante produtivo em um mês. Depois de um ano, você terá um repertório bastante sólido e, depois de 2-3 anos, nem mesmo pensará conscientemente no que seus dedos estão digitando, e ficará estranho se você tiver que soletrar para alguém. Eu aprendi vi em 1993 e ainda aprendo 2 ou 3 novos comandos por ano.

Karl Bielefeldt
fonte
3

O cheatsheet de @Greg Hewgill é muito bom. Comecei minha mudança do TextMate há alguns meses. Agora sou tão produtivo quanto no TM e constantemente surpreso com o poder do Vim.

Aqui está como eu mudei . Talvez possa ser útil para você.

Grosso modo, não acho uma boa ideia fazer uma mudança radical. O Vim é muito diferente e é melhor ir progressivamente.

E para responder à sua pergunta, sim, eu uso todos os iaIAoO dias para entrar no modo de inserção. Certamente parece estranho no início, mas você realmente não pensa sobre isso depois de um tempo.

Alguns comandos são incrivelmente úteis para qualquer tarefa relacionada à programação:

  • re Rpara substituir personagens
  • <C-a>e <C-x>aumentar e diminuir os números
  • citpara alterar o conteúdo de uma tag HTML, e suas variantes ( cat, dit, dat, ci(, etc.)
  • <C-x><C-o>(mapeado para ,,) para omnicompletar
  • seleção de bloco visual com <C-v>
  • e assim por diante…

Uma vez que você está acostumado com o modo Vim, torna-se muito difícil não acertar oou xo tempo todo ao editar texto em algum outro editor ou campo de texto.

romainl
fonte
2

Não consigo imaginar que todo mundo use todos os 20 pressionamentos de tecla diferentes para navegar no texto, 10 ou mais teclas para começar a adicionar texto e 18 maneiras de selecionar visualmente um bloco interno. Ou você!?

Eu faço.

Em teoria, assim que eu tiver isso e começar a me tornar tão proficiente no VIM quanto no Textmate, posso começar a aprender os milhares de outros comandos do VIM que me tornarão mais eficiente.

Essa é a maneira certa de fazer isso. Comece com os comandos básicos e, a seguir, escolha aqueles que melhoram sua produtividade. Gosto de seguir este blog para dicas sobre como melhorar minha produtividade com o vim.

Jeff
fonte
2

tuxfiles.org contém uma folha de dicas muito boa. Acho que há alguns pontos para aprender os comandos:

  • Leia a folha de dicas regularmente. Não se preocupe em usar todos eles, ou lembrar todas as chaves, apenas saiba que o comando existe. Procure o comando e use-o quando estiver fazendo algo repetitivo.
  • Se você se pega fazendo algo regularmente (como deletar uma linha inteira após um caractere particular d$ ), faça uma rápida pesquisa no Google para ver se consegue encontrar um comando para ele.
  • Anote os comandos que achar úteis e mantenha essa lista onde possa vê-los enquanto escreve o código. Eu argumentaria contra a impressão de algo e, em vez disso, encorajo você a usar notas de postagem para apenas alguns comandos por vez.
  • Se possível, observe outros programadores usarem o vim e pergunte-lhes quais comandos eles estão usando ao vê-los fazer algo interessante.

Além dessas dicas, existem alguns conceitos básicos que você deve entender.

  • O vim usará o mesmo caractere para representar a mesma função. Por exemplo, para excluir uma linha após o uso de um caractere d$. Para destacar uma linha após um uso de caractere particular v$. Portanto, observe que isso $indica que você fará algo até o final da linha de onde o cursor está atualmente.
  • ué desfazer e ctrl+ré refazer.
  • colocar um número na frente de um comando irá executá-lo repetidamente. 3ddirá deletar a linha em que seu cursor está e as duas linhas seguintes, da mesma forma 3yyirá copiar a linha em que seu cursor está e as duas linhas seguintes.
  • entender como navegar através dos buffers usar :lspara listar os buffers, e :bn, :bpao percorrê-las.
  • leia o tutorial encontrado em:help Esta é provavelmente a melhor maneira de 'aprender o básico', e o restante dos comandos você aprenderá com o uso.
amccormack
fonte
2

Coloque isso em seu .bashrc para abrir o vim com o último arquivo editado na última linha editada

alias vil="vim  +\"'\"0"
modesto
fonte
1

Vá para Edição Eficiente com o vim e aprenda o que você precisa para começar. Nem tudo nessa página é essencial no começo, então escolha o que você quer.

A partir daí, use o vim para tudo. "hjkl", "y" e "p" levarão você longe, mesmo que não seja o caminho mais eficiente. Quando você se deparar com uma tarefa para a qual não conhece a chave mágica para executá-la com eficiência (ou mesmo) e se descobrir fazendo isso mais do que algumas vezes, vá procurá-la. Pouco a pouco, isso se tornará uma segunda natureza.

Eu achei o vim assustador muitas luas atrás (quando ele não tinha o "m" no final), mas levou apenas cerca de uma semana de uso constante para ficar eficiente. Ainda acho que é o editor mais rápido para fazer as coisas.

Mikestew
fonte
O link para "Edição eficiente com o vim" acabou. Acho que uma alternativa pode ser encontrada em robertames.com/files/vim-editing.html
Damian Powell