在vim中,是否有更优雅的方式跳转到光标下的行号而不是
map gn "nyw@nG
" GN"或其他一些关键组合?这需要确保光标位于数字串的开头。此外,这个宏可能会有点危险,这取决于寄存器" n"中的内容。
不完全确定为什么会这样:@n
表示执行寄存器n(数字)中的内容,而不是将其与" G"连接。
类似
的功能call cursor(expand("<cword>"),1)
似乎也没有工作。
思想?
答案 0 :(得分:5)
我建议这样做:
nnoremap gn yiw:exec (@" =~ '^\d\+$' ? 'norm @"G' : '')<cr>
它修复了你提到的很多问题,例如:
这需要确保光标位于单词的开头(“word”在这里表示数字串)。
使用yiw
代替yw
修复此问题。阅读text objects!
另外,这个宏可能会有点危险,这取决于寄存器“n”中的内容。
如果光标位于数字上,则只会执行任何代码。否则它什么都不做。
还有一些其他优点:
使用nnoremap
代替map
是最佳做法。这将为您节省很多麻烦! (more info)
它不会弄乱你的@n
注册。
甚至不能完全确定为什么会这样:@n表示执行寄存器n(数字)中的内容,而不是将其与“G”连接。
键入@n
会将寄存器n中的文本插入到预先输入缓冲区中,就像您键入它一样。因此,如果命令未完成,它将坐在那里(就像你输入它一样)等待命令完成。你甚至可以运行像
3d
在删除其中三个动作之前,将坐在那里等待动议。