VIM: возможно ли добавить пользовательское поведение при использовании /c с командой замены?

Было несколько случаев, когда было бы удобно подключиться к поиску и заменить поведение для определенных вещей. Например, у меня есть следующее отображение в моем vimrc:

nnoremap n nzzzv

Который центрирует экран каждый раз, когда вы переходите к следующему матчу. Это хорошо работает, но не применяется при выполнении команды%s//c. Есть ли способ подключиться, когда пользователь выбирает один из вариантов подтверждения y/n/q/q/l/etc. так что вы можете запускать команды?

3 ответа

Решение

Обходной путь для вашего конкретного случая использования центрирования текущей замещенной строки заключается в

:set scrolloff=999

перед :substitute команда. Это имеет тот же эффект центрирования текущей строки, что и ваш zz команда.

К сожалению нет. Обычный способ подключиться к этому будет через

:autocmd CursorMoved * ...

но это событие не происходит в то время как в :substitute///c Цикл запроса. Думайте об этом как о особом типе режима со многими ограничениями; было бы очень трудно разрешить пользовательскую функциональность там, поддерживая правильное состояние поиска.

Вы должны были бы переопределить :substitute функциональность самостоятельно. Может быть, вы можете использовать :help sub-replace-expression с запросом там; Я еще не пробовал, возможно ли тогда взаимодействие с пользователем.

Основываясь на предложении Инго Карката использовать опцию прокрутки, я закончил с этим:

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

Теперь вы можете просто запустить "CC %s//c", и он временно отцентрирует курсор во время выполнения команды. Соблазнительно найти аббревиатуру или что-то для этого, но я не мог придумать ничего, что бы работало надежно.

Другие вопросы по тегам