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.


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.


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ê.


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.


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.


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


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.


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.


2

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

Eu também navego muito usando ctags.


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>.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.