Repita o último comando do modo normal, incluindo movimentos, no Vim


25

No Vim, com ., posso repetir o último comando do modo normal; por exemplo:

dd.

exclui uma linha duas vezes.
Mas se eu digitar

5j.

o cursor não move 10 linhas para baixo. Como repito o último comando do modo normal, especialmente uma jogada?

Respostas:


14

viminfelizmente não faz isso. O melhor que você pode fazer é instalar o plug- in repmo.vim , que repete os comandos de movimento que têm uma contagem.


11

é possível mesmo no vanilla vim, mas a aplicabilidade depende do seu caso de uso, por exemplo. com que frequência será necessário repeti-lo, pois exige mais algumas teclas para torná-lo repetível.


Opção 1: transformá-lo em uma operação no modo de comando

usando a descida de 5 linhas como exemplo, você pode:

  1. entrar :norm 5j, ele moverá o cursor para baixo 5 linhas
  2. use @:para repetir o movimento

:norm significa normal, qualquer sequência a seguir é considerada como pressionamento de tecla no modo normal


Opção 2: usar macro

  1. qa(armazene a macro no registro a, você pode escolher seu próprio registro qb, como qc)
  2. 5j
  3. q (terminar a gravação da macro)
  4. @apara repetir a operação gravada (substitua apelo nome do registro que você escolheu, por exemplo @b, @c)

A macro requer mais poder espiritual para ser configurada, mas é mais repetível no sentido em que você pode armazenar várias operações em diferentes registros sem ser substituído pelas operações mais recentes.


7

Na verdade, .repete a última alteração , não o último comando do modo normal. Como Paul disse, você precisará de um plugin para permitir que você repita movimentos.

Veja " :help .".


4

Você pode repetir as alterações com .. Os movimentos podem ser repetidos com o ;comando Este comando parece ser novo e faz uma coisa semelhante ao script repmo.vim mencionado em outras respostas.

Por exemplo, para passar para o segundo próximo c, pressione 2fc. Então, para fazer novamente, basta digitar ;.


11
;não é novo. É um comando vi padrão. Vi lembra o caráter tipo e alvo (mas argumento não numérico) da última f/ F/ t/ Tmovimento e ;repete. No entanto, não repete outros movimentos.
Pirocrasty

Isso conseguiu o que eu estava procurando fazer! obrigado. e obrigado @pyrocrasty pelo esclarecimento!
Paul

0

Você pode selecionar as linhas que deseja alterar e executar o último comando de ponto normal

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
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.