当我退出VIM并再次打开同一个文件时,我位于文件的开头。如何保留最后一个光标位置?
答案 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读取的副本,这意味着无法存储最后一个光标位置。