VIM Super Fast Navigation

91

A única coisa que sinto falta em usar outros editores é encontrar meu lugar com o mouse. Posso olhar com meus olhos para uma área específica do arquivo e com um movimento do mouse e um clique estou lá. Com o VIM eu tenho que jjjjjkkkkkkjjjjhhhh ... quase lá hhhhh oh merda eu perdi por 3 caracteres, lll.

Estou aprendendo a fazer marcas e encontrei um plugin de favoritos que é ótimo, posso criar marcadores e destruí-los <f3>e navegar até eles com infelizmente as marcas são esquecidas quando o arquivo é fechado.

Como vocês super navegam pelos arquivos? Eu sei que também poderia fazer 5j7k4j5h e assim por diante, mas deve haver um plugin que pode ler meus olhos e colocar o cursor onde eu realmente preciso.

Também aprendi a usar /% para pesquisar um termo específico. Isso ajuda, mas todos os caracteres correspondentes são destacados em todo o documento.

Helmut Granda
fonte
Todas ótimas respostas, enquanto ainda estamos no assunto, descobri que posso experimentar algo como nG (vá para a linha Número) f% (encontre o primeiro caractere do que estou procurando ou, como alguém sugeriu, use w para seguir em frente para a próxima palavra.
Helmut Granda

Respostas:

172

Experimente $ vimtutor, ele vai te ensinar tudo que você precisa saber para começar.

hjkl são a ponta do topo do iceberg e muito raramente são usados, pelo menos no meu caso.

wWEee BbgegEtodos permitem mover palavra por palavra:

  • we evá em frente We Eleve em consideração os espaços em branco e a pontuação

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • be gevoltar, Be gElevar em conta os espaços em branco e a pontuação

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTsão usados ​​para alcançar um determinado caractere na linha atual e ;,são usados ​​para repetir esse movimento, na mesma direção ;e na direção oposta para ,:

  • fmpula no próximo mpara frente, Fvai para trás

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmpula ANTES do próximo mpara frente, Tvai para trás

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? são usados ​​para pular para a primeira ocorrência de um padrão da posição atual do cursor:

  • /pattern vai em frente

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern vai para trás

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ são usados ​​para pular para o primeiro e o último caractere da linha.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ são usados ​​para pular para o primeiro e o último caractere imprimível da linha.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Simples e combinados ()[]{}são usados ​​para mover frase por frase ou parágrafo por parágrafo ou bloco de código por bloco de código.

<C-b>e <C-f>são usados ​​para rolar a tela para frente e para trás.

<C-u>e <C-d>são usados ​​para rolar meia tela para frente e para trás.

H, ME Lmover o cursor para a parte superior, média e inferior da janela de visualização, respectivamente.

zt, zzE zbmover a linha sob o cursor para a parte superior, média e inferior da janela de visualização, respectivamente.

E assim por diante.

:help motion.txt vai explodir sua mente.

romainl
fonte
17
Eu normalmente não faço isso, mas este comentário é apenas para dizer que esta é uma ótima resposta!
jojo
Por algum motivo, eu nunca tinha usado H, M ou L antes, ótimas dicas!
Chris
Adicionando isso ]}e [{(2 pressionamentos de tecla) pule para o final ou início de um escopo (por exemplo, um definido por{ ... }
Matthew Woo
3
Bem, isso ainda não responde à pergunta de OP sobre how to jump to a line he's seeing like using a mouse. Eu sei e uso todas as combinações de teclas que você mencionou o tempo todo. Mas ainda não é tão eficiente quanto apontar o mouse ao pular grandes distâncias.
Penghe Geng
sim H, M, L são fáceis de lembrar: alto, médio, baixo;) @Chris
nils petersohn
25

além do comando de movimento do vim, acho que um plugin do vim chamado EasyMotion é muito útil para navegar, se você estiver familiarizado com o vimperator ou pentadáctilo, o EasyMotion apenas traga o modo de dica de volta para o vim. aqui está uma demonstração animada e aqui está o tutorial em vídeo. Espero que seja útil para você.

Vincent
fonte
A vantagem do easymotion é que você pode ir a qualquer lugar na tela com apenas 3 pressionamentos de tecla.
Xavier T.
+1: EasyMotion é realmente um jetpack do movimento do Vim. (a propósito, PreciseJump também. Na verdade, EasyMotion é filho de PreciseJump)
Dmitry Frank
2
Como diabos o autor do EasyMotion conseguiu essa linha de status super incrível na demo?
Cyrille
1
A 'linha de status super incrível' é um plugin chamado 'Powerline'. Está aqui: vim.org/scripts/script.php?script_id=3881
DEzra
você poderia atualizar o url de demonstração animado? não está mais funcionando
brauliobo
20

Existem zilhões de maneiras de se mover no vim, esta é uma de suas áreas realmente fortes. Eu uso {e }muito, que sobe e desce para a próxima linha em branco nessa direção. %é útil para ir e voltar para um colchete correspondente (de qualquer tipo). We Bavançar e voltar por uma "palavra".

Pode valer a pena revisar a seção Movendo-se do manual do Vim.

Greg Hewgill
fonte
4
Provavelmente também vale a pena mencionar a paginação para cima e para baixo usando Ctl + U e Ctl + D, respectivamente.
Nick
10

vim tem suporte para mouse! experimente (em seu .vimrc):

set mouse=a

Nota : como usuário da tela, descobri que também preciso

set ttymouse=xterm2

para que isso funcione.

rgcb
fonte
4
É bom saber, no entanto, continuarei a buscar a navegação rápida perfeita sem a necessidade do mouse.
Helmut Granda
9

pessoalmente prefiro usar:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position
Siwei Shen 申思维
fonte
5

Com a opção relativenumber( : help relativenumber - incluído no Vim 7.3 ), você pode chegar à linha sob seus olhos com o movimento a [count]kou [count]j, que permite que você se mova na linha atual com movimentos como ftwebexplicado por @romainl.

mMontu
fonte
Ótima opção. Mais rápido do que fácil movimento.
Penghe Geng de
5

Além de {, }, (, ), <number>cb, <number>cB, <number>cWe %, eu uso dessas técnicas a navegação:

  • ciw, diw( ciW, diW). etc. para editar / excluir rapidamente a palavra sob o cursor (incluindo caracteres sem espaço)
  • ci(, ci"( ca(, ca"), etc. para editar rapidamente entre parênteses, aspas (incluindo parênteses, aspas). O mesmo se aplica a d.
  • Marca com letras MAIÚSCULAS para defini-los globalmente (entre arquivos) e persistentemente (quando o buffer é fechado). Por exemplo, mAirá criar uma marca global Aque estará disponível com o 'Acomando (ou `Apara respeitar a coluna).
  • gf ir rapidamente para o arquivo sob o cursor
  • f, t( F, T) para mover para o char, antes do char para a direita (esquerda) (use ;para repetir). Eles são particularmente úteis para comandos de c(use .para repetir).
  • ^]para mover para a tag e ^Tpara voltar.

E muitas outras maneiras de se mover :)

