Salvar a última ação (.) Em uma macro

9

Caso de Uso

Estou no modo normal. Não pensei explicitamente em gravar uma macro, mas faço uma única alteração de comando. Agora posso repetir esta ação usando dot.

Agora percebo que é uma ação útil salvar em uma macro para usar mais tarde, em vez de digitar todo o comando todas as vezes. Posso atender a todas as alterações que precisam desse comando agora usando ponto, ou posso continuar editando e usar esse comando posteriormente, salvando-o em uma macro.

O último é o que eu quero fazer, mas a maneira mais fácil de pensar em fazê-lo não é fácil - desfaça minha alteração, comece a gravar uma macro e digite novamente o comando para fazer as alterações necessárias e pare de gravar a macro.

O que eu tentei até agora:

A gravação de pontos em uma macro não funciona porque registra o ponto e não a alteração que o ponto executa. (Por exemplo, digamos que o comando armazenado no ponto era d5wSe você começar a gravar uma macro e executar a ação via. Esperando que ele exclua 5 palavras toda vez que você executar a macro, isso não acontecerá. Da próxima vez que você executar a macro fará ponto e não o comando.Isso d5wsignifica que se você fez alguma outra alteração após gravar a macro - diga excluir 3 palavras usando d3we foi a última alteração realizada, quando você executar a macro, excluirá 3 palavras e não 5, porque está apenas rodando .)

Peeyush Kushwaha
fonte
Estou lutando para entender o que você quer fazer e por que você não faz o que quer que seja com uma macro.
11
@DrEval O OP percebe, após executar um comando no modo normal, que ele deveria ter sido salvo em uma macro e não deseja digitá-lo novamente enquanto grava a macro.
Rico

Respostas:

2

O Vim não mantém um histórico dos seus comandos no modo normal. Se você deseja manter um histórico do seu modo normal, use o seguinte para salvá-lo em um arquivo: https://vi.stackexchange.com/a/587/13848

Os comandos do modo normal são geralmente curtos, então as pessoas digitam no modo normal e não tentam criar macros. No entanto, se você quiser criar macros fora dos comandos do modo normal, poderá convertê-lo em um Excomando de modo e salvá-lo em uma macro como apontado pelo @wmmso. Você pode fazer isso usando o normcomando Portanto, se você deseja excluir 2 palavras, começando na posição atual do cursor, e use um comando de modo normal no Exmodo de uso :norm d2w. (Ref: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Executar comando normal acima do intervalo )

É melhor usar um Excomando mode se for um comando complicado, pois permite digitar o comando completo em um buffer, verifique se ele está realmente correto e também o salve no histórico da linha de comando.

Agora que você possui o comando do modo normal no modo ex, também pode navegar pelo comando como histórico usando q:e copiá-lo em um registro usando "ay$, enquanto estiver na linha que contém a linha de comando que deseja salvar em uma macro. Então, quando você quiser executar a macro, poderá executá-la usando@a

alpha_989
fonte
Como você escreveria um comando no modo normal na linha de comando? por exemplo d2w?
Peeyush Kushwaha
Adicionados alguns esclarecimentos na resposta. Isso ajuda?
Alpha_989 1/07
0

copie o conteúdo do registro ":" (o que você acabou de fazer) em outro registro, por exemplo, registre um:

:let @a = @:

você pode executá-lo novamente usando

@a
wmmso
fonte
Isso não funciona para mim no vim 7.4. Parece que o registo :contém o último comando executado via :command-name-goes-hereem vez de um comando do modo normal, comod2w
Peeyush Kushwaha
2
Essa solução funciona apenas para comandos ex, não para comandos no modo normal. Não conheço um registro que contém o último comando do modo normal. Seria útil #
Steve Steve