Что не так с этим отображением Vim? - PullRequest
0 голосов
/ 17 ноября 2011

Внутри функции, которую я использую для инициализации некоторых настроек, связанных с 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>

Последовательность V 10 j см V 10 k ucm должен оставить код без изменений.

Итак, теперь: что я делаю не так?

1 Ответ

4 голосов
/ 17 ноября 2011

Вы добавляете ненужные вещи.

:s/^/% <CR>

и

:s/^% /<CR>

должно работать для комментирования и раскомментирования соответственно.

Третий / используется для добавления таких опций, как /c для «подтверждения» или /g для «глобального». Если вы не используете эти опции, вам вообще не нужно это /.

В своей замене "uncomment" вы избегаете %, но % сам по себе не имеет особого значения для аромата регулярного выражения Vim. Мало того, что Vim определенно не будет соответствовать ему, если он сбежал, но \%<something> используется для группы атомов, таких как \%d. Так что ваш паттерн проваливается, потому что Vim натыкается на то, что вы \% ожидаете остатка атома и получаете «ничего».

...