Estou tentando entender como posso usar o operador com o movimento subsequente dentro de um mapeamento. Por exemplo:
nmap /c c{here we pending for a motion}/<C-r>"<CR>
O mapa deve fazer o seguinte:
- Ative o
c
operador e ouça o próximo movimento; - Por exemplo, eu posso digitar aqui
t,
para alterar tudo antes da próxima vírgula; - Vá para o modo de inserção excluindo tudo entre o cursor e a vírgula;
- O texto excluído é pesquisado automaticamente como padrão
Então, para simplificar, depois que o texto em movimento é removido, eu saio no modo de inserção com ocorrências realçadas do texto excluído. Ficaria muito grato se alguém me ajudasse a resolver esse caso.
ATUALIZAR
As respostas são quase o que eu quero. Mas! Quando pressiono /cw
, digite algo em vez da palavra e pressione <Esc>
. Depois, espero fazer o mesmo com as próximas ocorrências. Mas, depois de pressionar n
(ir para a próxima ocorrência) e .
(repetir o último comando), ele apenas precede o último texto digitado em vez de substituí-lo. O objetivo principal do mapeamento é usá-lo com n/N
e .
para repetir. Perdi alguma coisa?
fonte
/c
ei
) vim.
apenas repete o último. Se você deseja estendê-lo, verifique orepeat
plugin. @TimurFayzrakhmanov também existem:g
e:s
comandos, podem ajudá-lo também."
código estranho no seu código'let @/=@""'
? Eu pensei que era possível, por exemplosilent exec 'normal!
[v]c'
, porque oc
operador faz o que eu espero, exceto que não adiciona o texto alterado ao padrão de pesquisa.""
foi um erro de digitação .. corri .. Euc
também inventei , mas acrescentou um espaço, porque há mudança de modo,n-i-n-i
eu acho ... faça algum teste que você verá.d
paray
estartinsert
paracall feedkeys("cgn", 'n')
(ver minha resposta abaixo)É mais fácil implementar (e documentar) mapeamentos complexos usando funções:
Em seguida, faça seu mapeamento chamar essa função:
Editar:
Se sua intenção é realizar pesquisa e substituir em um grande número de lugares que você deve tentar o comando de substituição:
:s
. Você pode alterar seu mapeamento para copiar a seleção visual para o padrão de pesquisa:fonte
enter motion:
, ele deu:t,ggVGJZZ
^ _ ^ É um problema comum para concatenação de comandos/cw
e digito algo em vez da palavra e, em seguida, pressione<Esc>
. Depois eu quero fazer o mesmo com as próximas ocorrências. Mas, depois de pressionarn
(ir para a próxima ocorrência) e.
(repetir o último comando), ele apenas precede o último texto digitado em vez de substituí-lo. O objetivo principal do mapeamento é usá-lo comn/N
e.
para repetir. Perdi alguma coisa?.
repetir seu comando.<CR>
deinput()
).Esta solução funciona com "repita o último comando" (aka
.
):Ao repetir, você nem precisa usar
n
, basta usar.
para buscar e substituir diretamente a próxima ocorrência, se quiser ir mais rápido.Opcionalmente, se você gosta de destacar as palavras correspondentes, pode substituir
'cgn'
por'n``cgn'
.fonte