Nota: Presumo que você esteja usando o a
registro para obter toda a resposta, mas você pode usar qualquer registro
Nota 2: <1b>
é Esc; você pode inserir isso com Ctrl+ve então Esc. Também pode aparecer como ^[
(dependendo da display
configuração).
Não é um mapeamento; então faz sentido que :map
não funcione. Ele é gravado em um registro e você pode vê-lo e editá-lo como qualquer outro registro.
Tudo o que qfaz é "limpar este registro e acrescentar qualquer pressionamento de tecla" , e tudo o que @faz é "avaliar um registro como comandos" .
Não há nada "diferente" em uma macro; você pode chamar qualquer registro como uma macro.
Para visualizar basta usar:
:echo @a
Assim como qualquer registro.
Você também pode usar :registers
para visualizar todos os registros.
Para editar, você pode fazer várias coisas:
A maneira mais simples de você apenas atribuir @a
, da seguinte maneira:
:let @a='iasd<1b>'
Isso iniciará o modo de inserção ( i
), inserção asd
e Escape de volta ao modo normal.
Isso não é muito útil para edição extensa; você pode usar funções (ou seja substitute()
,) ou talvez acrescentar algo ( :let @a=@a . 'more'
), mas alterar algo no meio não é tão fácil.
Descobri que a melhor maneira disso é iniciar um novo buffer com :split
ou :tabnew
editar o registro, inserindo-o ali, editando-o e copiando-o novamente.
Você pode usar o "apque irá inserir o texto no buffer (onde a
está o seu registro):
iThis is A<1b>
Agora posso mudar a linha para talvez:
iThis is an edited macro<1b>
Então eu faço ^v$"aypara puxar (copiar) esta linha para o a
registro:
- ^ para o início da linha
- v para modo visual
- $ para fim de linha
- "ay puxe a seleção para registrar
a
Se desejar, você pode fazer isso sem usar o modo visual com ^"ay$.
Agora você pode usar @a, como se isso fosse o que você gravou originalmente.
Você também pode usar yy, e então @", o que é um pouco mais rápido. Isso também copiará a nova linha à direita e poderá causar efeitos colaterais ... Outra maneira de tornar isso mais rápido é usar uma macro :-)
Enter
no final de sua gravação. Em muitos casos, isso pode ser benigno, mas em cenários em que você criou cuidadosamente a posição do cursor no final da gravação, isso pode afetar a repetibilidade.v
e selecionar a linha inteira (sem a nova linha).v^$"ay
para puxar (copiar) esta linha para oa
registro." Isso não deveria^
acontecer antesv
e com$
você ainda não está copiando a nova linha? Eu acho que deveria ser:0v$h"ay
(sim dolorosamente longo!)$
passa para o final da linha, mas não inclui a nova linha. É a diferença entre0y$
eyy
. Colocarh
após o$
que significa apenas que você sentiria falta do último personagem.Para conseguir algo para trabalhar ...
Começará a gravar uma macro no
a
registro.Você pode ver muitos dos seus registros atuais (usados para macros, arrancar, excluir etc.) com o
:reg
comando ou pode especificar um registro para exibir fornecendo seu nome. Por exemplo, para mostrar o registroa
:rendimentos
Você pode anexar a um registro nomeado existente usando a letra maiúscula correspondente. Isso funciona não apenas para gravar macros, mas também para puxar. Por exemplo:
rendimentos
Se você deseja usar a sintaxe let para editar uma macro existente, é possível:
que será expandido para
e você pode alterar as teclas individuais.
Observe que você pode usar o
<C-r>
(ou seja, control + r) para colar de qualquer registro no modo de linha de comando (ou no modo de inserção, nesse caso).Além disso, quando você estiver no modo de linha de comando, se você digitar
<C-f>
, a janela da linha de comando será exibida, na qual você poderá ver / editar comandos anteriores emitidos e editar seu comando atual antes de chamá-lo. Pressione enter no comando que você deseja enviar.A vantagem disso é que você pode usar seus comandos normais de movimento / substituição dentro desse buffer para editar sua macro. Por exemplo:
trará à tona:
Se você estiver no comando 120, poderá:
rendimentos
Obviamente, você pode colar o conteúdo do registro no seu buffer e alterá-lo lá. Mas você pode fazer tudo o que precisa sem contaminar seu buffer de trabalho.
fonte