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:
- enter
:norm 5j
, moverá o cursor 5 linhas para baixo - use
@:
para repetir o movimento
:norm
significa normal, qualquer sequência a seguir é considerada como suas teclas digitadas no modo normal
Opção 2: usar macro
qa
(armazene a macro no registroa
, você pode escolher seu próprio registro comoqb
,qc
)5j
q
(terminar a gravação da macro)@a
para repetir sua operação gravada (substituaa
pelo 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
vim
nã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 '.'