0

在vim中,有没有比跳到光标下的行号更优雅的方法

map gn "nyw@nG

“gn”或其他一些组合键?这需要确保光标位于数字字符串的开头。此外,根据寄存器“n”中的内容,这个宏可能有点危险。

甚至不完全确定为什么会这样:@n意味着执行寄存器 n(一个数字)中的内容,而不是将其与“G”连接。

具有类似功能的功能

call cursor(expand("<cword>"),1)

似乎也不起作用。

想法?

4

1 回答 1

5

我会推荐这个:

nnoremap gn yiw:exec (@" =~ '^\d\+$' ? 'norm @"G' : '')<cr>

它解决了您提到的许多问题,例如:

  • 这需要确保光标位于单词的开头(“单词”在这里表示数字字符串)。

    使用yiw而不是yw解决此问题。阅读文本对象

  • 此外,根据寄存器“n”中的内容,这个宏可能有点危险。

    如果您的光标位于数字上,这只会执行任何代码。否则它什么也不做。

还有一些其他的优点:

  • 使用nnoremap代替map是最佳实践。它将为您省去很多麻烦!(更多信息

  • 它不会弄乱您的@n注册表。

甚至不完全确定为什么会这样:@n 表示执行寄存器 n(一个数字)中的内容,而不是将其与“G”连接。

键入@n会将寄存器 n 中的文本插入预输入缓冲区,就像您键入它一样。因此,如果一个命令未完成,它将坐在那里(就像您输入它一样)等待命令完成。你甚至可以运行一个宏

3d

它将坐在那里等待动议,然后删除其中三个动议。

于 2017-02-01T22:53:33.567 回答