Добавить поддержку для `ci |` и `da |` (выделение текста внутри каналов) - PullRequest
15 голосов
/ 06 июля 2011

Я часто использую такие команды, как ci( и di{ при редактировании исходного кода.

Параметры в блоках Ruby содержатся внутри символов канала, например |a, b|

Можно ли расширить это поведение, добавив поддержку |, чтобы команды вроде ci|, da| и yi| работали правильно?

Ответы [ 2 ]

20 голосов
/ 06 июля 2011

В моем vimrc есть следующее (для полноты я добавил команды va| и vi|):

nnoremap di\| T\|d,
nnoremap da\| F\|d,
nnoremap ci\| T\|c,
nnoremap ca\| F\|c,
nnoremap yi\| T\|y,
nnoremap ya\| F\|y,
nnoremap vi\| T\|v,
nnoremap va\| F\|v,

Оператор , повторяет предыдущий F, f, T или t но в обратном направлении.Очень полезный ключ!

Эти сопоставления могут быть легко изменены для поддержки других разделителей;Я использую версии $ все время при редактировании LaTeX.

3 голосов
/ 06 июля 2011

Вот что я бы использовал:

vnoremap <silent> a<bar> :<c-u>silent! normal! vF<bar>of<bar><cr>
vnoremap <silent> i<bar> :<c-u>silent! normal! vT<bar>ot<bar><cr>
onoremap <silent> a<bar> :normal va<bar><cr>
onoremap <silent> i<bar> :normal vi<bar><cr>

В основном настраивается режим ожидания оператора (то есть onoremap), который вызывает соответствующее отображение визуального режима. Отображения в визуальном режиме будут искать в обратном направлении, чтобы найти | с помощью F|, затем переходить на другую сторону визуального выбора с помощью команды o, а затем искать вперед с помощью f|, чтобы выбрать другой конец области передачи. , Внутренние отображения такие же, но вместо команд F и f вы используете T и t.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...