是否有任何插件/方式来管理Vim中的多个项目?

时间:2012-01-06 10:33:03

标签: vim plugins project-management

我总是同时处理多个项目。我拥有的文件数量细分如下

  Project   |   Files
--------------------------
  Thesis         20
  Simulator      50
  Plots          30
  Graphs         30
  Website        500+

将所有这些文件放在一个窗口中很麻烦。有几个选项,我会讨论他们的画布,或者我敢说他们的跟腱。

  1. 拆分Windows 我可以将vim分成5个窗口,每个项目一个,但我不妨通过针孔编码。我实际上从来不是分裂窗口的粉丝,除了你经常比较和编辑两个相关文件的情况。此外,我发现两个维度的导航方式与水平方向一样无缝。

  2. 标签标签,或者更确切地说是视频标签,愚蠢地称为标签,似乎正好适用于此类问题,但它们并未对缓冲区提供限制。例如,如果我在Thesis标签中,我只想导航那20个缓冲区,而不是所有500个网站相关的缓冲区。当我将这些保存为会话时,如果我不小心切换到website标签中的Thesis缓冲区,退出,然后输入后我有两个website标签,则可能会导致问题。这还有问题,因为我为每个选项卡设置了本地目录(:lcd)。

  3. 终端选项卡使用终端选项卡可确保每个选项卡中的缓冲区保持独立。但是,每个vim会话都不能再共享信息。我不能将文本从一个终端拉到另一个终端(我想我可以进入+寄存器)。我也不能再在所有缓冲区上使用:buffdo。此外,我喜欢这样一个事实,即我可以将所有vim标签保存到单个会话中。

  4. 我知道这对公众讨论是一种诅咒,所以我会问存在是否有办法实现我正在努力的功能。

    编辑总结我需要的一个好方法是说我想要“子缓冲区”。

    编辑我想从vim的标签中获取的是能够更有效地使用它们的能力:视口。我希望能够为我的论文部分专门设置一个标签。在本节中,我将更改本地目录以反映它。此外,我想过滤掉该表中的缓冲区,使其只是所有缓冲区的子集。类似地,在模拟器选项卡中,我想将它专门用于我的模拟器文件。

    基本上我想要的是通过制表符来运行vim的多个独立会话的能力,但仍然有一些额外的额外津贴(即共享寄存器能够猛拉)

5 个答案:

答案 0 :(得分:6)

我找到了一种方法来做到这一点。 vim标签几乎没用。相反,我使用了Gnome终端标签。

  1. 全局寄存器要模拟使用全局寄存器,以便能够在vim的不同实例之间复制粘贴,通过添加行来“管道”系统剪贴板和未命名的寄存器{。1}}到你的.vimrc文件。这具有将所有yank / delete ...操作复制到系统剪贴板的效果。从那里,vim的其他实例将可以访问它。同样地,任何粘贴你在vim之外做的拷贝现在都会存储在未命名的寄存器中。

  2. Gnome终端选项卡快捷方式转到下一个和上一个标签的默认快捷方式是 Ctrl Pg Up Ctrl Pg Dn 。由于我使用 Shift k Shift j 作为我的下一个和上一个缓冲区,我映射 Ctrl < / kbd> k Ctrl j 转到我的下一个和上一个标签页。只需前往Gnome Terminal&gt;编辑&gt;键盘快捷键

  3. Gnome终端选项卡编写shell脚本以将每个vim实例作为新的终端选项卡启动。 See here for instructions

  4. Vim实例最后,对于每个vim实例,保存会话文件set clipboard=unnamedplus

  5. 它并不完美(例如,命名的寄存器不能在终端之间复制)但在我看来,它更能代表视口(这里称为“制表符”)应该做什么。


    编辑我实际上已经回到使用vim标签了。我学习了vim脚本,并将我的键映射为 Shift J Shift K 映射到上一个/下一个缓冲区 Ctrl J Ctrl K 映射到上一个/下一个选项卡。然后我下载了tabname脚本,这样我就可以设置有意义的选项卡名称,然后修改vim会话的制作以保存选项卡名称(参见here),然后从gVim切换回Vim,这样我就可以使用全屏模式。这是一段漫长而艰辛的旅程,但我认为这是值得的。

答案 1 :(得分:2)

我很长一段时间都有同样的问题,同时与几个项目合作。

为了解决这个挫败感,我使用了这个插件https://github.com/xolox/vim-session

vim-session使会话之间的导航更容易,并且在每个会话中我们都有一个项目。 使用了几周后,我感到很沮丧,因为每次需要切换时都需要保存,所有当前会话文件的更改都需要保存。

现在最好的解决方案是使用Vim模式Spacemacs。 我非常喜欢Vim提供的编辑精神和Spacemacs +更好的项目处理+更好的git集成的体验。

答案 2 :(得分:1)

我同意ehamberg。

Vim的缓冲区是全局的,因此任何分组或分割只会出现几分钟,并且在第一时间实际上会中断。

而是为每个项目使用一个Vim实例。如果你真的需要分享一些东西,你可以随时使用系统剪贴板。尝试set clipboard+=unnamedplus将Vim的默认寄存器与系统剪贴板同步。

但我想知道你的项目管理方式是否合理:

  • 在第3点,您编写了“我也无法再使用:buffdo在所有缓冲区上。”。为什么要使用适用于多个不同的所有打开缓冲区的命令项目

  • 您是否真的同时打开了500多个缓冲区?我知道Vim可能会处理它,但为什么要打开那么多缓冲区呢?我以网络开发为生,即使在“大型”项目中,我也很少在一天内处理十几个文件。

答案 3 :(得分:1)

BufExplorer插件可以按标签对缓冲区进行分组。 CtrlP插件可以重用另一个选项卡中的缓冲区。

答案 4 :(得分:1)

我使用多个vim实例同时处理不同的项目,但这并不令人满意。我最终在终端上打开了很多标签。

我一直在使用vim-rooter,这是一个简单的插件,它会自动将工作目录更改为打开的缓冲区的项目根目录,前提是项目根目录下有.git目录。它只会通过打开具有特定扩展名的文件来触发,但该列表可以自定义。适用于ctrlp和任何其他插件。