VIM: è possibile aggiungere un comportamento personalizzato quando si utilizza / c con il comando substitute?


2

Ci sono stati alcuni casi in cui sarebbe conveniente agganciarsi alla ricerca e sostituire il comportamento per certe cose. Ad esempio, ho il seguente mapping nel mio vimrc:

nnoremap n nzzzv

Che centra lo schermo ogni volta che passi alla partita successiva. Funziona bene ma non si applica quando si esegue un comando% s // c. C'è un modo per agganciarsi quando l'utente seleziona una delle opzioni di conferma y / n / q / q / l / etc. in modo da poter attivare i comandi?

Risposte:


2

Una soluzione alternativa per il tuo particolare caso d'uso di centrare la linea attualmente sostituita è

:set scrolloff=999

prima del :substitutecomando. Ciò ha lo stesso effetto di centrare la riga corrente del zzcomando.


2

Sfortunatamente no. Il solito modo di agganciarsi a questo sarebbe attraverso un

:autocmd CursorMoved * ...

ma quell'evento non viene generato durante il :substitute///cciclo di query. Pensa a questo come un tipo speciale di modalità con molte restrizioni; sarebbe molto difficile consentire la funzionalità personalizzata all'interno mantenendo lo stato di ricerca corretto.

Dovresti reimplementare :substitutetu stesso la funzionalità. Forse puoi usare a :help sub-replace-expressioncon la query lì dentro; Non ho ancora provato se l'interazione dell'utente è possibile allora.


1

Sulla base del suggerimento di Ingo Karkat di usare l'opzione scrolloff ho finito con questo:

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

Quindi ora puoi semplicemente eseguire "CC% s // c" e centrerà temporaneamente il cursore durante il comando. È allettante trovare un'abbreviazione o qualcosa del genere, ma non riuscivo a pensare a nulla che potesse funzionare in modo affidabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.