Как эффективно избежать метасимволов в поиске vim - PullRequest
0 голосов
/ 31 мая 2018

Perl обеспечивает функцию quotemeta, а также возможность окружать строки с помощью конструкции \Qlots-of-meta-characters\E, чтобы обеспечить интерпретацию всех символов от \Q до \Eкак литералы.

Очень часто я ищу строки, полные метасимволов в Vim.Это непродуктивно избегать каждого специального персонажа индивидуально.Есть ли в Vim что-то вроде /\Qstring-to-search\E, которое облегчит жизнь?

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете использовать /\Vstring-to-search.

Существует два предупреждения:

  • \ является специальным.Вы все еще можете использовать все метасимволы регулярных выражений, поставив перед ними \.
  • Нет эквивалента \E.\V влияет на остальные регулярные выражения.

См. :help /\V.

Вы можете объединить это с кодом из ответа в https://stackoverflow.com/a/676619/1848654 следующим образом:

vnoremap <C-f> "hy/\V<C-r>=substitute(@h,'[\/]','\\&','g')<cr>

Идея такова:

  • Скопировать ("yank") выделенный текст в регистр h: "hy
  • Запустить режим поиска:/
  • Предварительно заполните начало регулярного выражения: \V
  • Вставьте содержимое регистра: <C-r>
  • Не используйте реальный регистр;вместо этого возьмем результат вычисления выражения: =
  • Наше выражение (оканчивающееся на <cr>): substitute(@h,'[\/]','\\&','g')
    • Возьмите содержимое регистра h: @h
    • Применить замену.Вставьте \ перед каждым \ и /: substitute(...,'[\/]','\\&','g')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...