在vim中进行搜索/替换时,我几乎从不需要使用正则表达式,所以经常需要转义所有内容很麻烦。是否有一种方法可以使其默认不使用正则表达式,或者有另一种命令可以实现此功能?
例如,如果我想将<代码><替换为
例如,如果我想将<代码><替换为
<
,我希望只需键入s/</</g
而不是s/\</\<\;/g
。:s
命令,有一个快捷键可以禁用或强制使用魔术字符。要关闭魔术字符,请使用:sno
命令,例如::sno/search_string/replace_string/g
查看本文:http://vim.wikia.com/wiki/Simplifying_regular_expressions_using_magic_and_no-magic
Ctrl
+ Shift
+ H
进行操作。我想这也是我需要提高正则表达式技能的另一个原因。 - Kellen Stuart\V
命令来使"$"符号变为普通字符:http://vimdoc.sourceforge.net/htmldoc/pattern.html#/magic - drevicko:s
的方法是:%sno
,而实际上只需使用:sno
即可。%
表示将在整个文件范围内进行替换操作。请考虑删除%
并更新您的回答。 - Atralb使用此选项:
set nomagic
请参阅:help /magic
:s/</</g
,它就能按预期工作了。我认为这不是一个很好的解决方案,因为通常情况下你想要开启魔术模式,但它确实有效。 - Herbert Sitz\M
开关,它应该与nomagic
相同(但是在每个正则表达式的基础上),但显然nomagic
会改变替换中&
的行为,而\M
不会。这也是我认为让&
成为文字很困难的原因。 - Tomalak:h sub-replace-string
。) - Herbert Sitz&
的作用所致。虽然替换字符串中包含一些特殊字符,如 &
,但它并不是一个正则表达式。你可以在这里阅读有关替换字符串中 &
的作用的信息::h sub-replace-special
。:h sub-replace-expression
)这需要在替换字符串中放置`\=',但对于一些人来说,这样做可以更自然地控制被替换的内容,因为将字符串文字放入单引号中将会给出你想要的替换字符串。例如,以下替换实现了 OP 想要的效果::s/</\='<'/g
如果您想要进行文字字面查找,可以使用\V
正则表达式原子。这个几乎做到了你想要的,除了你还需要转义反斜杠。您可以定义自己的搜索命令来进行文字字面查找。例如:
:com! -nargs=1 Search :let @/='\V'.escape(<q-args>, '\/')| normal! n
然后使用:搜索/ foobar / baz
对于替换,您可以在:搜索命令之后简单地使用
:%s//replace/g
:%s//\='replace'/g
,同时,大多数时候您可能还想添加'c'标志 - :%s//\='replace'/gc
。 - gbr以下是如何仅在命令模式下禁用正则表达式搜索/替换:
autocmd CmdWinEnter * set nomagic
autocmd CmdWinLeave * set magic
所有依赖于正则表达式的插件,例如空格移除器,应该像往常一样正常工作。
你启用了魔法吗?
:set magic
尝试在菜单栏上使用编辑查找和替换功能。
<
。除此之外,我认为没有任何方法可以让&
直接生效。 - Tomalak