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", и он временно отцентрирует курсор во время выполнения команды. Соблазнительно найти аббревиатуру или что-то для этого, но я не мог придумать ничего, что бы работало надежно.