Что не так с этим отображением 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 натыкается на ваш \% ожидая остатка атома и получая "ничего".

Другие вопросы по тегам