Acho que, se você digitar um prefixo numérico antes de executar um comando ex, a convenção que se aplica é configurar o comando para preparar uma operação em um intervalo de linhas. É explicado na documentação,
UM NÚMERO DE LINHAS
Quando você souber quantas linhas deseja alterar, digite o número e depois ":". Por exemplo, quando você digita "5:", você obtém:
:.,.+4
Agora você pode digitar o comando que deseja usar. Ele usará o intervalo "." (linha atual) até ". + 4" (quatro linhas abaixo). Assim, abrange cinco linhas.
Agora, o que eu estou lidando é uma função personalizada minha, esta:
function! MyAmazingEnhancedDot()
if v:hlsearch == 1
:normal! .n
else
:normal! .j
endif
endfun
Essa é apenas uma maneira de otimizar tarefas repetitivas que incluem a repetição de uma operação em um intervalo de linhas ou em uma série de correspondências de pesquisa.
Esta função está vinculada a uma tecla de atalho. Como Alt+ .ou o que for.
Meu objetivo é ser capaz de fazer algo muito poderoso: eu deveria ser capaz de digitar /varName<CR>ciwnew-var<ESC>n9<Alt+.>
para conseguir renomear 10 instâncias de varName
para new-var
.
O que realmente acontece se eu fizer isso é que ele não executa a renomeação e as 9 linhas são manipuladas com a .
operação de edição salva pela minha coluna 0.
Só posso supor que Vim está interpretando minhas teclas digitadas assim: :.,.+8 normal! .n
.
No lado meio cheio de vidro, o :normal! .j
caso da ligação realmente funciona, porque o j
movimento que não tem efeito não tem conseqüências nessa situação. (Eu ainda preciso j
fazê-lo funcionar em um caso de uso interativo com prefixo não numérico).
Portanto, minha pergunta é como posso substituir o comportamento de expansão de linha que o Vim aplica ao meu vínculo? O que seria fantástico é se eu puder ler o prefixo numérico como argumento ou algo assim.
nnoremap <M-.> :<C-u>call MyAmazingEnhancedDot(v:count1)<cr>
e pular ocommand -count=1 EDot call MyAmazingEnhancedDot(<count>)
?