5

Например, я хочу выделить вхождения текущего регистра янки, т.е.

:let @/=@"

Это работает, если у @" нет «забавных» вещей вроде обратной косой черты.

я могу сделать

:let @/=escape(@", '\\')

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

Обновление: хорошо, мне действительно нужно избегать больше вещей. все регенты спецсимволы как минимум похоже. так есть ли экранирующая функция регулярного выражения или переменная, перечисляющая все специальные символы регулярного выражения?

1 ответ1

4

Я не думаю, что есть такой список. Вот функция escape, которую я использовал довольно долго как часть макроса для поиска текущей выбранной строки:

escape(@", '\\/.*$^~[]')

Редактировать:

Оригинальный ответ имел дополнительные аргументы из-за того, что я слишком много копировал из моего ~/.vimrc. Вот отображение, в котором я использовал этот escape на случай, если этот контекст может помочь. Выделение некоторого текста и ввод * выполняет поиск следующего вхождения этого текста. (Картирование, первоначально написанное Юргеном Крамером.)


vnoremap <silent> * :<C-U>
          \let old_reg=getreg('"')<bar>
          \let old_regmode=getregtype('"')<cr>
          \gvy/<C-R><C-R>=substitute(
          \escape(@", '\\/.*$^~[]'), '\n', '\\n', 'g')<cr><cr>
          \:call setreg('"', old_reg, old_regmode)<cr>

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