为什么在vim中使用*(星号)会立即跳转到下一个匹配项?

6

让我们看一个简单的例子:

Some text TOM, some text
           ^ (my cursor here)
Some TOM, some text

按下*后,我得到了:
Some text TOM, some text
Some TOM, some text
     ^ (now cursor here)

它总是跳到下一个单词,很烦人。我只想让它停留在同一个位置,包括TOM在搜索模式中(按下n查找下一个出现)。当我想从光标开始重构变量名时,这很有用。

例如,如果*只是包含一个要搜索的词,我可以执行以下操作:

tom := "some text"
 ^ (cursor)
func test() {
  println(tom)
}

*(将旧名称添加到模式中)ciw(更改单词)newname(写入新名称)n(下一次出现).(重复上一个命令)。是否有任何选项可以更改行为?

1个回答

8

你只需要使用 `` (2个反引号,Gary Bernhardt 称其为“反引号-反引号-回退”)来跳转回去:

*``ciwfoo<Esc>n.n.

注意,您可以使用 cgn 而不是 ciw 并跳过 n 步骤:
*``cgnfoo<Esc>..

如果您不喜欢按“勾-勾-返回”键,请重新映射它:
nnoremap <key>       *``cgn
nnoremap <other-key> #``cgN

第一次使用 * 命令时,行为似乎与我预期的不同。我错了吗? - Timur Fayzrakhmanov
我猜在这个链接中你可以找到解决方案:http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches - SergioAraujo
2
@TimurFayzrakhmanov,“*”始终将光标移动到光标下单词的下一个出现位置。除非您在某个地方映射了更改默认行为的内容,否则没有任何理由期望不同的行为。 - romainl

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