如何让 VIM 记住我重新打开文件时所在的行?

pen*_*ave 28 vim

我刚刚从 RH/Fedora 迁移到 Ubuntu 12.04。在 RedHat 中,当我用 VIM 重新打开文件时,它打开时光标位于我关闭文件时所在的行上。但是,我现在看到的是,每次重新打开文件时,光标始终位于顶部。由于我正在处理的一些文件长达 20k 行,这很快就会变得有点旧。

我通过 apt-get 在我的新 Ubuntu 上安装了完整版的 VIM,以便我可以在插入模式下使用箭头键。打印出来的版本是 VIM - Vi IMproved 7.3。

任何帮助都将不胜感激。

Sen*_*try 46

将以下行添加到您的~/.vimrc或全局/etc/vim/vimrc

if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
endif
Run Code Online (Sandbox Code Playgroud)

这将跳转到最后一个已知的光标位置,除非:

  • 该职位无效
  • 该位置在事件处理程序内

  • 它的工作原理是为 BufReadPost 事件创建一个自动命令——即每次 vim 从磁盘加载文件后执行的 vim 命令。该命令检查 `"` 标记是否已定义且合理(`"` 标记存储当前文件中的最后一个位置并保存在 `~/.viminfo` 文件中),如果是,则告诉 vim 跳转到它。 (3认同)
  • 我已经为 ~/.vimrc 和 /etc/vim/vimrc 做了这个,甚至重新启动,仍然总是在第一行打开! (2认同)

gra*_*bow 11

这是 /etc/vim/vimrc 中的默认配置,因为提到vim 不记得最后的位置

已经包含必要的功能。只需要取消注释:

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Run Code Online (Sandbox Code Playgroud)

这是一个自动命令,用于查找计算表达式的行号。如果已记录,g 命令将跳转到最后一个位置。使用 BufReadPost、line() 和 g` 的 :help 命令将解释其工作原理的细节。