是否有任何选项可以替换第一次出现而不要求在vim中进行确认?
我想在第一次出现时用\place{New York}
取代纽约而不要求确认。我用了这段代码:
silent! /\\begin{text}/,/\\end{textit}/s/New York/\\place{New York}/g
> \begin{text}..[paragraphs]...\end{textit}
New York
可能会在段落中包含10次。
答案 0 :(得分:2)
替换结束时的/g
标记意味着它将在每次出现搜索模式时执行。取下它,它只会在第一次出现时执行。
此外,:s
默认情况下不会要求确认;你需要为此添加/c
标志。所以我不确定你为什么用:silent
作为前缀。
另一条评论:您可以使用&
:/\\begin{text}/,/\\end{textit}/s/New York/\\place{&}
答案 1 :(得分:2)
所以你想在一个行范围内只进行一次替换,而不是每行一次。所以/start/,/end/ s/pat/rep/
将不起作用。鉴于我们有:
foo
nyc nyc
nyc nyc
bar
我想你期待的是
foo
\\place{nyc} nyc
nyc nyc
bar
但是:/foo/,/bar/ s/nyc/\\place{&}
会给出
foo
\\place{nyc} nyc
\\place{nyc} nyc
bar
因为:s
会为范围内的每一行做sub。
我会缩小范围来解决这个问题:
/foo//nyc/s/nyc/\\place{&}/
请注意,在/foo/ and /nyc/
之间,没有逗号。
输出应为:
foo
\\place{nyc} nyc
nyc nyc
bar
您可能需要阅读:h range
了解详情。