在vim中,如何使文件以与上次关闭时相同的行号打开?


141

我想配置vim以在我离开的同一位置打开文件。

vim 

:'“撇号后加双引号可重定向您上次更改的行
Dhiren Hamal

Answers:


195

从Ubuntu的/etc/vim/vimrc文件中,该示例被注释掉:

" Uncomment the following to have Vim jump to the last position when                                                       
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
    \| exe "normal! g'\"" | endif
endif

如果这不起作用,则常见的问题是没有~/.viminfo文件所有权。如果是这种情况,请运行:

sudo chown user:group ~/.viminfo

其中user是你的username,并group往往是与用户名相同。


9
autocmd直接来自vim doc。请参阅:help last-position-jump
user55400

19
如果倒数第二行中的单引号更改为反引号,它将跳至实际光标位置,而不仅仅是该行的开头:\| exe "normal! g`\"" | endif
u2622 2013年

4
chown部分为我解决了问题。脱下帽子!
slowpoison

2
最后有人指出我的.viminfo出于某种原因归root拥有!这需要在我阅读的其他100个文档中。
2015年

2
只想为chown user ~/.viminfo附加内容+1 。我已经尝试解决了一个小时,而您只是挽救了我的一天。
Christopher Reid

48

如果您不介意为了简单而进行自动化交易,只需'"在打开文件时按一下击键(撇号,再加上双引号),就可以跳到原来的位置。这基本上就是@marcog的答案。


24
  :h views-sessions

您可以将其放在.vimrc中

  au BufWinLeave * mkview
  au BufWinEnter * silent loadview

视图将放置在$ HOME / .vim / view中。您可能需要创建这些目录。


我喜欢这个答案,因为另一个参考了我的Mac上不存在的/ etc / vim /文件。
MarkHu '17

15

您可以在不使用指定文件名的情况下启动vim

vim 

接下来,按两次Ctrl + O移至您处理的任何文件中的最后一个位置。


如果安装了NERDTree,则按两次Co可以在当前缓冲区中打开NERDTree。就我而言,有时需要按Co最多五次,但最终我得到@MatAff描述的效果。
ashrasmun

Ctrl-c一次就足够了。此外,按Ctrl-c更多键可将我带回到光标位置的历史记录中(甚至打开相关的未打开文件)。我使用Neovim 0.4.2,但我的理解是它也适用vim
T_T

7

如果启用了viminfo,则`0只需转到上一个编辑的文件位置即可。您会注意到这只是一个“标记”命令;

确实,您以后可以执行'3到先前编辑的第三个位置(可能在另一个文件中),然后`0再次返回到最后一个

看一下

 :marks

查看记住的位置。还要注意,viminfo还存储所有其他内容(例如寄存器的内容,每个文件的标记,命令和搜索历史记录)。大多数人启用此功能的原因很明显


在Mac上的vim版本7.4.1689上,0对我不起作用。但是'0可以解决问题。这是答案中的错字吗?
alamoot

@alamoot否,不是,请参见vimdoc motion.txt-检查`密钥实际生成或执行的字符:verbose map `
sehe 17-10-17,2

你是对的。根据vimdoc都正确!
alamoot

6

有一个名为vim-lastplace的插件(我是作者),它将在您中断的地方打开文件。通过忽略提交消息,它可以改善上述建议,因为您通常在编辑新消息,并且希望从提交消息文件的顶部开始。


没有插件您所能做的就是最好的。.vimrc的目标:代码越小越轻巧更快
nilon

1

有时会~/.viminfo变为只读,或者您的用户无权访问该文件。这也可能是关闭文件时vim不存储光标位置的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.