【发布时间】:2010-07-03 11:05:31
【问题描述】:
我想访问最近在 GVim 中打开然后关闭的文件。我经常打开和关闭 GVim。我也想从以前的会话中访问最近的文件。
GVim 是否将最近的文件存储在 Word 和许多其他桌面应用程序存储的某个位置?如何访问它们?
【问题讨论】:
标签: vim
我想访问最近在 GVim 中打开然后关闭的文件。我经常打开和关闭 GVim。我也想从以前的会话中访问最近的文件。
GVim 是否将最近的文件存储在 Word 和许多其他桌面应用程序存储的某个位置?如何访问它们?
【问题讨论】:
标签: vim
至少终端 vim 将前十个文件存储到文件标记部分的~/.viminfo 中。您可以使用'0、'1、'2、...'9 在其中跳转。
(可能只对'0 用于返回您正在编辑的最后一个文件,除非您的记忆力比我强。)
您还可以使用:browse oldfiles 命令获取带有数字的菜单。
【讨论】:
0-9作为导航标记,请不要手动标记
:browse old 获取文件列表。并输入q 选择要编辑的文件。
:e #<1 打开最后一个文件,参见:h c_#<。
rm错误删除的文件。
我用的最好的方法是
:browse oldfiles
vim 上最简单的方法。
【讨论】:
有mru.vim,增加了:MRU命令。
【讨论】:
这里的答案很晚...详细说明@sarnolds 答案 - 您可以使用 oldfiles 命令查看文件历史记录 @see :h oldfiles 或 :h viminfo
:oldfiles
此外,您可以通过视图和会话进行细粒度文件管理...@see :h mkview 和 :h mksession 了解详情...
【讨论】:
:oldfiles 列表中知道文件的编号后,了解如何实际打开文件很有用。可以使用:browse 命令以交互方式执行此操作,正如@sarnold 所解释的那样,但也可以使用:e #<N 手动执行此操作,其中N 是oldfiles 列表中的一个数字。
文件切换有一把瑞士刀CtrlP plugin,它也是janus 分配的一部分。它有:CtrlPMRU 命令,可以在最近使用的文件中进行智能查找。
注意:
CtrlP 在g:ctrlp_cache_dir."mru/cache.txt" 中维护自己的最近使用文件列表。它没有重用包含文件标记列表的 viminfo (set viminfo?)。如果您想清除此列表,这很有用。
【讨论】:
使用:bro ol,然后按与您要打开的文件对应的数字。
【讨论】:
在这里添加我的 2 美分,因为之前的答案中没有提到 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 的唯一用户,那么绝对值得一试。
【讨论】:
CtrlP 插件可让您使用以下命令搜索您最近使用的文件以及当前目录中的文件:
nnoremap <c-p> :CtrlPMixed<cr>
这为您省去了处理内置 Vim 命令和 MRU 插件的麻烦,这两者都不允许您进行模糊文件搜索,这在处理大型项目时至关重要。
【讨论】:
您可以通过以下命令从命令行访问该列表:
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\"','"
【讨论】:
从这里的 cmets (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
【讨论】:
nnoremap <Leader>b :buffers<CR>:b<Space>
还有一个插件可以让你从最后修改的列表中选择文件是staritfy。它用最近修改的文件列表替换您的开始屏幕。您以后可以随时使用:Startify 命令打开此页面。
【讨论】:
:ls 在左侧列上列出最近的文件以及缓冲区号。
然后执行:b{buffer-number} 跳转到那里。
示例:
:ls 显示文件列表。我想跳到我访问的倒数第三个文件。
:b3 会带我去那里。
为了更快地搜索,将:ls 映射到某个东西,例如<Leader>. 在你的 .vimrc 文件中。
【讨论】:
您也可以使用 ctrl+O 返回。
【讨论】: