Quando estou gravando uma macro q
e pronto, posso digitar:
q
para parar a gravação se estiver no modo normal ou visual.<c-o>q
para parar a gravação se eu estiver no modo de inserção...
Como interrompo a gravação se minha macro termina no modo de comando?
command-line
register
macro
iago-lito
fonte
fonte
:'<,'>s/toBeReplaced//g
e coloque o cursor entre os dois//
para que tudo que eu precise fazer seja digitarnewString<cr>
e pronto. :)Respostas:
Outra solução é quando, no modo de linha de comando, use
Ctrl-f
e pressioneq
para interromper a gravação.Ctrl-f
permite abrir a janela da linha de comandos, na qual é possível editar o comando no modo normal. Para validar o comando, basta usar enter.Portanto, depois de adicionar algo como:
no seu
.vimrc
, você pode usar<c-q>
para interromper a gravação de uma macro enquanto estiver no modo de comando.Florent
fonte
^F
) do final da macro, certo? Pelo menos é o que eu vejo.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
e, portanto, a gravação realmente parou enquanto você digitava a parte do comando. Para usar a macro:@qFINISHYOURCOMMAND<cr>
e pronto: não há necessidade de editá-la. Infelizmente, isso não parece funcionar no modo visual (ou perde a seleção) .. ou eu perdi alguma coisa?@q
eo intervalo foi adicionado no início de comando'<,'>
- enquanto a macro começou com:
....'<,'>
) ainda corresponde à seleção ao validar o comando.Uma maneira de fazer isso:
qq
... outros caracteres)ESC
para sair do modo cmdline eq
finalizar sua macro.ESC
do seuq
registro (*): você pode colá-lo em um buffer, remover o^[
caractere, selecionar todo o material novamente (caractere) e puxá-lo de volta para registrarq
.@q
.Basicamente, você "pós-processa" sua macro um pouco, pois ela é armazenada em um registro :)
(*) Uma maneira rápida de remover o último caractere de uma macro armazenada no registro
q
seria:fonte
:let @q = @q[:-2]
por favor? Especialmente como[:-2]
funciona? :-)@q
acima). Alguns exemplos aquiDepois de ler seu comentário sobre o caso de uso, parece que você pode usar um mapeamento de teclas em vez de uma macro.
Eu tenho esta linha no meu .vimrc (não me lembro onde a encontrei):
Ele tem um efeito semelhante ao caso de uso que você descreveu, colocando você na linha de comando. Portanto, a única coisa que você precisa fazer é digitar a substituição e pressionar enter, mas, neste caso, substituir todas as ocorrências da palavra que estava sob o cursor .
Para substituir apenas dentro do bloco atual, acho que algo como o seguinte deve funcionar:
Obviamente, você pode mapeá-lo para qualquer chave que desejar.
O que faz acima: marque a posição atual usando o marcador sem nome, selecione visualmente o bloco atual, saia do modo visual e retorne o cursor para a posição salva (os marcadores de seleção visual ainda estão definidos), entre no modo de comando e digite o comando substituto , inserindo a palavra que estava sob o cursor
<C-r><C-w>
e posicionando o cursor para digitar a substituição.fonte
toBeReplaced
padrão não é tão simples quanto "a palavra sob o cursor", e é por isso que preciso de uma macro pequena e específica que eu possa criar em qualquer lugar. E mais uma vez: muito específico para um mapa: \ Obrigado de qualquer maneira :) #toBeReplaced
parte (em vez da palavra atual sob o cursor, o que é mais limitador).va{:s/<C-r>0//g<Left><Left>
com isso, você pode puxar qualquer padrão que precisar com antecedência e pressionar a tecla mapeada para substituir esse padrão por algo atual. quadra.