Vim方法跳转到光标下的数字

wmm*_*mso 0 vim vim-macros

在vim中,是否有一种更优雅的方式来跳转到光标下的行号

map gn "nyw@nG
Run Code Online (Sandbox Code Playgroud)

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

不完全确定甚至为什么这样做:@n意味着执行寄存器n(数字)中的内容,而不是将它与"G"连接起来.

具有类似功能的功能

call cursor(expand("<cword>"),1)
Run Code Online (Sandbox Code Playgroud)

似乎也没有工作.

思考?

DJM*_*hem 5

我会推荐这个:

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

它修复了你提到的很多问题,例如:

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

    使用yiw而不是yw修复此问题.阅读文本对象!

  • 此外,这个宏可能有点危险,取决于寄存器"n"中的内容.

    如果光标在数字上,这将只执行任何代码.否则它什么都不做.

还有一些其他优点:

  • 使用nnoremap而不是map最佳实践.这将为您节省很多麻烦!(更多信息)

  • 它不会弄乱你的@n注册.

不完全确定为什么会这样:@n表示执行寄存器n(数字)中的内容,而不是将它与"G"连接起来.

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

3d
Run Code Online (Sandbox Code Playgroud)

在删除其中三个动作之前,它将坐在那里等待动议.