问题描述
我正在寻找让 Vim 在退出或在缓冲区之间切换时保存我的确切光标位置的方法。
我的配置中有以下配置:
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal g'\"" |
\ endif
它只将光标返回到我的光标所在行的开头,而不是光标在其中的位置;即我的光标返回到行首,而不是它所在的位置。
有什么办法可以带回光标的准确位置吗?
解决方法
您的代码段似乎是在 :help restore-cursor
下找到的代码段的变体,它以您想要的方式工作:
autocmd BufReadPost *
\ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
\ | exe "normal! g`\""
\ | endif
区别在于您使用 g'
(“g 然后单引号”)与使用 g`
(“g 然后反引号”):
- 前者跳转到标有
"
的行的开头,就像'a
会跳转到标有a
的行的开头一样, - 后者跳转到标记
"
的确切位置,就像`a
会跳转到标记a
的确切位置一样。
参见:help mark-motions
,更具体地说,参见:help g'
。