VIM: É possível adicionar um comportamento personalizado ao usar / c com o comando substitute?

2

Houve alguns casos em que seria conveniente conectar-se à pesquisa e substituir o comportamento por certas coisas. Por exemplo, eu tenho o seguinte mapeamento no meu vimrc:

nnoremap n nzzzv

Que centra a tela toda vez que você avança para a próxima partida. Isso funciona bem, mas não se aplica ao fazer um comando% s // c. Existe uma maneira de ligar quando o usuário seleciona uma das opções de confirmação y / n / q / q / l / etc. para que você possa acionar comandos?

    
por Steve Vermeulen 02.03.2013 / 01:16

3 respostas

2

Uma solução alternativa para o seu caso de uso específico de centralizar a linha atualmente substituída é

:set scrolloff=999

antes do comando :substitute . Isso tem o mesmo efeito de centralizar a linha atual como seu comando zz .

    
por 02.03.2013 / 12:42
2

Infelizmente não. A maneira usual de se conectar a isso seria através de um

:autocmd CursorMoved * ...

mas esse evento não é disparado no loop de consulta :substitute///c . Pense nisso como um tipo especial de modo com muitas restrições; seria muito difícil permitir a funcionalidade personalizada, mantendo o estado de pesquisa correto.

Você teria que reimplementar a funcionalidade :substitute . Talvez você possa usar um :help sub-replace-expression com a consulta lá; Ainda não tentei se a interação com o usuário é possível.

    
por 02.03.2013 / 12:38
1

Com base na sugestão de Ingo Karkat de usar a opção scrolloff, acabei indo com isso:

command! -nargs=1 CC set scrolloff=999|exec <f-args>|set scrolloff=0

Agora você pode simplesmente executar "CC% s // c" e ele centralizará o cursor temporariamente durante o comando. É tentador encontrar uma abreviação ou algo assim, mas não consegui pensar em nada que funcionasse de maneira confiável.

    
por 02.03.2013 / 16:43