【问题标题】:Preserve last editing position in VIM在 VIM 中保留最后的编辑位置
【发布时间】:2011-12-15 05:04:51
【问题描述】:

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

【问题讨论】:

标签: vim


【解决方案1】:

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

【讨论】:

  • 它在本地目录中创建一个 Session.vim 文件。这不是我想要的。我现在vim可以自动保存编辑位置,打开同一个文件时恢复。我只是不知道怎么做。
【解决方案2】:

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

source $VIMRUNTIME/vimrc_example.vim

您可能只需要在您的.vimrc 中恢复此语句。在任何情况下,请参阅 vimrc_example.vimline() 函数 in the Vim manual 以讨论其工作原理。

【讨论】:

【解决方案3】:

取自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,它似乎可以工作,但我想我不明白无条件标记恢复的潜在缺陷。
  • 啊,如果文件在 vim 之外被截断,并且 vim 的标记在不再存在的行上,vim 会抛出错误。用autocmd BufReadPost * silent! normal! g`"zv 修复了这个问题
  • 我不知道为什么zv 部分...原来它“展开”当前行。哇,即使你知道如何退出 Vim,总有更多东西要学。
【解决方案4】:

有一个名为vim-lastplace 的插件(我是作者)可以智能地返回到您所做的最后一次编辑。

它还具有忽略某些文件类型的配置选项。默认情况下,它将忽略 git、svn 和 mercurial 的提交消息。对于这些文件类型,它将在第一行开始您的光标。上面的代码 sn-ps 将跳转到您的提交消息文件的中间(您在上一次提交中离开的地方),即使这可能不是您想要的。 vim-lastplace 修复了这个问题。

【讨论】:

    【解决方案5】:

    最后的编辑位置由 Vim 自动保存,并作为“特殊”跳转标记. 使用。其他特殊标记包括"(您保存的位置)和'(您跳过的位置)。

    你可以通过输入'&lt;mark&gt;跳转到一个标记,所以'.会带你到最后编辑的地方,''会带你回到原来的位置,'"会带你到您保存文​​件的位置。

    Vim.Wikia 上有关 Vim 标记的更多信息。

    【讨论】:

    • 它不会恢复列 pos。
    • @Rainning:根据链接的 Wikia 页面,那将是 -
    【解决方案6】:

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

    【讨论】:

    • 太棒了。这对我有帮助。
    【解决方案7】:

    我正在向@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
    

    【讨论】:

      【解决方案8】:

      currently accepted answer 的更新版本:

      silent! source $VIMRUNTIME/defaults.vim
      

      【讨论】:

      • 这应该是公认的答案
      • E484: 无法打开文件 /usr/share/vim/vim81/defaults.vim
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多