Vim中的最近文件历史记录?

155

我希望能够访问在GVim中打开和关闭的最近文件。由于我经常打开和关闭GVim,因此我希望能够访问以前会话中的最近文件。

GVim是否像Word和其他桌面应用程序一样在某个地方存储最近文件呢?如何访问它们?


类似于这个问题:https://dev59.com/LHVC5IYBdhLWcg3wZwJT - malgca
14个回答

260

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

(除非您比我记忆力更强,否则可能只有对'0有用,以便返回您最后编辑的文件。)

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


2
如果您想将 0-9 用作导航标记,请不要手动标记它们。 - yuan
29
使用命令 :browse old 查看文件列表,然后输入 q 来选择要编辑的文件。 - songhir
7
:e #<1 会打开上次编辑的文件,详见:h c_#< - Hotschke
bro ol 可以工作,但是你得敲很多按键,先获取文件列表,然后按 q,最后选择一个编号。我认为下面提到的 MRU 插件更好:https://dev59.com/5XA75IYBdhLWcg3wqK__#3171323你需要按 <leader> f,然后浏览文件,使用 hjkl 或其他按键搜索文件名。然后按 o、enter、t 或 v 快速打开光标下的文件。 - alpha_989
我使用上述方法成功恢复了一个我误删的rm文件。 - tandem

68

我使用的最佳方式是

:browse oldfiles

在vim上最简单的方式。


1
不错!我在我的~/.vimrc文件中将该表达式映射为“nmap bo :browse oldfiles<CR>”(不带引号)。在正常模式下键入该映射(bo)即可执行该命令。 - Victoria Stuart
有没有办法改变顺序呢?因为现在的情况是,我花了很多时间寻找我两个文件之前打开的东西。 - Nephilim

46

mru.vim 这个插件,它可以添加 :MRU 命令。


22

很晚的回答……展开@sarnolds的答案-您可以使用oldfiles命令查看文件历史记录@see:h oldfiles或:h viminfo

:oldfiles 
此外,你可以通过视图和会话进行细粒度文件管理...有关详细信息,请参阅 :h mkview 和:h mksession。

7
在从:oldfiles列表中获知文件序号后,了解如何打开文件实际上是很有用的。您可以使用交互式的:browse命令来执行此操作,如@sarnold所解释的那样,但也可以通过使用:e #<N>手动实现,其中N是oldfiles列表中的一个数字。 - Krzysztof Adamski

14
使用 :bro ol 命令,然后按下对应的文件编号即可打开相应的文件。

11

有一个文件切换的瑞士军刀CtrlP插件,它也是janus分发的一部分。它具有:CtrlPMRU命令,可以智能查找最近使用的文件。

注意: CtrlPg:ctrlp_cache_dir."mru/cache.txt"中维护自己的最近使用文件列表。它不会重用viminfo(set viminfo?),其中包含文件标记列表。如果您想要清除该列表,则这很有用。


1
CtrlP界面对于vim用户来说不太直观?学习复杂的界面去做简单的事情,比如查找MRU文件=~ / regexp /(使用perl / grep regexp〜/ _viminfo轻松完成),并不值得麻烦。 - mosh
是的,我一直在尝试理解如何使用Ctrlp,但如果你有一个简单的文件集合,MRU似乎更容易使用(https://dev59.com/5XA75IYBdhLWcg3wqK__#3171323)。在MRU中,您还可以使用VIM regexp搜索找到所需的文件... - alpha_989

8

因为之前的回答中没有提到如此好用的工具fzf,我想在这里加入我的两分意见:
fzf.vim 有一个:History命令,可以让你以模糊和实时搜索的方式查找最近使用的文件。
我通过不让 fzf 重新排列搜索结果列表来自定义(默认)行为:我希望所有匹配文件名的顺序保持这些文件最后使用的顺序。
为了实现这个自定义,我在我的 .vimrc 文件中添加了以下内容,覆盖了 fzf.vim 插件定义的默认 History 命令:

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

编辑:
目前我只使用一个neovim插件telescope.nvim,它与fzf.vim非常相似,它具有命令:Telescope old_files。并且它可以将fzf算法用作后端的排序算法(目前建议使用比默认排序器更好的算法)。
它看起来更漂亮,但根据上下文可能会慢一些。它不像fzf那样成熟,但对我来说更容易定制,全部都是lua脚本。
如果您只是使用neovim,请一定值得考虑。


5

5

使用CtrlP插件,您可以使用以下命令搜索最近使用的文件以及当前目录中的文件:

nnoremap <c-p> :CtrlPMixed<cr>

这样可以避免您必须处理内置的Vim命令和MRU插件的麻烦,这两者都无法进行模糊文件搜索,在处理较大项目时非常重要。


1
对于那些不想重新映射Ctrl-P默认功能的人:您可以正常打开Ctrl-P并使用Ctrl-F或Ctrl-B在模式之间切换(其中之一是MRU)。 - Gustavo Matias

3
您可以尝试使用以下命令从命令行访问该列表:
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\"','"

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