VIM: возможно ли добавить пользовательское поведение при использовании / c с командой замены?
224
Steve Vermeulen
Было несколько случаев, когда было бы удобно подключиться к поиску и заменить поведение для определенных вещей. Например, у меня есть следующее отображение в моем vimrc:
nnoremap n nzzzv
Который центрирует экран каждый раз, когда вы переходите к следующему матчу. Это хорошо работает, но не применяется при выполнении команды% s // c. Есть ли способ подключиться, когда пользователь выбирает один из вариантов подтверждения y / n / q / q / l / etc. так что вы можете запускать команды?
3 ответа на вопрос
2
Ingo Karkat
К сожалению нет. Обычный способ подключиться к этому будет через
:autocmd CursorMoved * ...
но это событие не запускается в :substitute///cцикле запросов. Думайте об этом как о особой моде со многими ограничениями; было бы очень трудно разрешить использование пользовательских функций при сохранении правильного состояния поиска.
Вам бы пришлось переопределить :substituteфункциональность самостоятельно. Может быть, вы можете использовать :help sub-replace-expressionс запросом там; Я еще не пробовал, возможно ли тогда взаимодействие с пользователем.
2
Ingo Karkat
Обходной путь для вашего конкретного случая использования центрирования текущей замещенной строки заключается в
:set scrolloff=999
перед :substituteкомандой. Это имеет тот же эффект центрирования текущей строки, что и ваша zzкоманда.
1
Steve Vermeulen
Основываясь на предложении Инго Карката использовать опцию прокрутки, я закончил с этим:
command! -nargs=1 CC set scrolloff=999|exec <f-args>|set scrolloff=0
Теперь вы можете просто запустить «CC% s // c», и он временно отцентрирует курсор во время выполнения команды. Соблазнительно найти аббревиатуру или что-то для этого, но я не мог придумать ничего, что бы работало надежно.