【问题标题】:How to effectively work with multiple files in Vim如何在 Vim 中有效地处理多个文件
【发布时间】:2010-09-08 09:28:14
【问题描述】:

我已经开始使用 Vim 来开发 Perl 脚本并且开始发现它非常强大。

我喜欢的一件事是能够一次打开多个文件:

vi main.pl maintenance.pl

然后在它们之间跳跃:

:n
:prev

并查看打开的文件:

:args

要添加一个文件,我可以说:

:n test.pl

我希望它会被添加到我的文件列表中,但它会清除我当前的文件列表,当我输入 :args 时,我只打开了 test.pl

那么如何在我的 args 列表中添加和删除文件?

【问题讨论】:

  • tmux... 在每个窗格中使用 vim
  • @Tommy:这样你就不能在文件之间粘贴被拉出/删除的内容(vims 缓冲区)。如果可用,只有剪贴板可能会有所帮助(请参阅已接受的答案:stackoverflow.com/questions/5532878/…
  • :N 似乎是转到上一个文件的更简单方法...
  • vimcasts.org/categories/the-argument-list ?在学习 vim 时,强烈建议使用 VimCast。

标签: vim vi


【解决方案1】:

为什么不使用制表符(在 Vim 7 中引入)? 您可以使用:tabn:tabp 在标签之间切换, 使用:tabe <filepath>,您可以添加新标签;并使用常规:q:wq 关闭选项卡。 如果您将 :tabn:tabp 映射到您的 F7/F8 键,您可以轻松地在文件之间切换。

如果文件不多或者您没有 Vim 7,您也可以将屏幕拆分为多个文件::sp <filepath>。然后,您可以使用 Ctrl+W 在分屏之间切换,然后在您想要移动的方向上使用箭头键(或者用 w代替箭头键> 用于下一个,W 用于上一个分屏)

【讨论】:

  • 要保存和关闭选项卡,您还可以使用ZZ 代替:wq(就像通常保存和关闭一样)
  • 我在 Ubuntu 10.10 中使用 vim-gnome 包,我可以使用 Ctrl+PageUp 和 Ctrl+PageDown 在选项卡之间切换。我不需要配置任何东西;这是默认设置。
  • 另外,在编辑模式下,gt 转到下一个选项卡,gT 转到上一个选项卡。
  • 您可以使用 ngt 跳转到任何选项卡,其中 n 是选项卡的索引(以 1 开头)。我认为有一个选项可以在文件名附近显示每个选项卡的索引,但我不知道它是什么。如果有人知道,我很想听听。
  • 还请注意,您可以使用-p 标志从命令行在选项卡中打开多个文件。例如,gvim -p main.pl maintenance.pl 将在选项卡中打开这两个文件。
【解决方案2】:

上市

要查看当前缓冲区的列表,我使用:

:ls

开幕

要打开一个新文件,我使用

:e ../myFile.pl

具有增强的制表符补全功能(将 set wildmenu 放入您的 .vimrc)。

注意:您也可以使用:find,它会为您搜索一组路径,但您需要先自定义这些路径。


切换

要在所有打开的文件之间切换,我使用

:b myfile

带有增强的选项卡完成(仍然是set wildmenu)。

注意::b# 选择上次访问的文件,因此您可以使用它在两个文件之间快速切换。


使用窗口

Ctrl-W sCtrl-W v 水平和垂直分割当前窗口。你也可以使用:split:vertical split:sp:vs

Ctrl-W w 在打开的窗口之间切换,Ctrl-W h(或 jkl)在打开的窗口中导航。

Ctrl-W c 关闭当前窗口,Ctrl-W o 关闭当前窗口以外的所有窗口。

-o-O 标志启动 vim 会以自己的拆分方式打开每个文件。


有了所有这些,我在 Vim 中就不需要标签了,我的手指找到了我的缓冲区,而不是我的眼睛。

注意:如果您希望所有文件都转到同一个 Vim 实例,请使用 --remote-silent 选项启动 Vim。

【讨论】:

  • 如果您使用多个缓冲区,我会推荐LustyJuggler
  • 感谢您为处理多个文件时最常用的 vim 命令提供了非常好的快速参考。
  • :b 是一个非常强大的命令,因为它可以接受缓冲区编号和缓冲区名称作为参数。还有什么?它还支持文件名任何部分的制表符补全。假设您在缓冲区 2 中打开了 foo.txt,您可以键入 :b 2<Enter>:b foo.txt:b oo<Tab><Enter> 来编辑该文件。是的,当您按 时,最后一个将完成 'oo' 到 'foo.txt'。
  • 我的 .vimrc 中有这一行:nnoremap gb :ls<cr>:b<space>。当我在命令模式下输入gb 时,它会列出我打开的缓冲区并输入:b ,以便我开始输入缓冲区名称/编号。
  • 还值得一提的是,:b 将接受子字符串匹配,只要它是明确的。因此,如果您有打开的文件foobarbaz,只需:b z 就足以将您切换到baz 缓冲区,而:b oo:b o 将带您到@987654361 @缓冲区。
【解决方案3】:
:ls

打开缓冲区列表

  • :bp上一个缓冲区
  • :bn下一个缓冲区
  • :bnn 一个数字)移动到第 n 个缓冲区
  • :b <filename-part> 带有提供自动完成功能的制表键(太棒了!!)

