2

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

nnoremap n nzzzv

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

3 ответа3

2

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

:autocmd CursorMoved * ...

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

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

2

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

:set scrolloff=999

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

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .