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

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

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 se move 10 linhas para baixo. Como repito o último comando do modo normal, especialmente um movimento?

Responder1

é possível mesmo no vanilla vim, mas a aplicabilidade depende do seu caso de uso, ou seja. com que frequência você precisará repeti-lo, pois são necessários mais alguns toques no teclado para torná-lo repetível.


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

usando mover 5 linhas para baixo como exemplo, você pode fazer:

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

:normsignifica normal, qualquer sequência a seguir é considerada como suas teclas digitadas no modo normal


Opção 2: usar macro

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

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

Responder2

vimnão faz isso infelizmente. O melhor que você pode fazer é instalar orepmo.vimplugin, que repete comandos de movimento que possuem uma contagem.

Responder3

Você pode repetir as alterações com .. Os movimentos podem ser repetidos com o ;comando. Este comando parece ser novo e faz algo 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 isso novamente, basta digitar ;.

Responder4

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

informação relacionada