【问题标题】:how do I make a replacement with ampersand "&" in vim?如何在vim中用&符号“&”替换?
【发布时间】:2015-08-06 18:11:51
【问题描述】:

正如标题所说。我想用 & 符号 (&) 替换,比如“制表符”。

我用:

:%s/\t/&/g

当然它不起作用。我在 mac os x 上使用 vim(如果这有所不同)。谢谢!

【问题讨论】:

  • 当用& 替换& 时,这特别喜剧我认为一些自动命令试图强制有效的html!

标签: vim vi


【解决方案1】:

& 符号的问题在于它是regular expression metacharacter for backreferences。正则表达式替换部分中的& 字符表示“表达式匹配部分中匹配的所有内容”。

因此,例如,如果您有一个包含以下行的文件:

The quick brown fox jumps over the lazy dog.

执行像:s/jumps/a&b/ 这样的vi 命令会产生以下行:

The quick brown fox ajumpsb over the lazy dog.

您可以使用 :s/\(jumps\)/a\1b/ 做同样的事情,但输入的内容要多得多。

为什么 & 有用,而不仅仅是例如的别名\1 在一个简单的匹配表达式中?好吧,你也可以这样做::s/lazy \(dog\|cat\)/"&" is now "stupid \1"/:

The quick brown fox jumps over the "lazy dog" is now "stupid dog".

如果& 不可用,表达式会变得非常难看。

【讨论】:

  • 我可能应该添加到这个答案“你必须用前导 \ 来逃避你的 &,像这样::%s/\t/\&/g
【解决方案2】:

您确定问题出在与号上吗?我收到了更多关于标签的投诉。不要忘记逃避它。

:%s/\t/\&/g

【讨论】:

  • :help sub-replace-special 将显示替换中的所有特殊序列。请注意,'magic' 是默认设置的,用于那些基于该选项具有不同行为的人。
  • 是的,和号是问题所在。逃脱它的工作!
  • 与号将替代查询。它与正则表达式一起派上用场。假设你想用括号括起来所有三位数字,你可以这样做:%s/[0-9]\{3}/(&)/g
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多