如何用 vim 中的符号“&”替换?
how do I make a replacement with ampersand "&" in vim?
正如标题所说。我想用符号 (&) 替换 "tabs"。
我使用:
:%s/\t/&/g
当然这不起作用。我在 mac os x 上使用 vim(如果这有所不同)。谢谢!
您确定问题出在与号上吗?我收到了更多关于标签的投诉。不要忘记转义它。
:%s/\t/\&/g
与号的问题在于它是 regular expression metacharacter for backreferences。正则表达式替换部分的&
字符表示"everything that was matched in the match-part of the expression".
因此,例如,如果您有一个包含以下行的文件:
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\)/ab/
执行相同的操作,但需要输入更多内容。
为什么 & 有用,而不仅仅是一个别名,例如</code> 在一个简单的匹配表达式中?那么,您也可以这样做:<code>:s/lazy \(dog\|cat\)/"&" is now "stupid "/
:
The quick brown fox jumps over the "lazy dog" is now "stupid dog".
如果 &
不可用,表达式将变得非常难看。
正如标题所说。我想用符号 (&) 替换 "tabs"。
我使用:
:%s/\t/&/g
当然这不起作用。我在 mac os x 上使用 vim(如果这有所不同)。谢谢!
您确定问题出在与号上吗?我收到了更多关于标签的投诉。不要忘记转义它。
:%s/\t/\&/g
与号的问题在于它是 regular expression metacharacter for backreferences。正则表达式替换部分的&
字符表示"everything that was matched in the match-part of the expression".
因此,例如,如果您有一个包含以下行的文件:
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\)/ab/
执行相同的操作,但需要输入更多内容。
为什么 & 有用,而不仅仅是一个别名,例如</code> 在一个简单的匹配表达式中?那么,您也可以这样做:<code>:s/lazy \(dog\|cat\)/"&" is now "stupid "/
:
The quick brown fox jumps over the "lazy dog" is now "stupid dog".
如果 &
不可用,表达式将变得非常难看。