Что не так с этим отображением Vim?
Внутри функции, которую я использую для инициализации некоторых связанных с TeX настроек, у меня определено следующее отображение:
vmap <buffer> ucm :s/^\% //<CR>:nohlsearch<CR>
Я ожидал, что это позволит мне легко раскомментировать визуально выделенные строки. Аналог:
vmap <buffer> cm :s/^/\% /<CR>:nohlsearch<CR>
делает довольно хорошую работу по комментированию. Также аналогичные отображения для других языков, которые используют #, а не%, работают просто отлично. Последние выглядят так:
vmap <buffer> cm :s/^/# /<CR>:nohlsearch<CR>
vmap <buffer> ucm :s/^# //<CR>:nohlsearch<CR>
Предполагается, что последовательность V10jсмV10тыс.См оставляет код без изменений.
Итак, теперь: что я делаю не так?
1 ответ
Вы добавляете ненужные вещи.
:s/^/% <CR>
а также
:s/^% /<CR>
должен работать для комментирования и раскомментирования соответственно.
Третий /
используется для добавления параметров, таких как /c
для "подтверждения" или /g
для "глобального". Если вы не используете эти опции, вам это не нужно /
совсем.
В вашей "раскомментированной" замене вы убегаете %
но %
сам по себе не имеет особого значения для регулярного выражения Vim. Не только Вим, конечно, не будет соответствовать этому, если он сбежал, но \%<something>
используется для группы атомов, таких как \%d
, Таким образом, ваш шаблон терпит неудачу, потому что Vim натыкается на ваш \%
ожидая остатка атома и получая "ничего".