如何仅在vim中替换第一个事件
是否可以选择在不要求vim确认的情况下替换第一个事件 我想在第一次出现时将纽约替换为如何仅在vim中替换第一个事件,vim,vi,greedy,regex-greedy,boost-regex,Vim,Vi,Greedy,Regex Greedy,Boost Regex,是否可以选择在不要求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标志意味着将在每次出现搜索模式时执行。删除它,它将仅在第
\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{&}
替换结束时的/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
将对范围内的每一行执行sub
我会缩小范围来解决这个问题:
/foo//nyc/s/nyc/\\place{&}/
请注意,/foo/和/nyc/
之间没有逗号
输出应为:
foo
\\place{nyc} nyc
nyc nyc
bar
您可能需要阅读:h range
以了解详细信息。因此,您希望在一个行范围内只执行一次替换,而不是每行执行一个子项。因此,/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/和/nyc/
之间没有逗号
输出应为:
foo
\\place{nyc} nyc
nyc nyc
bar
您可能需要阅读:h range
以了解详细信息。如果找不到图案,则会显示一些错误消息,如图案未找到,如果我们使用静默!,然后它不会显示错误消息。这些消息很有用。但是我的函数中有很多搜索模式,可能是300。所以每次显示的消息都会让我感到不安。如果找不到模式,它会显示一些错误消息,比如找不到模式,如果我们使用静默!,然后它不会显示错误消息。这些消息很有用。但是我的函数中有很多搜索模式,可能是300。所以每次显示的信息都会让我感到不安。