在某些版本的 vim 中,bnbp 实际上分别是 bnextbprevious。在这种情况下,选项卡自动完成很有帮助。

或者当您处于正常模式时,使用^ 切换到您正在处理的最后一个文件。

另外,你可以保存 vim 的会话

:mksession! ~/today.ses

上述命令将当前打开的文件缓冲区和设置保存到~/today.ses。您可以使用

加载该会话
vim -S ~/today.ses

轻松记住您昨天离开的地方。 ;)

【讨论】:

  • 转到特定缓冲区:N CTRL-^
  • @shyam 我想我爱你!不知何故,我从来不知道 mksession 命令,但今天我突然决定必须有某种方法来保存文件列表以便轻松打开它们。这甚至更好,因为它甚至似乎存储了事物的完整状态(窗口拆分、缓冲区位置等)。所以,谢谢!
  • 另外,使用" 标记跳转到您上次在文件中的位置。
【解决方案4】:

添加到args 列表:

:argadd

args 列表中删除:

:argdelete

在您的示例中,您可以使用 :argedit test.pl 将 test.pl 添加到 args 列表中,然后一步编辑该文件。

:help args 提供了更多细节和高级用法

【讨论】:

  • 这确实是所提问题的答案,尽管鉴于标题,其他答案是完全公平的。
【解决方案5】:

我使用缓冲区命令 - :bn(下一个缓冲区),:bp(上一个缓冲区):buffers(列出打开的缓冲区):b<n>(打开缓冲区):bd(删除缓冲区)。 :e <filename> 将打开一个新的缓冲区。

