您如何使用VIM中的大型项目

Blu*_*ile 6 vim nerdtree minibufexplorer ctrlp

我有大量的文件夹级别的项目.某些文件的名称相同,具体取决于文件夹名称,其功能各不相同.例如

/admin/action1.php
/action1.php
Run Code Online (Sandbox Code Playgroud)

第一个将引用管理任务,第二个将由用户访问.Vim很快就被标签和缓冲区弄得乱七八糟,而且很难移动.我正在使用的插件是:NERDTree CtrlP MiniBuffExplorer

我正在使用gVim for Windows和像YouCompleteMe这样的插件不是一个选项.

  • NerdTree - 在大项目的文件夹之间来回移动太笨拙了
  • CtrlP - 您必须始终键入名称才能知道您要查找的内容
  • MiniBuffExplorer - 有大量的文件,占用屏幕上的空间,无法找到任何东西
  • Vim-Session - 打开项目的保存选项卡/窗口

在此输入图像描述

正如你在图片上看到的那样,有许多标签可以记住女巫标签对应于女巫部分的代码.MiniBuffExplorer没有太多帮助.

所以我的问题是你将如何在VIM中使用大型项目​​来优化其功能或代码部分.有干净的方法吗?有没有办法分组缓冲区或标签,如:

Migrations
Seeds
Admin Controllers
Admin Views
Config
Run Code Online (Sandbox Code Playgroud)

rom*_*inl 6

我不认为这些工具有问题.你使用它们的方式更多.

  1. 标签没有被设计在所有的文件代理就像他们在其他编辑器.选项卡是工作区,允许您按照自己喜欢的方式组织窗口.他们是你的最佳人选

    Migrations
    Seeds
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    场景.

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

    :tabnew | lcd path/to/Migration
    
    Run Code Online (Sandbox Code Playgroud)

    从那里,你在该选项卡创建的窗口将继承Migration工作目录和每一个:e,:sp,:vs甚至:vim会从工作目录开始.

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

    :help seeting-tabline:help setting-guitablabel如果要更改选项卡的名称.

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

    fbruse
    
    Run Code Online (Sandbox Code Playgroud)

    会匹配:

    foo/bar/user
    
    Run Code Online (Sandbox Code Playgroud)

    但不是:

    baz/vroom/user
    
    Run Code Online (Sandbox Code Playgroud)

    使用上面的选项卡设置,CtrlP的建议应该限制在Migration目录中,使其更快.

    CtrlP并不完美:它在大型项目中可能很慢,因此请务必阅读整个文档.

  3. 一个"永远在线"打开的缓冲区的名单可能是一个好主意,当你有一个少数人,但像标签,它显然没有规模可言.当您真正想要切换缓冲区时显示列表要好得多:减少屏幕空间和脑细胞浪费!

  4. 但请注意,虽然可以定义窗口局部参数列表,但AFAIK无法定义窗口本地缓冲区列表.由于参数列表总是泄漏到缓冲区列表中,缓冲区列表是全局的,因此缓冲区命令将始终处理相同数量的缓冲区,无论您使用哪个选项卡.因此限制了选项卡的一般用途.

  5. 文件不是处理大型项目的非常好的比喻:当程序由函数,类,数组,变量......而不是文件组成时,必须在头脑中保留复杂的符号 - >文件映射.

    使用tags(:help tags)是跳转项目的一种非常方便的方法:

    :tag foo
    :tag bar<Tab>
    :ptag /baz<Tab>
    
    Run Code Online (Sandbox Code Playgroud)

    而且CtrlP让它:CtrlPTags变得非常有趣.

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