【问题标题】:Recent file history in Vim?Vim 中最近的文件历史记录?
【发布时间】:2010-07-03 11:05:31
【问题描述】:

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

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

【问题讨论】:

标签: vim


【解决方案1】:

至少终端 vim 将前十个文件存储到文件标记部分的~/.viminfo 中。您可以使用'0'1'2、...'9 在其中跳转。

(可能只对'0 用于返回您正在编辑的最后一个文件,除非您的记忆力比我强。)

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

【讨论】:

  • 如果要使用0-9作为导航标记,请不要手动标记
  • 使用:browse old 获取文件列表。并输入q 选择要编辑的文件。
  • :e #<1 打开最后一个文件,参见:h c_#<
  • :bro ol 可以工作.. 但是你必须输入很多键.. 首先获取文件列表,然后按 q,然后选择一个数字。我相信下面提到的 MRU 插件要好得多:stackoverflow.com/a/3171323/4752883 你必须按 f,然后使用 hjkl 或其他键浏览到文件/搜索文件名。然后按 o、enter、t 或 v 快速打开光标下的文件。
  • 我用上述方法恢复了我使用rm错误删除的文件。
【解决方案2】:

我用的最好的方法是

:browse oldfiles

vim 上最简单的方法。

【讨论】:

  • 不错!我在 ~/.vimrc 中将该表达式映射为“nmap bo :browse oldfiles”(不带引号)。只需在普通模式下键入该映射 (bo) 即可执行该命令
【解决方案3】:

mru.vim,增加了:MRU命令。

【讨论】:

    【解决方案4】:

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

    :oldfiles 
    

    此外,您可以通过视图和会话进行细粒度文件管理...@see :h mkview 和 :h mksession 了解详情...

    【讨论】:

    • :oldfiles 列表中知道文件的编号后,了解如何实际打开文件很有用。可以使用:browse 命令以交互方式执行此操作,正如@sarnold 所解释的那样,但也可以使用:e #<N 手动执行此操作,其中N 是oldfiles 列表中的一个数字。
    【解决方案5】:

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

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

    【讨论】:

    • CtrlP 界面对 vim 用户来说不直观?不值得费心学习复杂的界面来做简单的事情,比如找到 MRU 文件 =~ /regexp/(用 perl/grep regexp ~/_viminfo 很容易完成)。
    • 是的.. 我一直在尝试了解如何使用 Ctrlp,但如果您有一组简单的文件 (stackoverflow.com/a/3171323/4752883),MRU 似乎更容易使用。在 MRU 中你也可以做 VIM 正则表达式搜索来找到你需要的文件...
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      在这里添加我的 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 的唯一用户,那么绝对值得一试。

      【讨论】:

        【解决方案8】:
        【解决方案9】:

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

        nnoremap <c-p> :CtrlPMixed<cr>
        

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

        【讨论】:

        • 对于那些对重新映射Ctrl-P的默认功能有抵抗力的人:您可以正常打开Ctrl-P并使用Ctrl-F或Ctrl-B在模式之间切换(MRU就是其中之一)
        【解决方案10】:

        您可以通过以下命令从命令行访问该列表:

        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\"','"
        

        【讨论】:

          【解决方案11】:

          从这里的 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
          

          【讨论】:

          • 是的,这行得通。但是,编辑的工作肯定是让事情变得简单吗?如果您必须发出一个命令,直观地识别某些东西,记住一个 Id,然后再发出另一个命令,这确实是在浪费用户时间。你的回答是正确的,我并不是说冒犯,但这并不是 Vim 的杀手级功能之一!
          • 我遇到了同样的问题。你试过buffexplorer吗?它结合了 ls 和 :tabnew +Nbuf。现在您可以打开缓冲区列表,并在新选项卡等中打开它,只需按一下键(o,t,v)等。
          • 另一个选项是:nnoremap &lt;Leader&gt;b :buffers&lt;CR&gt;:b&lt;Space&gt;
          【解决方案12】:

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

          【讨论】:

          • 甚至无法启动安装 - 需要更多有关基本安装和使用的文档。使用 MRU,因为它易于安装和使用。
          【解决方案13】:

          :ls 在左侧列上列出最近的文件以及缓冲区号。

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

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

          为了更快地搜索,将:ls 映射到某个东西,例如&lt;Leader&gt;. 在你的 .vimrc 文件中。

          【讨论】:

            【解决方案14】:

            您也可以使用 ctrl+O 返回。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-02
              • 2016-02-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多