如何在vim中创建一个新的单独缓冲区列表?

时间:2015-10-01 08:26:12

标签: vim

在某些情况下,我想打开几个文件作为参考,并且不希望它们弄乱我当前的缓冲区列表。我尝试了:newspvs:tabnew,但是,新打开的文件始终保存在我当前的缓冲区列表中。有没有办法创建一个全新的缓冲区列表,以便分开保存这些打开的文件?因此,只要我不需要再看到它们,我就可以完全关闭这些文件,使用1,100bd。我一直在谷歌搜索它,但仍然没有运气。

3 个答案:

答案 0 :(得分:2)

您可以尝试使用此插件:vim-ctrlspace

来自上述插件的README.md:

  

答案是标签 - Vim-CtrlSpace的秘密武器。每个标签都有   一个单独的缓冲区列表。这是非常不同的   与普通的Vim相比。由插件驱动的标签可以看作是桩   桌子上的文件。

     

使用标签,您可以,例如:

     
      
  • 群组相关缓冲区
  •   
  • 提取到其他标签
  •   
  • 相应地命名
  •   
  • 移动或复制它们
  •   
     

Vim-CtrlSpace中的标签使用比Vim中的广泛使用。这个   是因为它们主要作为独立的缓冲区列表,所以你是   可能有很多。可以在其中访问和管理选项卡   标签列表。

     

所有缓冲区,选项卡和标签布局都可以保留为   工作区。就像瞬间拍摄你的桌子一样   相机。您可以使用Workspace为每个项目保存多个工作区   列表。

答案 1 :(得分:0)

尝试使用参数列表。请参阅:help:args和周围部分。如果您的所有参考文件(以及那些参考文件)都在您的arg列表中,您可以:argdo bd全部删除它们。如果您已经在使用全局列表,那么也有本地arg列表。

答案 2 :(得分:0)

免责声明:使用该插件几乎可以肯定是一个更强大的解决方案,因为我自己做了这个,而且我对vim相对较新。但这至少是使用quickfix列表的一个很好的练习。

我的回答: 您可以使用quickfix错误列表作为文件列表。有关完整文档,请参阅:help quickfix。这是我的工作流程,当我想要查看与master不同的所有文件时(使用git)。

  1. vim在您正在处理的目录中打开vim。
  2. new打开新缓冲区
  3. read ! git diff --name-only master将我的bash命令的输出粘贴到新缓冲区中。您可以在此处运行任何命令或手动输入文件列表。您可能希望通过删除任何空行来清理它。
  4. w! /tmp/quickfix.txt创建我们以后可以使用的文件名。
  5. set errorformat+=%f更改errorformat以接受文件路径的vanilla列表。有关详细信息,请参阅:help errorformat
  6. cfile /tmp/quickfix.txt阅读文件列表并使用新的errorformat创建quickfix“错误”列表。
  7. set errorformat-="%f"(可选)这会删除添加的错误格式,以确保您不会混淆errorformat的任何其他用途,例如vimgrep
  8. 现在,您可以使用quickfix选项在文件之间移动。 :copen打开一个互动列表,:cnext / :cprevious来循环播放。您也可以同时拥有多个列表。我使用:colder返回上一个列表。如果您在vim中使用任何grep命令,则应该熟悉这一点。

    这些只是手动步骤。您可以创建一个可以一次完成所有这些功能的功能或任何您需要的功能。这就是我正在使用的。

    function! LoadQuickfixFileList(filename)
        set errorformat+=%f
        execute "cfile ".a:filename
        set errorformat-=%f
    endfunction
    
    function! WriteBufferToQuickFixFileList(filename)
        call writefile(getbufline(bufnr(bufname("%")), 0, "$"), a:filename)
    endfunction
    
    function! GitDiffNameOnlyMaster()
        execute "new"
        execute "read ! git diff --name-only master"
        execute "normal! ggdd"
        call WriteBufferToQuickFixFileList("/tmp/quickfix.txt")
        call LoadQuickfixFileList("/tmp/quickfix.txt")
    endfunction
    
    nnoremap <silent> <leader>cgd :call GitDiffNameOnlyMaster()<CR>
    nnoremap <silent> <leader>cw :call WriteBufferToQuickFixFileList("/tmp/quickfix.txt")<CR>
    nnoremap <silent> <leader>cf :call LoadQuickfixFileList("/tmp/quickfix.txt")<CR>
    

    <leader>cgdgit diff --name-only master做了全部事情。如果我自己在新缓冲区中创建文件列表,我可以使用<leader>cw将其写入/tmp/quickfix.txt。完成后,或者如果我以其他方式创建/tmp/quickfix.txt文件,我会使用<leader>cf加载该文件。