Verifique isso para obter mais informações: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Para usuários de rails, há um plugin rails-vim muito útil, você pode querer dar uma olhada também.

Penkovsky
fonte
3

este é um bom lugar para aprender os principais comandos de navegação, parte do poder / velocidade do vim vem da combinação de movimento com ação, ou seja cw-> alterar palavra, d10j-> deletar 10 linhas abaixo, etc. Também esta e esta são leituras interessantes.

TI
fonte
2

Você pode :set nohlsearchdesligar o destaque de seus personagens de pesquisa.

Eu também navego muito usando ctags.

richo
fonte
github.com/richoH/dotfiles/blob/master/vimrc Você pode encontrar outras coisas úteis lá.
richo
Obrigado pela dica, estava olhando seu vimrc e encontrei sua nota onde você definiu para destacar a linha quando chegar a 80 caracteres ao escrever e-mails ou documentos. Por que você escreveria um e-mail no VIM? Posso entender um documento para seu uso pessoal, mas não tenho certeza sobre um e-mail.
Helmut Granda
Eu uso o mutt + vim para ler e escrever a grande maioria dos meus e-mails. Eu também uso o plug-in de texto para escrever muito conteúdo da web no vim. Eu tenho a quebra automática de linha ativada para e-mails, mas para links etc, pode ser útil ter um lembrete se eu não tiver formatado corretamente ou se as aspas aninhadas estiverem ficando muito longas.
richo
0

Eu escrevi um plugin com uma navegação super rápida em mente, é chamado move-less:

https://github.com/anschnapp/move-less

Ele permite que você procure o arquivo de buraco confortável, rolando com ( h j k l-keys). Você não muda a posição do cursor enquanto rola o site do buraco (com base no truque de dobra). Se você abortar sua busca, você estará exatamente onde começou.

Para uma navegação super rápida, a intenção é usar meu plugin para obter a posição desejada na tela e então pular para a posição certa via easymotion (que já foi recomendado em outra resposta):

https://github.com/easymotion/vim-easymotion

Se você combinar os dois, você pode até mesmo avançar no histórico de saltos e pode pular entre sua origem e destino simplesmente via <c-o>e <c-i>.

estalo
fonte