如何在VIM中处理大型项目

如何在VIM中处理大型项目,vim,nerdtree,minibufexplorer,ctrlp,Vim,Nerdtree,Minibufexplorer,Ctrlp,我有很多文件夹级别的大型项目。有些文件的名称相同,并且根据文件夹名称的不同,它们的功能也不同。比如说 /admin/action1.php /action1.php 第一个是指管理任务,第二个是由用户访问的。 Vim很快就被标签和缓冲区弄得乱七八糟,而且很难移动。 我使用的Pluigins是: 书呆子树 CtrlP 迷你浏览器 我正在为Windows使用gVim,像YouCompleteMe这样的插件是不可选择的 NerdTree-太笨拙了,无法在大型项目的文件夹之间来回移动 CtrlP-你

我有很多文件夹级别的大型项目。有些文件的名称相同,并且根据文件夹名称的不同,它们的功能也不同。比如说

/admin/action1.php
/action1.php
第一个是指管理任务,第二个是由用户访问的。 Vim很快就被标签和缓冲区弄得乱七八糟,而且很难移动。 我使用的Pluigins是: 书呆子树 CtrlP 迷你浏览器

我正在为Windows使用gVim,像YouCompleteMe这样的插件是不可选择的

  • NerdTree-太笨拙了,无法在大型项目的文件夹之间来回移动
  • CtrlP-你必须通过一直输入姓名来了解你在寻找什么
  • MiniBuffExplorer-有大量的文件,占用屏幕上很大的空间,不可能找到任何东西
  • Vim会话-打开项目的保存选项卡/窗口

正如你在图片上看到的,有很多标签可以记住巫婆标签对应于代码的巫婆部分。MiniBuffExplorer帮不了什么忙

所以我的问题是,您将如何在VIM中处理大型项目,以便更好地按照功能或代码部分来组织事情。有没有干净的方法? 是否有一种方法可以对缓冲区或选项卡进行分组,如:

Migrations
Seeds
Admin Controllers
Admin Views
Config

Vim不是IDE;在我看来,您正在突破Vim中有意义(同时打开)的极限。您可以轻松设置简单的集成,允许您从IDE在Vim中打开文件


我建议您在最好的地方使用每一种工具:用于管理和导航大型项目的IDE,以及用于出色文本编辑功能的Vim

在这里,我不认为工具有错。更重要的是你如何使用它们

  • 选项卡根本不像在其他编辑器中那样被设计为文件代理。选项卡是工作空间,允许您按自己喜欢的方式组织窗口。他们是你工作的最佳人选

    Migrations
    Seeds
    ...
    
    情景

    以下是创建“迁移”选项卡的一种可能方法:

    从那里,您在该选项卡中创建的所有窗口将继承
    迁移
    工作目录,并且每个
    :e
    :sp
    :vs
    甚至
    :vim
    都将从该工作目录开始

    此外,默认情况下,这将使NERDTree和netrw显示本地工作目录的内容

    如果要更改选项卡的名称,请参见
    :帮助查看选项卡
    :帮助设置吉他标签

  • 您应该使用CtrlP的路径模式对整个路径而不是文件名进行匹配:

    fbruse
    
    将匹配:

    foo/bar/user
    
    但不是:

    baz/vroom/user
    
    通过上面的选项卡设置,CtrlP的建议应该限制在
    迁移
    目录中,从而使迁移速度大大加快

    不过,CtrlP并不完美:在大型项目中,它可能会很慢,因此请确保您阅读了整个文档

  • 打开的缓冲区的“始终打开”列表可能是一个好主意,当您只有少量缓冲区时,但与选项卡一样,它显然根本无法扩展。当你真的想切换缓冲区时,最好显示列表:减少屏幕空间和脑细胞的浪费

  • 不过,请注意,虽然可以定义窗口本地参数列表,但也没有办法定义窗口本地缓冲区列表。由于参数列表总是泄漏到缓冲区列表中,并且缓冲区列表是全局的,因此缓冲区命令将始终处理相同数量的缓冲区,无论您在哪个选项卡中。从而限制了选项卡的一般用途

  • 对于处理大型项目来说,文件不是一个很好的比喻:当你的程序由函数、类、数组、变量而不是文件组成时,你必须在头脑中保持一个复杂的符号->文件映射

    使用标记(
    :help标记
    )是一种非常方便的项目跳转方式:

    :tag foo
    :tag bar<Tab>
    :ptag /baz<Tab>
    
    :标记foo
    :标记栏
    :ptag/baz
    
    而CtrlP的
    :CtrlPTags
    几乎让它变得有趣

  • FWIW,标签跳跃是我最喜欢的导航技术,我通常不使用标签或窗口

    我在Windows上使用gVim,像YouCompleteMe这样的插件不是一个 选择权

    这句话是假的。签出此特定主题的


    祝你好运。

    你可能想看看,它非常适合处理大型项目。这个插件帮助你处理标签、缓冲区、会话等等


    你可以在YouTube上查看。我知道VIM不是IDE。我可以在VIM中做任何我想做的事情,除了组织我的工作流程,这样我就可以轻松地跳转到我现在需要的文件。可能的副本。。。另请参阅(以及许多其他类似问题)。您是对的,这是一个常见问题。我试图用特定的插件展示我的设置,以及它在我的项目中的外观。希望我可能需要使用不同的插件,配置我已经有不同的插件,或者找到工作流程应该是什么样子的指针。在我看来,重新评估您的工作流程也会让您受益匪浅。除非您正在执行一个非常特定的批量操作,否则您一次需要打开100多个缓冲区的几率可能非常低。我习惯于使用
    :bd
    关闭打开的缓冲区,而不是
    :q
    ,因为如果我现在处理完文件,我希望它消失。我使用Unite.vim打开与CtrlP行为非常相似的文件。模糊文件匹配使得打开正确的文件非常容易。再加上一些类似grep的工具的自由使用,你可以找到哪个文件有你想要的东西,你可以很快找到正确的文件。这正是我使用标签的方式。我使用的是vim会话插件,更改的选项卡名称没有保存。当我恢复会话时,它就消失了。我喜欢你关于CtrlPTags的想法,我将尝试使用纯文件作为参考来实现它,NerdTree有一个书签功能,所以你可以
    :tag foo
    :tag bar<Tab>
    :ptag /baz<Tab>