Como cancelar a gravação de uma macro no Vim?

7

Imagine que eu gravei uma macro e, ocasionalmente, comecei a gravar uma macro no mesmo registro. Posso interromper a gravação para que a macro original seja preservada no registro?

Eu sei que posso fazer :let @b=@a para copiar a macro do registro a para o registro b e, assim, preservá-la, mas talvez haja uma maneira mais direta?

    
por Alexey 28.10.2013 / 14:38

2 respostas

6

Quando você grava uma macro, o registro é esvaziado primeiro e preenchido à medida que você passa, então é muito improvável que exista uma maneira interna de salvar a macro anterior enquanto você está na metade de outra gravação. Uma maneira que não envolve escrever um wrapper em torno de q , isto é.

Eu e muitas pessoas usam um registro temporário ( @q , por exemplo) para todas as nossas gravações únicas. Talvez você também devesse.

    
por 28.10.2013 / 16:49
4

Como foi observado por @Trendfischer em seu comentário, o comportamento atual do vim não é (mais?) esvaziar o registro na primeira vez que pressionar q .

Agora, se você escolheu o registro errado, veja o que você pode fazer:

  • não sai do modo de gravação (por enquanto),
  • crie uma linha vazia,
  • cole o registro que você está sobrescrevendo (se estiver gravando no q register, é "qp ),
  • agora saia do modo de gravação ( q )
  • selecione a linha colada acima (sem marca de fim de linha: 0v$h ; não use V )
  • digite-o no registro que você sobrescreveu ( "qy se você estiver usando o q register; novamente: não use a cópia inteligente de linha Y ).
  • agora você tem sua macro antiga de volta no registro e pode reiniciar a gravação da nova macro no registro correto.

Claro que, com um pouco de esforço, você pode salvar a macro antiga e a nova (mas é necessário iniciar o processo antes de pressionar a segunda vez que o q ): basta colar o que você gravou e copiar o registo "novo" / "direito".

    
por 10.11.2016 / 11:51

Tags