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
.
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?
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.
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.