保留VIM中的最后编辑位置

时间:2011-10-25 18:50:54

标签: vim

当我退出VIM并再次打开同一个文件时,我位于文件的开头。如何保留最后一个光标位置?

8 个答案:

答案 0 :(得分:20)

“开箱即用”.vimrc使用以下语句启用此功能:

source $VIMRUNTIME/vimrc_example.vim

您可能只需要在.vimrc中恢复此声明。在任何情况下,请参阅vimrc_example.vim并查看line()函数in the Vim manual,了解其工作原理。

答案 1 :(得分:16)

取自http://amix.dk/vim/vimrc.html

" Return to last edit position when opening files (You want this!)
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif

答案 2 :(得分:9)

最后一个编辑位置由Vim自动保留,并以&#34; special&#34;跳转标记.。其他特殊标记包括"(您保存的位置)和'(您从跳过的位置)。

您可以通过键入'<mark>跳转到标记,因此'.会将您带到上次修改的位置,''会将您带回原来的位置,{ {1}}将您带到保存文件的位置。

那更多关于Vim标记Vim.Wikia

答案 3 :(得分:5)

有一个名为vim-lastplace的插件(我是作者)会智能地返回到您上次编辑的内容。

它还有一个配置选项来忽略某些文件类型。默认情况下,它将忽略git,svn和mercurial的提交消息。对于这些文件类型,它将在第一行开始光标。上面的代码片段将跳转到您的提交消息文件的中间位置(您在之前的提交中停止的位置),即使这可能不是您想要的。 vim-lastplace解决了这个问题。

答案 4 :(得分:3)

我在@Mariano答案https://stackoverflow.com/a/14449484/108654中添加了更完整的示例,并进行了一些其他检查

" Only do this part when compiled with support for autocommands
if has("autocmd")
  augroup redhat
  autocmd!
  " When editing a file, always jump to the last cursor position
  autocmd BufReadPost *
  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
  \   exe "normal! g'\"" |
  \ endif
  augroup END
endif

答案 5 :(得分:2)

currently accepted answer的最新版本:

source $VIMRUNTIME/defaults.vim

答案 6 :(得分:0)

您可以尝试:mks命令(make session)。它存储一个脚本文件,当通过vim运行时,它会恢复当前的编辑会话,包括所有打开的文件和光标位置。

答案 7 :(得分:0)

确保~/.viminfo是运行vim的用户可读写的。不知何故,我最终得到了一个只能由标准用户主目录中的root读取的副本,这意味着无法存储最后一个光标位置。