保留 VIM 中最后的编辑位置

问题描述 投票:0回答:10

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

vim
10个回答
70
投票

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

43
投票

“开箱即用”

.vimrc
通过以下语句实现了这一点:

source $VIMRUNTIME/vimrc_example.vim

您可能只需要在您的

.vimrc
中恢复此声明。无论如何,请参阅
vimrc_example.vim
以及 Vim 手册中的
line()
函数,了解其工作原理的讨论。


37
投票
最后的编辑位置由 Vim 自动保留,并可用作“特殊”跳转标记

.

。其他特殊标记包括
"
(您保存的位置)和
'
(您从
跳跃的位置)。 您可以通过输入

'<mark>

跳转到某个标记,因此

'.
会将您带到上次编辑的位置,
''
会将您带回原来的位置,而
'"
将带您前往您之前编辑的位置文件保存在。

有关 Vim 标记的更多内容请参见

Vim.Wikia


18
投票
vim-lastplace

的插件(我是作者),它会智能地让你返回到你所做的最后一次编辑。 它还有一个配置选项来忽略某些文件类型。默认情况下,它将忽略 git、svn 和 Mercurial 的提交消息。对于这些文件类型,它会将光标从第一行开始。上面的代码片段将跳到提交消息文件的中间(您在上一次提交中离开的位置),即使这可能不是您想要的。 vim-lastplace 解决了这个问题。


16
投票

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



13
投票

silent! source $VIMRUNTIME/defaults.vim

确保运行 vim 的用户可以读写 

8
投票
。不知何故,我最终在我的标准用户主目录中得到了一个只能由 root 读取的副本,这意味着无法存储最后一个光标位置。


我正在向 @Mariano 答案添加更完整的示例


0
投票
命令(建立会话)。它存储一个脚本文件,当通过 vim 运行时,它会恢复您当前的编辑会话,包括所有打开的文件和光标位置。


为了支持其他帖子,在 neovim init.lua 中工作的版本是: vim.api.nvim_create_autocmd('BufReadPost', { command = "静音!正常!g`"zv" })

0
投票
这更直接一些,并且与 autocmd 上的 nvim 文档更加一致。

© www.soinside.com 2019 - 2024. All rights reserved.