92

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

例如,如果我搜索一个单词,是否有任何命令可以将光标移动到突出显示的段的末尾?假设我有一个单词“FishTaco”,我想搜索“Fish”的所有实例并在其后插入一些内容。我知道我可以进行全局替换,但是如果我只想在几个非顺序实例中进行更改怎么办?

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

4

6 回答 6

148

你可以这样做:

/Fish/e

/eat the end 将光标放在搜索区域的末尾(而不是默认情况下的第一个字符。

于 2012-05-22T18:22:13.810 回答
85

如果您只想将光标放在 Fish 的最后一个字符之后,那么您可以使用

/Fish/e+1

这会将光标放在 h 之后。(如果没有+1光标,光标将在最后一个字符的左侧结束。)

如果您对将光标放在 Fish 之后特别感兴趣,但仅当它出现在“FishTaco”中时,您可以尝试以下选项之一:

您可以使用

/FishTaco/s+4

你的光标最终会在 Fish 和 Taco 之间。/s+4光标在搜索词开始后 4 处的位置。

你也可以使用

/FishTaco/e-3

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

你也可以使用

/FishTaco/b+4 

因为/b+4将被视为/s+4.

于 2012-05-22T18:25:44.410 回答
29

如果您已经搜索过/Fish,您可以通过 快速更改搜索以转到匹配的末尾//e,这会重复上次搜索,但会附加e已经解释过的修饰符。

于 2012-05-23T05:54:38.263 回答
13

/ long-regexp1 \zs long-regexp2 / .. 光标将停在 \zs,请参阅 :help \zs

于 2015-06-27T14:21:56.810 回答
12

一旦有了视觉选择,您就可以使用o在所选块的开始和结束之间切换光标位置。When the selection is line-wise this toggles the line position, meaning the cursor moves to the starting and ending line of the selection but not to the starting or ending character. When the selection is character-wise then the movement is also character-wise.

您还可以使用`<`>在可视块的开始和结束之间切换光标,但这会影响选择本身,因此它用于重置或调整选择范围。

编辑:啊,但是对于搜索突出显示,这将不起作用,因为o会启动行插入。我猜搜索突出显示与视觉选择不同,抱歉:)

于 2012-05-22T18:33:42.140 回答
9

您问题的“比赛结束时的光标”部分已经得到解答。

你可以做到:%s/Fish/FishTaco/c。这使您有机会确认或拒绝每个替换并跳过整个“比赛结束时的光标”业务。

于 2012-05-22T22:01:37.123 回答