保留VIM中的最后编辑位置

wixjitnu  于 2022-11-11  发布在  其他
关注(0)|答案(9)|浏览(165)

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

kcwpcxri

kcwpcxri1#

取自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
tkqqtvp1

tkqqtvp12#

“开箱即用”的.vimrc通过以下语句实现了这一点:

source $VIMRUNTIME/vimrc_example.vim

你可能只需要在你的.vimrc中恢复这个语句。在任何情况下,请参见vimrc_example.vim和Vim手册中的line()函数,以了解它是如何工作的。

djp7away

djp7away3#

Vim会自动保存最后一次编辑的位置,并以“特殊”跳转标记.的形式提供。其他特殊标记包括"(保存的起始位置)和'(跳转的起始位置)。
您可以通过键入'<mark>跳转到一个标记,因此'.会将您带到上次编辑的位置,''会将您带回到原来的位置,而'"会将您带到保存文件的位置。
关于Vim标记的更多信息,请访问Vim.Wikia

3bygqnnd

3bygqnnd4#

有一个插件(我是作者)称为vim-lastplace,它会智能地返回到您所做的最后一次编辑。
它也有一个配置选项可以忽略某些文件类型,默认情况下它会忽略git,svn和mercurial的提交信息,对于这些文件类型,它会从第一行开始移动光标,上面的代码片段会跳转到提交信息文件的中间位置(上次提交时离开的位置),尽管这可能不是你想要的. vim-lastplace修复了这个问题.

nafvub8i

nafvub8i5#

更新版本的currently accepted answer

silent! source $VIMRUNTIME/defaults.vim
nle07wnf

nle07wnf6#

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

xqkwcwgp

xqkwcwgp7#

I'm adding more complete example to @Mariano answer https://stackoverflow.com/a/14449484/108654 with some additional checks

" 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
oxf4rvwz

oxf4rvwz8#

对于正在寻找纯Lua版本的Neovim用户:

-- Restore cursor position
vim.api.nvim_create_autocmd({ "BufReadPost" }, {
    pattern = { "*" },
    callback = function()
        vim.api.nvim_exec('silent! normal! g`"zv', false)
    end,
})
nhaq1z21

nhaq1z219#

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

相关问题