在vim中,有没有比跳到光标下的行号更优雅的方法
map gn "nyw@nG
“gn”或其他一些组合键?这需要确保光标位于数字字符串的开头。此外,根据寄存器“n”中的内容,这个宏可能有点危险。
甚至不完全确定为什么会这样:@n
意味着执行寄存器 n(一个数字)中的内容,而不是将其与“G”连接。
具有类似功能的功能
call cursor(expand("<cword>"),1)
似乎也不起作用。
想法?
在vim中,有没有比跳到光标下的行号更优雅的方法
map gn "nyw@nG
“gn”或其他一些组合键?这需要确保光标位于数字字符串的开头。此外,根据寄存器“n”中的内容,这个宏可能有点危险。
甚至不完全确定为什么会这样:@n
意味着执行寄存器 n(一个数字)中的内容,而不是将其与“G”连接。
具有类似功能的功能
call cursor(expand("<cword>"),1)
似乎也不起作用。
想法?
我会推荐这个:
nnoremap gn yiw:exec (@" =~ '^\d\+$' ? 'norm @"G' : '')<cr>
它解决了您提到的许多问题,例如:
这需要确保光标位于单词的开头(“单词”在这里表示数字字符串)。
使用yiw
而不是yw
解决此问题。阅读文本对象!
此外,根据寄存器“n”中的内容,这个宏可能有点危险。
如果您的光标位于数字上,这只会执行任何代码。否则它什么也不做。
还有一些其他的优点:
使用nnoremap
代替map
是最佳实践。它将为您省去很多麻烦!(更多信息)
它不会弄乱您的@n
注册表。
甚至不完全确定为什么会这样:@n 表示执行寄存器 n(一个数字)中的内容,而不是将其与“G”连接。
键入@n
会将寄存器 n 中的文本插入预输入缓冲区,就像您键入它一样。因此,如果一个命令未完成,它将坐在那里(就像您输入它一样)等待命令完成。你甚至可以运行一个宏
3d
它将坐在那里等待动议,然后删除其中三个动议。