在Vim/Vi中是否有命令将光标移动到搜索高亮的末尾?

103

在Vim/Vi中是否有命令可移动到选定的搜索段内?

例如,如果我搜索一个单词,是否有任何命令可以将光标移到高亮显示段的末尾?假设我有一个单词"FishTaco",我想搜索所有"FISH"的实例并在其后插入一些内容。我知道我可以进行全局替换,但是如果我只想在几个非连续的实例中进行更改呢?

我可以看出,将光标移动到当前高亮显示段的末尾以执行操作将是很方便的。


4
这不是对问题的回答,而是为了实现您的最终目标——将所有“Fish”替换为“FishTaco”,您可以执行“:%s/Fish\(Taco\)@!/&Taco/”,这将查找每个未跟随“Taco”的“Fish”并将其替换为“FishTaco”。它结合了负向前瞻搜索和包括匹配项后面跟着“Taco”的替换操作。 - Jim Stewart
@JimStewart,我不知道为什么这个评论没有与答案一样多的+1。这是忍者级别的vim。 - Still.Tony
6个回答

163
你可以通过以下方式完成: /Fish/e 在搜索区域末尾添加 /e,可以将光标定位到搜索区域的末尾(默认情况下会将光标定位到第一个字符)。

38
请注意,您可以添加* +n -n 以将光标放置在结尾前或后的n*个字符处。 - Nathan Fellman
13
值得注意的是,在你已经执行了 /Fish 搜索之后,你可以使用 //e 跳转到末尾,并且从 Vim 7.4 开始,你可以使用 gn 来可视化地突出显示找到的结果。 - smathy
也可以看一下@ghbarratt的答案,有更多选项可以定位到高亮匹配。 - Mamrezo
只有在所有元字符都被正确转义的情况下,这才有效。/[/e 会直接搜索 [/e,但是 /\[/e 会正确地搜索 [ 并将光标放在末尾 :) - Levi

96

如果你只想把光标放在'Fish'字符串的最后一个字符之后,你可以使用以下方法:

/Fish/e+1

使用+1,可以将光标放置在"h"的后面(如果没有+1,则光标将停留在最后一个字符的左侧)。

如果您特别希望将光标放置在"FishTaco"中的"Fish"之后,那么可以尝试以下选项:

您可以使用

/FishTaco/s+4

你的光标将会停留在“Fish”和“Taco”之间。而/s+4则是将光标定位在搜索词后面四个位置。

同样地,你也可以使用

/FishTaco/e-3

这会将您的光标放在最后一个(结束)字符的左侧3个位置。

您还可以使用

/FishTaco/b+4 

因为/b+4会被视为/s+4


17
讲解很好,但现在我只是饿了。 - kenny

30
如果您已经搜索了/Fish,您可以通过//e快速更改搜索以到达匹配项的末尾,该命令重复上一次搜索,并附加已经解释过的e修饰符。

2
//e+数字正是我正在寻找的!太棒了。 - arkod

15
< p > < code >/ long-regexp1 \zs long-regexp2 /< / code > < em >.. 光标将停留在 \zs 处< / em >, 请参阅:help \zs < / p >

13

当你有一个可视化选择块时,你可以使用 o 键在选择块的起始点和结束点之间切换光标位置。当选择是按行选择时,这将切换位置,也就是说光标会转到选定区域的起始和结束行,但不会移动到其起始或结束字符。当选择是按字符选择时,则移动也是按字符进行的。

你也可以使用 `<`> 键来在可视化块的起始点和结束点之间切换光标,但这会影响选择本身,所以它用于重置或调整选择范围。

编辑:啊,但是对于搜索高亮,这样做是行不通的,因为 o 键将启动行插入。我想搜索高亮并不等同于可视化选择,抱歉 :)


我也不知道这个。这很棒,可以修改选择的开头而无需重新开始。(例如,您开始选择时选得太早或太晚了) - Timothée Boucher
搜索不是视觉选择,因为你可以同时使用两者。当您建立一个可视化选择时,您可以使用 /? 进行搜索移动。 - Kaz

9

您的问题中"匹配位置在结尾"的部分已经有了答案。

您可以执行:%s/Fish/FishTaco/c。这会给您一个确认或拒绝每个替换的机会,并跳过整个"匹配位置在结尾"的步骤。


太棒了的提示。如果我输入“y”,它只会在第一个上执行替换。我如何让它确认每一个? - Jordan Parmer
1
它会跳到下一个匹配项并等待您键入 yn 等,直到没有匹配项为止。要接受所有后续替换,请键入 a,要拒绝它们,请键入 q - romainl
1
实际上,我在最后一个 / 后面漏掉了 g,所以它没有继续在我的代码行中。谢谢你的提示。 - Jordan Parmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接