Выполните поиск / замену без регулярных выражений в vim - PullRequest
47 голосов
/ 06 июня 2011

Когда я выполняю поиск / замену в vim, мне почти никогда не нужно использовать регулярное выражение, так что постоянно избегать всего этого очень сложно, есть ли способ установить по умолчанию отсутствие регулярного выражения или есть альтернативная команда для этого

Например, если я хочу заменить < на &lt;, я бы хотел просто набрать s/</&lt;/g вместо s/\</\&lt\;/g

Ответы [ 6 ]

77 голосов
/ 24 июля 2013

Для команды: s есть ярлык для отключения или принудительной магии.Чтобы отключить магию, используйте %sno, например:

:%sno/search_string/replace_string/g

Найдено здесь: http://vim.wikia.com/wiki/Simplifying_regular_expressions_using_magic_and_no-magic

15 голосов
/ 06 июня 2011

Проблема в первую очередь вызвана путаницей в отношении роли & в строке замены.Строка замены - , а не в обычном порядке, хотя в ней есть некоторые специальные символы, такие как &.Вы можете прочитать о роли & в строке замены здесь: :h sub-replace-special.

Я подозреваю, что основная проблема для OP - не обязательно вводить дополнительные обратные слеши, а скорее вспоминать, когда нужен обратный слеш, а когда нет,Одним из обходных путей может быть использование «выражений замены», если вы не уверены.(См. :h sub-replace-expression.) Это требует помещения `\ = 'в строку замены, но для некоторых людей это может дать вам более естественный контроль над тем, что заменяется, так как помещение строкового литерала в одинарные кавычки даст вам строку замены, которую вы хотите,Например, эта замена делает то, что хочет OP:

:s/</\='&lt;'/g
12 голосов
/ 06 июня 2011

Используйте эту опцию:

set nomagic

См. :help /magic

3 голосов
/ 08 июня 2011

Если вы хотите искать буквально, вы можете использовать \V атом регулярного выражения. Это почти делает то, что вы хотите, за исключением того, что вам также нужно избежать обратной косой черты. Вы можете определить свою собственную команду поиска, которая будет искать буквально. Как то так:

 :com! -nargs=1 Search :let @/='\V'.escape(<q-args>, '\/')| normal! n

А затем используйте: Search / foobar / baz

Для замены вы можете после команды: Search просто использовать

:%s//replace/g

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

(просто хочу дать вам несколько идей)

0 голосов
/ 06 июня 2011

Вы включили магию?

:set magic
0 голосов
/ 06 июня 2011

Попробуйте изменить поиск и заменить в строке меню.

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