Vim最近的文件历史?


132

我想访问我在GVim中打开然后关闭的最近文件。我经常打开和关闭GVim。我也想访问以前会话中的最新文件。

GVim是否将最近的文件存储在Word和许多其他桌面应用程序存储的位置?如何访问它们?


Answers:


229

至少terminal vim将前十个文件存储~/.viminfo在filemarks部分中。您可以使用'0'1'2,... '9它们之间跳跃。

'0除非您的内存比我的要大,否则这可能仅对返回到正在编辑的最后一个文件有用。)

您也可以使用该:browse oldfiles命令获取带有数字的菜单。


2
如果你想使用0- 9作为商标用于导航,不用手动将它们标记
人民币

16
使用:browse old获取文件列表。然后输入q以选择要编辑的文件。
songhir 2014年

5
:e #<1打开最后一个文件,请参阅:h c_#<
Hotschke 2015年

:bro ol工作..但您必须键入很多键..首先获取文件列表,然后按q,然后选择一个数字。我相信下面提到的MRU插件要好得多:stackoverflow.com/a/3171323/4752883 您必须按<leader> f,然后使用hjkl或其他键浏览至文件/搜索文件名。然后按o,enter,t或v快速在光标下方打开文件。
alpha_989 '17

rm使用上述方法恢复了错误删除的文件。
串联

55

我使用的最好方法是

:browse oldfiles

在vim上最简单的方法。


1
真好!我在〜/ .vimrc中将该表达式映射为“ nmap bo:browse oldfiles <CR>”(不带引号)。只需在普通模式下键入该映射(bo)即可执行该命令
Victoria Stuart


22

这里很晚的答案... @sarnolds答案的详细解释-您可以使用oldfiles命令@see查看文件历史:@h oldfiles或:h viminfo

:oldfiles 

此外,您可以使用视图和会话进行细粒度的文件管理... @see:h mkview和:h mksession了解详细信息...


4
从列表中知道文件的编号后,知道如何实际打开文件很有用:oldfiles。可以使用:browse命令以交互方式执行此操作,如@sarnold所述,但也可以通过使用:e #<NN来手动完成此操作,其中N是oldfiles列表中的数字。
Krzysztof Adamski 2014年

11

有一把瑞士人的文件切换CtrlP插件刀,它也是janus发行版的一部分。它具有:CtrlPMRU在最近使用的文件中进行智能查找的命令。

注意:中 CtrlP维护自己的最新使用文件列表g:ctrlp_cache_dir."mru/cache.txt"。它不会重复使用set viminfo?包含文件标记列表的viminfo()。如果您要清除此列表,这将很有用。


1
CtrlP界面对vim用户不直观?学习复杂的界面以查找MRU文件=〜/ regexp /(用perl / grep regexp〜/ _viminfo轻松完成)来做简单的事情不费吹灰之力。
莫什(Mosh)2013年

是的..我一直在尝试了解如何使用Ctrlp,但是如果您有一组简单的文件(stackoverflow.com/a/3171323/4752883),则MRU似乎更容易使用。在MRU中,您还可以进行VIM正则表达式搜索以找到所需的文件...
alpha_989

9

使用:bro ol然后按与您要打开的文件相对应的数字。


5

CtrlP插件可以让您在最近使用的文件通过搜索,以及与该命令将当前目录下的文件:

nnoremap <c-p> :CtrlPMixed<cr>

这省去了处理Vim内置命令和MRU插件的麻烦,而这两个命令都不会让您进行模糊文件搜索,这在处理大型项目时至关重要。


对于那些无法在功能上重新映射Ctrl-P的用户:您可以正常打开Ctrl-P并使用Ctrl-F或Ctrl-B在模式之间进行切换(MRU是其中之一)
Gustavo Matias


2

如此处的评论所示(http://stackoverflow.com/questions/571955/undo-close-tab-in-vim),您的文件可能仍在缓冲区中打开:

:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number

例如,您可以在新标签页中重新打开第三个缓冲区(如果不使用标签页,请使用:e代替):

:tabnew +3buf

1
是的,这可行。但是,无疑,编辑的工作就是使事情变得容易吗?如果必须发出命令,以视觉方式识别某些内容,记住一个ID,然后发出另一条真正浪费用户时间的命令。您的回答是正确的,我不是要冒犯您,但这并不是Vim的杀手features!
artfulrobot

我有同样的问题。您尝试过buffexplorer吗?它结合了ls和:tabnew + Nbuf。现在,您可以打开缓冲区列表,并在一个新选项卡等中打开它。
alpha_989 '17

2

您可能可以使用以下命令从命令行访问列表:

grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'"$HOME"','

说明:

grep '^>' ~/.viminfo  #find the list of recent files
cut -c3-              #remove the first 2 characters
sed 's,~,'"$HOME"','  #replace ~ with absolute path

如果您定期使用bash别名

alias vim_mru="grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'\"$HOME\"','"

2

因为前面没有提到fzf,所以在这里加上2美分,这是一个很棒的工具:
fzf.vim有一个:History命令,可以让您模糊搜索最近使用的文件,并在键入方式时进行搜索
我通过不让fzf将搜索结果列表重新排序为最佳匹配来自定义此命令的(默认)行为:我希望所有匹配文件名的顺序保持最后使用这些文件的顺序。
为了完成此定制,我在.vimrc中添加了以下内容以覆盖Historyfzf.vim插件定义的默认命令:

    command! -bang -nargs=* History
      \ call fzf#vim#history({'options': '--no-sort'})

1

让您从最后修改的列表中选择文件的另一个插件是staritfy。它将您的开始屏幕替换为最近修改的文件列表。您以后总是可以使用:Startify命令打开此页面。


1
甚至无法开始安装-需要更多有关基本安装和用法的文档。使用MRU,因为它易于安装和使用。
mosh

1

:ls 在左侧列中列出带有缓冲区编号的最新文件。

然后:b{buffer-number}跳到那里。

示例: :ls显示文件列表。我想跳到我访问的倒数第二个文件。 :b3会带我到那里。

为了更快地搜索,请映射:ls到某些内容,例如<Leader>.在您的.vimrc文件中。


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.