如何仅替换 vim 中的第一次出现
How to replace first occurrence only in vim
在 vim 中是否有任何选项可以在不要求确认的情况下替换第一个匹配项?
我只想在第一次出现时用 \place{New York}
替换纽约,而不要求确认。我使用了这段代码:
silent! /\begin{text}/,/\end{textit}/s/New York/\place{New York}/g
> \begin{text}..[paragraphs]...\end{textit}
New York
可能在段落中出现10次。
替换末尾的 /g
标志意味着它将在搜索模式的 每次 出现时执行。删除它,它只会在第一次出现时执行。
此外,:s
默认不要求确认;您需要为此添加 /c
标志。所以我不确定你为什么要在前面加上 :silent
.
另一条评论:您可以在 &
:
的替换部分中重复使用匹配的文本
:/\begin{text}/,/\end{textit}/s/New York/\place{&}
所以你想在一个行范围内只做一个替换,而不是每行一个子。所以 /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
会为范围内的每一行做子。
我会缩小范围来解决这个问题:
/foo//nyc/s/nyc/\place{&}/
注意/foo/ and /nyc/
之间没有逗号
输出应该是:
foo
\place{nyc} nyc
nyc nyc
bar
您可能需要阅读 :h range
以了解详细信息。
在 vim 中是否有任何选项可以在不要求确认的情况下替换第一个匹配项?
我只想在第一次出现时用 \place{New York}
替换纽约,而不要求确认。我使用了这段代码:
silent! /\begin{text}/,/\end{textit}/s/New York/\place{New York}/g
> \begin{text}..[paragraphs]...\end{textit}
New York
可能在段落中出现10次。
替换末尾的 /g
标志意味着它将在搜索模式的 每次 出现时执行。删除它,它只会在第一次出现时执行。
此外,:s
默认不要求确认;您需要为此添加 /c
标志。所以我不确定你为什么要在前面加上 :silent
.
另一条评论:您可以在 &
:
:/\begin{text}/,/\end{textit}/s/New York/\place{&}
所以你想在一个行范围内只做一个替换,而不是每行一个子。所以 /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
会为范围内的每一行做子。
我会缩小范围来解决这个问题:
/foo//nyc/s/nyc/\place{&}/
注意/foo/ and /nyc/
之间没有逗号
输出应该是:
foo
\place{nyc} nyc
nyc nyc
bar
您可能需要阅读 :h range
以了解详细信息。