Как правильно vim-escape переменная / регистр
Например, я хочу выделить вхождения текущего регистра янки, т.е.
:let @/=@"
Это работает, если @"
в нем есть "забавные" вещи, такие как обратная косая черта.
я могу сделать
:let @/=escape(@", '\\')
но я не уверен, что это правильно, и удастся ли избежать всех возможных проблемных персонажей. Может быть, есть другие.
Обновление: хорошо, мне действительно нужно избегать больше вещей. все регенты спецсимволы как минимум похоже. так есть ли экранирующая функция регулярного выражения или переменная, перечисляющая все специальные символы регулярного выражения?
1 ответ
Я не думаю, что есть такой список. Вот функция 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>