【发布时间】:2011-12-15 05:04:51
【问题描述】:
当我退出 VIM 并再次打开同一个文件时,我位于文件的开头。如何保留最后一个光标位置?
【问题讨论】:
-
有趣的是 Vim 已经记住了这个位置,它是
"标记。所以即使你的.vimrc中没有这个,你也可以按g`"(g,反引号,双引号)
标签: vim
当我退出 VIM 并再次打开同一个文件时,我位于文件的开头。如何保留最后一个光标位置?
【问题讨论】:
" 标记。所以即使你的.vimrc 中没有这个,你也可以按g`"(g,反引号,双引号)
标签: vim
您可以尝试:mks 命令(创建会话)。它存储一个脚本文件,当通过 vim 运行时,它会恢复您当前的编辑会话,包括所有打开的文件和光标位置。
【讨论】:
“开箱即用”.vimrc 使用以下语句启用此功能:
source $VIMRUNTIME/vimrc_example.vim
您可能只需要在您的.vimrc 中恢复此语句。在任何情况下,请参阅 vimrc_example.vim 和 line() 函数 in the Vim manual 以讨论其工作原理。
【讨论】:
取自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
【讨论】:
if 语句在这里做什么吗?我将其读作“仅当光标位于第一行之后或最后一行之前时才恢复光标”,我不清楚这有什么区别。我目前在我的 vimrc 中添加了autocmd BufReadPost * normal! g`"zv,它似乎可以工作,但我想我不明白无条件标记恢复的潜在缺陷。
autocmd BufReadPost * silent! normal! g`"zv 修复了这个问题
zv 部分...原来它“展开”当前行。哇,即使你知道如何退出 Vim,总有更多东西要学。
有一个名为vim-lastplace 的插件(我是作者)可以智能地返回到您所做的最后一次编辑。
它还具有忽略某些文件类型的配置选项。默认情况下,它将忽略 git、svn 和 mercurial 的提交消息。对于这些文件类型,它将在第一行开始您的光标。上面的代码 sn-ps 将跳转到您的提交消息文件的中间(您在上一次提交中离开的地方),即使这可能不是您想要的。 vim-lastplace 修复了这个问题。
【讨论】:
最后的编辑位置由 Vim 自动保存,并作为“特殊”跳转标记. 使用。其他特殊标记包括"(您保存的位置)和'(您跳过的位置)。
你可以通过输入'<mark>跳转到一个标记,所以'.会带你到最后编辑的地方,''会带你回到原来的位置,'"会带你到您保存文件的位置。
Vim.Wikia 上有关 Vim 标记的更多信息。
【讨论】:
确保~/.viminfo 可以被运行 vim 的用户读写。不知何故,我在标准用户主目录中得到了一个只有 root 才能读取的副本,这意味着无法存储最后一个光标位置。
【讨论】:
我正在向@Mariano answer 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
【讨论】:
currently accepted answer 的更新版本:
silent! source $VIMRUNTIME/defaults.vim
【讨论】: