Costumo usar macros extremamente longas ao lidar com edição e refatoração repetitivas. Sempre que possível, escrevo-os como comandos no modo ex, em vez de gravá-los como macros, porque são mais fáceis de editar interativamente dessa maneira (com a janela de comando).
No entanto, às vezes eu preciso adicionar alguns comandos no modo normal, por exemplo, para puxar apenas parte de uma linha em vez de uma linha inteira para uso posterior na minha macro ou alinhar algum texto da maneira que eu quero.
Existe uma maneira de continuar um comando ex mode após a norm
inclusão?
(Para um exemplo real do tipo de complexidade de que estou falando :)
:'a+s/\_^\s*\(\S*\)::\_[^>]*>\s*\("[^"]*"\)\s*;\_s*\_$/ "\1", \2,/ | m 'a- | norm f,50a ^[d44|
Existe uma maneira de adicionar mais texto no final e executá-lo como um comando no modo ex?
normal-mode
ex-mode
macro
Curinga
fonte
fonte
:normal
comando consuma o restante da linha? Se assim você poderia envolvê-lo dentro de uma cadeia de caracteres que você pode executar com o:execute
comando::exe 'norm f,50a ^[d44|' | other Ex command
.:execute
passará a string apenas como argumento para:normal
, e o último não verá o que está depois na linha de comando, permitindo que você adicione outros comandos Ex. Há apenas uma coisa a prestar atenção, se a string contiver caracteres de controle não literais, como\e
para<Esc>
você ter que usar aspas duplas para permitir que o Vim os interprete, caso contrário, aspas simples impedem a interpretação de qualquer coisa dentro da string.Respostas:
Se você tiver uma sequência de pressionamentos de tecla que deseja executar no modo normal na linha de comando, poderá usar o
:normal
comandoNo entanto, por padrão, o
:normal
comando não pode ser seguido por outro comando, porque, como diz a ajuda:Portanto, se você quiser adicionar outro comando Ex depois
:normal
, poderá agrupar todo o:normal
comando dentro de uma sequência e, em seguida, fazer com que o:execute
comando execute o último. Poderia dar algo como:Ao contrário
:normal
,:execute
não considerará o tubo como parte de seu argumento. Ele o considerará como uma terminação de comando e executará apenas o que está dentro da cadeia.:normal
não verá o que está depois na linha de comando, apenas o que resta na string.Portanto, você poderá adicionar outro comando Ex posteriormente sem
:normal
digitá-lo no modo normal.Há apenas uma pequena coisa para prestar atenção a:
se você cercar seu string com aspas simples, o Vim não irá interpretar qualquer coisa dentro dele, o que pode ser um problema se você quiser
:normal
bater caracteres de controle, tais como<Esc>
,<CR>
,<Tab>
ou<C-V>
por escrever caracteres especiais, respectivamente:\e
,\r
,\t
e\<C-V>
.Esses caracteres especiais são descritos em
:help expr-quote
.Nesse caso, você pode usar aspas duplas em vez de aspas simples para envolver a string, para que o Vim possa interpretá-las corretamente.
Se os caracteres de controle forem literais (ou seja, se você vir a notação de sinal de intercalação:
^[
para Escape,^M
para Enter,^I
para Tab,^V
para<C-V>
), você não deve precisar de aspas duplas.Quando você grava uma macro, a última armazena os caracteres de controle como literais, não usa o tipo de caracteres especiais descrito em
:h expr-quote
, portanto, você não precisa de aspas duplas. E se você deseja editar uma macro adicionando um caractere de controle literal, você pode prefixá-la<C-V>
(consulte:h i_ctrl-v
para obter mais informações). Por exemplo, para adicionar uma fuga literal dentro do registro em que sua macro está armazenada ou na sequência de pressionamentos de tecla passados como argumento:normal
, você pode pressionar<C-V><Esc>
.fonte