【讨论】:

    【解决方案6】:

    我认为您在查看已打开文件列表时可能使用了错误的命令。

    尝试使用:ls 来查看您已打开的文件列表,您会看到:

       1 %a   "./checkin.pl"            line 1
      2 #    "./grabakamailogs.pl"     line 1
      3      "./grabwmlogs.pl"         line 0
      etc.
    

    然后,您可以通过列出的数字引用文件来浏览文件,例如 :3b

    或者您可以通过输入数字来拆分屏幕,但使用 sb 而不是 b。

    另外,% 指的是当前可见的文件,# 指的是备用文件。

    您可以通过按 Ctrl Shift 6

    在这两个文件之间轻松切换

    编辑:像:ls 一样,您可以使用:reg 查看寄存器的当前内容,包括包含您已删除内容的0-9 寄存器。如果您想重复使用之前删除的某些文本,这将特别有用。

    【讨论】:

    • 很高兴看到 % 和 # 等相关信息的旁边。 +1
    【解决方案7】:

    Vim(但不是原来的 Vi!)具有我发现(在许多情况下)优于缓冲区的选项卡。您可以说 :tabe [filename] 在新选项卡中打开文件。通过单击选项卡或通过组合键 [n]gtgT 在选项卡之间循环。图形 Vim 甚至还有图形标签。

    【讨论】:

    • 谢谢,听起来不错,但很遗憾,我们在服务器上只安装了 VIM 6.1。
    • 制表符使用通配符非常方便:vim -p dir/*。最大标签大小为 10,但您可以在 ~/.vimrc 设置 tabpagemax 中将其更改为其他值。
    【解决方案8】:

    :e:badd 之类的东西只接受一个参数,因此以下将失败

    :e foo.txt bar.txt
    :e /foo/bar/*.txt
    :badd /foo/bar/*
    

    如果要在 vim 中添加多个文件,请使用 arga[dd]

    :arga foo.txt bar.txt
    :arga /foo/bar/*.txt
    :argadd /foo/bar/*
    

    【讨论】:

      【解决方案9】:

      这里有很多答案!我在不重新发明轮子的情况下使用的东西 - 最著名的插件(不会很快消亡并且被很多人使用)是超快速和令人讨厌的。

      • ctrlpvim/ctrlp.vim - 按名称查找文件,按位置或名称进行模糊搜索
      • jlanzarotta/bufexplorer - 浏览打开的缓冲区(当您不记得最近打开和修改了多少文件并且不记得它们在哪里时,可能是因为您使用 Ag 搜索它们)
      • rking/ag.vim 搜索关于 gitignore 的文件
      • scrooloose/nerdtree 查看目录结构、环视、添加/删除/修改文件

      编辑: 最近我一直在使用 dyng/ctrlsf.vim 来搜索上下文视图(如 Sublime 搜索),我将引擎从 ag 到 ripgrep。表现非常出色。

      EDIT2:CtrlSF 一起,您可以使用 mg979/vim-visual-multi,一次更改多个文件,然后在最后一口气将它们保存下来。

      【讨论】:

      • ctrlp 已移动,现在位于 ctrlpvim/ctrlp.vim
      • 这是正确的答案!为什么它没有更多的赞成票?
      • 它没有更多的赞成票,因为这个问题是在 2008 年提出的。:)
      • 完全正确。我无法想象没有这些插件的开发环境中的 vim。
      【解决方案10】:

      此线程中的一些答案建议使用选项卡,而其他答案建议使用缓冲区来完成相同的事情。选项卡和缓冲区是不同的。我强烈建议你阅读这篇文章“Vim Tab madness - Buffers vs Tabs”。

      这是我从文章中摘录的一个很好的总结:

      总结:

      • 缓冲区是文件的内存文本。
      • 窗口是缓冲区上的视口。
      • 标签页是窗口的集合。

      【讨论】:

      • 你可以通过在 Vim 中输入 :help window 来获得该摘要
      【解决方案11】:

      在 vim 中使用多个文件时,我主要使用这些命令(打开了大约 350 个文件):

      • :b <partial filename><tab>(跳转到缓冲区)
      • :bw(缓冲区擦除,删除缓冲区)
      • :e <file path>(编辑,打开一个新缓冲区>
      • pltags - 允许跳转到子程序/方法定义

      【讨论】:

      • 350 个文件!!!这令人印象深刻。你如何找到正确的缓冲区来跳转?你做过分裂吗?
      • @BrianO'Dell :b <partial filename><tab> 加上set wildmenu 中的.vimrc 非常适合打开大量缓冲区的情况。然后你只需部分匹配并滚动它找到的那些。在其他体面的编辑器中,您有模糊的发现,但通常您不能将模糊的发现限制在您打开的文件中。
      【解决方案12】:

      添加另一个答案,因为任何答案均未涵盖此内容

      将所有缓冲区更改为tab 视图。

       :tab sball
      

      会将所有缓冲区打开到选项卡视图。然后我们可以使用任何标签相关的命令

      gt or :tabn           "    go to next tab
      gT or :tabp or :tabN  "    go to previous tab
      

      详情请见:help tab-page-commands

      我们可以通过vim -p file1 file2 指示vim 以标签视图的形式打开多个文件。 alias vim='vim -p' 会很有用。
      同样的事情也可以通过在~/.vimrc中使用自动命令来实现

       au VimEnter * if !&diff | tab all | tabfirst | endif
      

      无论如何要回答这个问题: 添加到 arg 列表:arga file,

      从 arg 列表中删除:argd pattern

      更多:help arglist

      【讨论】:

        【解决方案13】:

        您可能想使用Vim global marks

        这样您可以在文件之间快速跳转,甚至可以跳转到文件中的标记位置。此外,关键命令很短: 'C 将我带到我正在使用的代码, 'T 将我带到我正在使用的单元测试。

        当你改变位置时,重置标记也很快: mC 标记新代码点, mT 标志着新的测试点。

        【讨论】:

          【解决方案14】:

          我对 gVim 和命令行 Vim 使用相同的 .vimrc 文件。我倾向于在 gVim 中使用制表符并在命令行 Vim 中使用缓冲区,因此我设置了 .vimrc 以使它们更容易使用:

          " Movement between tabs OR buffers
          nnoremap L :call MyNext()<CR>
          nnoremap H :call MyPrev()<CR>
          
          " MyNext() and MyPrev(): Movement between tabs OR buffers
          function! MyNext()
              if exists( '*tabpagenr' ) && tabpagenr('$') != 1
                  " Tab support && tabs open
                  normal gt
              else
                  " No tab support, or no tabs open
                  execute ":bnext"
              endif
          endfunction
          function! MyPrev()
              if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
                  " Tab support && tabs open
                  normal gT
              else
                  " No tab support, or no tabs open
                  execute ":bprev"
              endif
          endfunction
          

          这破坏了 HL 的现有映射,但它使文件之间的切换变得非常快速和容易。只需点击 H 下一个和 L 上一个;无论您使用的是制表符还是缓冲区,都会得到预期的结果。

          【讨论】:

          • 我喜欢这些映射。也可以试试 Ctrl-H、Ctrl-L。我使用相同的映射设置 Firefox 和 gnome 终端。很高兴拥有一致的 Tab 键快捷方式。
          • 使用您的领导者密钥而不是 ctrl 以避免破坏现有映射
          【解决方案15】:

          如果仅使用 vim 内置命令,我见过的在多个缓冲区之间切换的最佳命令是:

          nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>
          

          完美结合:ls:b命令——列出所有打开的缓冲区,等待你输入命令切换缓冲区。

          鉴于vimrc中的上述映射,一旦你输入&lt;Leader&gt;f

          • 显示所有打开的缓冲区
          • 您可以:
            • 输入 23 以转到缓冲区 23,
            • 输入 # 以转到备用/MRU 缓冲区,
            • 键入文件的部分名称,然后键入&lt;Tab&gt;&lt;C-i&gt; 以自动完成,
            • 或者只是 &lt;CR&gt;&lt;Esc&gt; 留在当前缓冲区中

          上述键映射的输出快照是:

          :set nomore|:ls|:set more
            1  h    "script.py"    line 1
            2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
            3 %a    "README.md"    line 17 -- '%' for current buffer
            4       "file3.txt"    line 0  -- line 0 for hasn't switched to
            5     + "/etc/passwd"  line 42 -- '+' for modified
          :b '<Cursor> here'
          

          在上面的快照中:

          • 第二列:%a 表示当前,h 表示隐藏,# 表示以前,空表示尚未切换到。
          • 第三栏:+ 用于修改。

          另外,我强烈建议set hidden。见:help 'hidden'

          【讨论】:

          • 这是个好主意!我一直在使用:b:ls 很多但独立。我认为当您拥有超过一页的缓冲区时,这变得不那么有用了,但是您仍然可以退回到:b
          • 很高兴看到它有帮助。干杯! :)
          • 从这个Vim wikia,你可以把它缩短一点到nnoremap &lt;leader&gt;f :ls&lt;cr&gt;:b&lt;space&gt;,虽然这可能会遇到'more'命令的问题
          • 是的,如果打开的文件较少(通常的用例),这种方式非常有效。 set more 的东西只有在打开许多文件(超过一页)时才会产生影响,例如 vim /usr/include/*,尽管那时用处不大。
          【解决方案16】:

          如果你要使用多个缓冲区,我认为最重要的是 设置隐藏 这样即使您要离开的缓冲区有未保存的更改,它也可以让您切换缓冲区。

          【讨论】:

            【解决方案17】:

            我使用以下内容,这为您提供了许多您希望在其他编辑器(例如 Sublime Text / Textmate)中拥有的功能

            1. 使用缓冲区而不是“标签页”。缓冲区与几乎所有其他编辑器中的选项卡的概念相同。
            2. 如果您想要与选项卡相同的外观,您可以使用vim-airline 插件,在您的.vimrc 中设置以下设置:let g:airline#extensions#tabline#enabled = 1。当您没有打开标签页时,这会自动将所有缓冲区显示为标签页眉
            3. 使用 Tim Pope 的 vim-unimpaired 提供 [b]b 用于移动到上一个/下一个分别缓冲(加上一大堆其他好东西)
            4. 在您的.vimrc 中添加set wildmenu,然后当您键入:b &lt;file part&gt; + Tab 作为缓冲区时,您将获得可能的缓冲区列表,您可以使用左/右箭头滚动浏览
            5. 使用 Tim Pope 的 vim-obsession 插件来存储与航空公司完美配合的会话(我有 lots of pain with sessions and plugins
            6. 使用 Tim Pope 的 vim-vinegar 插件。这适用于本机 :Explore,但使用起来更容易。您只需键入- 即可打开资源管理器,这与在资源管理器中进入目录的键相同。使导航更快(但我很少使用 fzf)
            7. fzf(可以作为 vim 插件安装)也是一个非常强大的模糊查找器,您可以使用它来搜索文件(以及缓冲区)。 fzf 也 plays very nicely 和 fd(find 的更快版本)
            8. 使用Ripgrepvim-ripgrep 搜索您的代码库,然后您可以在结果中使用:cdo 进行搜索和替换

            【讨论】:

            • fzf 和 fzf-vim 改变了我的生活,再怎么推荐也不为过。它在 Windows 上也能很好地工作,甚至在控制台中对文件进行模糊搜索。在 Windows 上使用 ripgrep (rg) 后端,根据我的经验,它优于任何其他查找/grep 工具(如 silversearcher 或 de default windows find fzf 使用 iirc)。您可以使用它搜索任何项目列表:最近使用的文件、当前打开的缓冲区、当前缓冲区中的行、代码库 (cwd) 中的行、标签……您可以轻松编写自己的列表模糊搜索。超好的! (我是从 ctrl-p 来的,从不回头)
            【解决方案18】:

            我有效处理多个文件的方法是使用 tmux。

            它允许您垂直和水平分割窗口,如:

            我在我的 mac 和 linux 机器上都以这种方式工作,我发现它比提供的本机窗口窗格切换机制更好(在 Mac 上)。我发现切换更容易,只有使用 tmux,我才能在我的 mac 上获得“在同一当前目录中的新页面”(尽管似乎有在同一目录中打开新窗格的选项),这是一个令人惊讶的关键部分。当前位置的即时新窗格非常有用。一种为两个操作系统使用相同键组合的新窗格的方法对我来说至关重要,并且对所有人来说都是未来个人兼容性的奖励。 除了多个 tmux 窗格之外,我还尝试过使用多个选项卡,例如 和多个新窗口,例如 最终我发现多个 tmux 窗格对我来说是最有用的。我非常“视觉化”,喜欢把我的各种背景放在我面前,像窗格一样连接在一起。

            tmux 还支持水平和垂直窗格,而旧的 screen 不支持(虽然 mac 的 iterm2 似乎支持它,但同样,当前目录设置对我不起作用)。 tmux 1.8

            【讨论】:

            • 当我看到你的“多个窗口”的人工示例时,我不得不大声笑。我希望没有人那样工作 :-) 无论如何,我使用 tiling wm 更好(我从 tmux 切换到 i3wm)。只是为了完成你的答案。
            • Tmux 非常棒,我使用这种方法很长时间了,但它让导航以及在两个文件之间复制和粘贴变得更加困难。
            • 我曾经这样做过,但是当你需要 yank/paste 时,拥有多个 vim 缓冲区会更好
            【解决方案19】:

            在我和其他许多 vim 用户中,最好的选择是,

            • 使用打开文件,

            :e 文件名.extension

            然后只需 Ctrl + 6 即可更改到最后一个缓冲区。或者,您可以随时按

            :ls 列出缓冲区,然后使用 b 后跟缓冲区号来更改缓冲区。

            • 我们使用
            • 进行垂直或水平分割

            :vsp 用于垂直分割

            :sp 用于水平分割

            然后&lt;C-W&gt;&lt;C-H/K/L/j&gt; 更改工作拆分。

            您当然可以编辑任意数量的拆分文件。

            【讨论】:

              【解决方案20】:

              我经常使用命令行和 git,所以我的 bashrc 中有这个别名:

              alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"
              

              这将在现有窗口的新选项卡中打开每个新文件,并为每个 git 存储库创建一个窗口。 因此,如果您从 repo A 打开两个文件,从 repo B 打开 3 个文件,您最终会看到两个窗口,一个用于带有两个选项卡的 repo A,一个用于带有三个选项卡的 repo B。

              如果您打开的文件不包含在 git repo 中,它将转到默认窗口。

              要在标签之间跳转,我使用这些映射:

              nmap <C-p> :tabprevious<CR>
              nmap <C-n> :tabnext<CR>
              

              要一次打开多个文件,您应该将其与其他解决方案之一结合使用。

              【讨论】:

                【解决方案21】:

                我使用了多个缓冲区,这些缓冲区设置为隐藏在我的 ~/.vimrc 文件中。

                mini-buffer explorer 脚本也很不错,可以很好地列出您的缓冲区。然后:b1:b2... 转到相应的缓冲区或使用迷你缓冲区资源管理器并通过缓冲区进行选项卡。

                【讨论】:

                  【解决方案22】:

                  尝试以下地图以方便编辑多个文件

                  " 分割窗口

                  nmap &lt;leader&gt;sh :leftabove vnew&lt;CR&gt;

                  nmap &lt;leader&gt;sl :rightbelow vnew&lt;CR&gt;

                  nmap &lt;leader&gt;sk :leftabove new&lt;CR&gt;

                  nmap &lt;leader&gt;sj :rightbelow new&lt;CR&gt;

                  " 移动

                  nmap &lt;C-j&gt; &lt;C-w&gt;j

                  nmap &lt;C-k&gt; &lt;C-w&gt;k

                  nmap &lt;C-l&gt; &lt;C-w&gt;l

                  nmap &lt;C-h&gt; &lt;C-w&gt;h

                  【讨论】:

                    【解决方案23】:

                    我制作了一个very simple video,展示了我使用的工作流程。基本上我使用Ctrl-P Vim 插件,并将缓冲区导航映射到 Enter 键。

                    这样我可以在正常模式下按 Enter,查看打开文件列表(显示在屏幕底部的一个小新窗口中),选择我要编辑的文件并再次按 Enter。要快速搜索多个打开的文件,只需键入部分文件名,选择文件并按 Enter。

                    我没有在视频中打开很多文件,但是当您开始拥有大量文件时,它会变得非常有用。

                    由于插件使用 MRU 排序对缓冲区进行排序,因此您只需按两次 Enter 并跳转到您正在编辑的最新文件。

                    插件安装后,你唯一需要的配置是:

                    nmap <CR> :CtrlPBuffer<CR>
                    

                    当然你可以将它映射到不同的键,但我发现要输入的映射非常方便。

                    【讨论】:

                      【解决方案24】:

                      我建议使用插件

                      NERD树

                      这里是带有说明的 github 链接。

                      Nerdtree

                      我使用 vim-plug 作为插件管理器,但您也可以使用 Vundle。

                      vim-plug

                      Vundle

                      【讨论】:

                        【解决方案25】:

                        当我开始使用 VIM 时,我没有意识到选项卡应该用作不同的窗口布局,而缓冲区则用于多个文件之间的编辑/切换。实际上,在 v7.0 之前,一开始的选项卡甚至不存在,我只是在终端选项卡中打开了一个 VIM(我当时正在使用 gnome-terminal),并使用 alt+数字在选项卡之间切换,因为我认为使用类似的命令:buffers, :bn 和 :bp 对我来说太多了。当 VIM 7.0 发布时,我发现管理大量文件并切换到它更容易,但最近我才意识到缓冲区应该始终是要走的路,除非有一件事:你需要对其进行配置以使其正常工作。

                        所以我尝试了 vim-airline 并启用了可视的顶部选项卡式缓冲栏,但我的 iTerm2 出现了图形问题,所以我尝试了其他几个,似乎 MBE 最适合我。我还将 shift+h/l 设置为快捷方式,因为原来的快捷方式(移动到当前页面的头部/尾部)对我来说不是很有用。

                        map &lt;S-h&gt; :bprev&lt;Return&gt;
                        map &lt;S-l&gt; :bnext&lt;Return&gt;

                        它似乎比 gt 和 gT 更容易,并且 :e 也比 :tabnew 更容易。我发现 :bd 虽然不如 :q 方便(MBE 遇到了一些问题),但我认为我可以处理缓冲区中的所有文件。

                        【讨论】:

                          【解决方案26】:

                          此线程中的大多数答案都是使用普通的 vim 命令,这当然很好,但我认为我会使用我认为特别有用的插件和功能的组合来提供广泛的答案(至少其中一些提示来自Gary Bernhardt's file navigation tips):

                          1. 要在最后两个文件之间切换,只需按两次&lt;leader&gt;。我建议将&lt;leader&gt; 分配给空格键:

                            nnoremap <leader><leader> <c-^>
                            
                          2. 对于快速移动项目,答案是模糊匹配解决方案,例如 CtrlP。我将它绑定到&lt;leader&gt;a 以便快速访问。

                          3. 如果我想查看当前打开的缓冲区的可视化表示,我使用the BufExplorer plugin。简单但有效。

                          4. 如果我想浏览文件系统,我会使用命令行或外部实用程序(Quicklsilver、Afred 等),但查看当前项目结构 NERD Tree 是一个经典。不要使用它代替2 作为您的主要文件查找方法。它真的会让你慢下来。我使用绑定&lt;leader&gt;ff

                          这些对于查找和打开文件应该足够了。当然,从那里使用水平和垂直拆分。关于拆分,我发现这些功能特别有用:

                          1. 当空间不足时,在较小的区域打开新的拆分,并在导航时展开它们。请参阅 here 了解 cmets 的具体作用:

                            set winwidth=84
                            set winheight=5
                            set winminheight=5
                            set winheight=999
                            
                            nnoremap <C-w>v :111vs<CR>
                            nnoremap <C-w>s :rightbelow split<CR>
                            set splitright
                            
                          2. 轻松地从拆分移动到拆分:

                            nnoremap <C-J> <C-W><C-J>
                            nnoremap <C-K> <C-W><C-K>
                            nnoremap <C-L> <C-W><C-L>
                            nnoremap <C-H> <C-W><C-H>
                            

                          【讨论】:

                            【解决方案27】:

                            如果您在 osx 上并且希望能够单击您的选项卡,请使用 MouseTerm 和 SIMBL(取自 here)。另外,请查看related discussion

                            【讨论】:

                              【解决方案28】:

                              您可以成为一个绝对的疯子,并通过添加您的.bashrcvim 别名为vim -p

                              alias vim="vim -p"
                              

                              这将导致在选项卡中从 shell 中打开多个文件,之后无需在 vim 中调用 :tab ball

                              【讨论】:

                                【解决方案29】:
                                1. 用 vim 类型打开 2 个或更多文件:vim -p file1 file2

                                2. 在该命令去扔文件之后,您可以使用 CTRL+Shift+ ,它会改变你在 vim 中的文件。

                                3. 如果你想再添加一个文件 vim 并使用它::tabnew file3

                                4. 您也可以使用不会创建新标签并在屏幕上打开文件以切片您的屏幕::new file3

                                5. 如果您想使用可以帮助您处理目录的插件 和文件我建议你NERDTree

                                6. 要下载它,你需要有 vim-plug 以便下载其他插件,还需要 NERDTree 在你的~/.vimrc 中键入此命令。

                                    let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
                                    if empty(glob(data_dir . '/autoload/plug.vim'))
                                      silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs 
                                      https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
                                      autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
                                    endif
                                
                                    call plug#begin('~/.vim/plugged')
                                    Plug 'scrooloose/nerdtree'
                                    call plug#end()
                                
                                1. 然后通过命令:wq保存.vimrc,返回并输入::PlugInstall

                                之后插件将被安装,您可以将您的 NERDTree 与其他插件一起使用。

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 2016-12-10
                                  • 2012-11-04
                                  • 2016-02-29
                                  • 2010-12-08
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2013-05-23
                                  • 2013-04-15
                                  相关资源
                                  最近更新 更多