当你最后一次编辑文件后,如何使Vim带你回到之前的位置?

8

可能是重复问题:
在vim中,如何让文件在上次关闭时打开相同的行号?

当你最后一次编辑一个文件时,如何让 Vim 把你带回到之前的位置?

我的工作电脑有这个功能,但家里的电脑没有!如何设置Vim以记住你最后编辑文件时所在的部分?

编辑:更明确地说,我想要这种行为在打开新文件或启动时


你可以使用m<字母>在文件的不同位置设置标记,并且可以使用`<相同字母>返回到该标记,但这些标记不会持久存在于应用程序的重新启动或文件的关闭/打开(我认为是这样)。 - brettkelly
1
有一个插件(我是作者)叫做vim-lastplace,它会智能地将您返回到上次编辑的位置。 - Greg Dietsche
6个回答

13

我在我的 .vimrc 文件中加入了以下代码,它可以正常工作:

" go to the position I was when last editing the file
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g'\"" | endif

只有这个解决方案对我有效,相信我,我尝试了大多数其他流行的解决方案!谢谢。 - quanta
所有用于执行此操作的插件,它们的所有缺陷(例如间歇性存储和恢复错误的cwd)都可以通过这一行代码进行替换吗?看起来是这样的... 哇!我喜欢它,非常感谢! - Red Pill
E576: viminfo: 行中缺少“>”:au BufReadPost * if line("'"") > 0 && line("'"") <= line("$") | exe "normal g'"" | endif - Henrique de Sousa

4

这可以通过 viminfo 文件完成。只需启用此功能(并确保该文件可写),即可满足要求。我使用以下命令:

set viminfo='25,\"50,n~/.viminfo

...它将viminfo数据存储到~/.viminfo中。您可以在此处阅读有关其他自定义选项的信息


我有一个viminfo文件,里面装满了各种东西。但它似乎不起作用。 - static_rtti

3

首先,请检查您的 .vimrc 文件是否可写。

如果这不够,可以将以下内容添加到您的 .vimrc 文件中:

if has("autocmd")
    autocmd BufReadPost *
    \ if line("\'") > 0 && line("\'") <= line("$") |
        \ exe "normal g`" |
    \ endif
endif

你能否用“代码”发布一下?Stack Overflow似乎在进行奇怪的字符替换... - static_rtti
1
这个解决方案无论如何都不会起作用。请看我的回复。 - Ether
如何使用?我应该按g键还是它在文件打开时自动工作? - VladSavitsky

2

'0 //(单引号后跟零)将带您到上次编辑的位置


如果您能告诉我如何在每次打开缓冲区时自动执行此操作,那么您将获得最佳答案 :) - static_rtti
将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文本:将其放在您的.vimrc文件的最后一行。 - evan

0

这是一个不太优雅的解决方案。

每当你编辑完一个文件并准备退出时,只需使用m<字母>标记该位置。现在使用mks!为此创建一个会话文件。下次打开此文件时,只需使用```到达该位置。

您可以有不同的字母以到达文件中的不同位置。例如,e表示您最后编辑的位置或f表示您最后工作的函数定义等。这取决于您的喜好。

这个解决方案的一个缺点是mks!将在当前目录中创建一个Session.vim文件。


0

还可以查看Vim Wikia关于恢复光标到上一个编辑会话中的文件位置的文章。它似乎列出了一些已在此处列出的解决方案,以及一个更大的脚本,专门存储您最近编辑的最后10个文件的位置;您可以更改该值以适应您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接