在vim中执行非正则表达式搜索/替换

Mik*_*den 52 regex vim replace

在vim中进行搜索/替换时,我几乎从不需要使用正则表达式,因此不断地逃避所有内容是一种痛苦,是否有办法使其默认不使用正则表达式或是否有替代命令来实现此目的?

举个例子,如果我想更换<&lt;,我想只能够输入s/</&lt;/g,而不是s/\</\&lt\;/g

bju*_*nix 81

对于:s命令,有一个禁用或强制魔法的快捷方式.关闭魔法使用,%sno如:

:%sno/search_string/replace_string/g
Run Code Online (Sandbox Code Playgroud)

在这里找到:http://vim.wikia.com/wiki/Simplifying_regular_expressions_using_magic_and_no-magic

  • @gbr您可以使用`\V`使“$”也正常:http://vimdoc.sourceforge.net/htmldoc/pattern.html#/magic (3认同)
  • 关闭魔术仍然给“ $”和“ \”字符留下特殊含义 (2认同)
  • 正则表达式是 VIM 中的默认值,这对我来说很奇怪。在没有正则表达式的情况下执行搜索和替换更为常见。因此,我最终使用了“Ctrl”+“Shift”+“H”。我想这是我需要擅长正则表达式的另一个原因 (2认同)

Her*_*itz 15

问题主要是由于&对替换字符串中的角色的混淆造成的.替换字符串不是注册表,虽然它有一些特殊的字符,比如&.您可以&在此处阅读替换字符串中的角色: :h sub-replace-special.

我怀疑OP的主要问题不一定是输入额外的反斜杠,而是记住何时需要反斜杠,何时不需要反斜杠.一种解决方法可能是在不确定时开始使用"替换表达式".(请参阅:h sub-replace-expression.)这需要在替换字符串中添加一个`\ =',但对于某些人来说,它可以让您更自然地控制被替换的字符串,因为将字符串文字放在单引号中将为您提供所需的替换字符串.例如,这个替代品符合OP的要求:

:s/</\='&lt;'/g
Run Code Online (Sandbox Code Playgroud)


Mic*_*tor 14

使用此选项:

set nomagic
Run Code Online (Sandbox Code Playgroud)

看到 :help /magic

  • 在这种情况下无济于事。总体而言可能会有所帮助。+1 (2认同)
  • @Tomalak - 不确定为什么你说它在这种情况下无济于事.设置为_nomagic_似乎对我来说很好.然后发出命令`:s/</&lt;/g`,它可以根据需要运行.不是一个很好的解决方案,因为你通常想要魔术,我认为,但它确实有效. (2认同)
  • 关闭魔法仍然为“$”和“\”字符留下特殊含义 (2认同)