【发布时间】:2012-11-01 14:10:34
【问题描述】:
我正在尝试在 vim 编辑器中用斜杠替换字符串
例如:foo to abc/def/foo。有什么建议?
【问题讨论】:
我正在尝试在 vim 编辑器中用斜杠替换字符串
例如:foo to abc/def/foo。有什么建议?
【问题讨论】:
您的问题的标题和内容不匹配。
:help pattern 和 :help :substitute 有点压倒性,但非常非常有用,因为正则表达式是 Vim 的核心。
Vim regular Expressions 101 是更简洁的资源。
无论如何,给定以下示例文本:
bar baz foo baz bar
您的目标可以通过多种方式实现。以下是其中一些:
:s/foo/\/abc\/def\/foo
:s/foo/\/abc\/def\/&
:s+foo+/abc/def/&
几点说明:
在替换部分,& 代表“匹配的文本”。如果匹配是foo,则& 是foo。当然,在这里使用& 而不是foo 并没有太大的好处,但是等到你有更复杂的模式......
由于斜线用于分隔搜索部分和替换部分,因此您需要转义两个部分中的实际斜线才能进行替换。
您可以使用许多其他符号代替斜线来分隔搜索和替换部分。当您知道需要避开太多斜线时,这非常很有用。
【讨论】:
要在 vim 中进行字符串替换,您必须首先退出可视或插入模式。然后输入 ':' 来执行 vim 命令。 vim 中的替换命令以 '%s' 开头。把你所有的东西放在一起
:%s/thingyouhave/thingyouwant/
在您陈述的示例中,您需要使用反斜杠“\”转义文件名中的“/”。
:%s/foo/abc\/def\/foo/
另外一个有用的地方是把'gc'放在你的表达式的末尾;这将在执行每个更改之前提示您进行验证。如果您想更改表达式的某些实例或不确定您所做的是否正确,这很有用。
:%s/foo/abc\/def\/foo/gc
【讨论】:
:s// 不是“正则表达式”:它可以称为“替换”,因为 :s 是 :substitute Ex 命令的简写。一个可以在“模式”部分使用正则表达式,但这不是强制性的(foo 在技术上是一个正则表达式,但是......哦,好吧)。当您想将替换应用于整个缓冲区时,替换仅以 %s 开头;应用在一行上,它只是:s。
c末尾的意思是提示验证。 g 的意思是“在行上做每一次出现”,没有g 只有第一个匹配被替换。您可以单独使用g 和c。