【问题标题】:Is there any plugin/way to manage multiple projects in Vim? [closed]是否有任何插件/方法可以在 Vim 中管理多个项目? [关闭]
【发布时间】:2012-02-04 02:25:49
【问题描述】:

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

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

将所有这些文件放在一个窗口中很麻烦。有几种选择,我将讨论它们的缺点,或者我敢说它们的致命弱点。

  1. 拆分窗口 我可以将 vim 拆分为 5 个窗口,每个项目一个,但我还不如通过针孔进行编码。实际上,我从来都不喜欢拆分窗口,除非您经常比较和编辑两个相关文件。此外,我发现二维导航不像水平方向那样无缝。

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

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

我知道 SO 是公开讨论的禁忌,所以我会问是否有存在一种方法来实现我正在努力实现的功能。

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

编辑 我想从 vim 中的选项卡中得到的是能够更有效地使用它们,因为它们实际上是:视口。我希望能够有一个专门用于我的论文部分的选项卡。在本节中,我将更改本地目录以反映它。此外,我想过滤掉该表中的缓冲区,使其成为所有缓冲区的子集。同样,在 Simulator 选项卡中,我想将它专门用于我的 Simulator 文件。

基本上我想要的是能够通过选项卡运行多个独立的 vim 会话,但仍然具有一些额外的好处(即共享寄存器以便能够抽出)

【问题讨论】:

  • 不是一个真正的“Vim 解决方案”,但你为什么不为每个项目使用一个工作区和一个 vim 实例呢?要在项目之间切换,您只需切换到另一个工作区,在该工作区中,所有内容都按照您希望该项目的方式进行设置。
  • 很多时候我从绘图中获取结果并将它们放入论文中,然后我从论文中获取公式并将它们放入模拟器中。我想要的是子缓冲区。
  • 我不会称 3 个人为“很多人”。我实际上对您的工作流程一无所知。为什么你总是cd?你为什么不给你的*.py 脚本加上别名或者将它们的目录添加到你的$PATH 中呢?或者也许在一个 Vim 窗口中执行所有操作并将您的脚本映射到 <F7> 或其他什么?
  • 您的工作流程与 Vim 有什么关系?甚至是项目管理?我真的很困惑。
  • 请回答那些试图帮助您的人的问题,以便他们能够以更有效的方式帮助您。您编辑了您的问题以进行澄清,但您的编辑不涉及 Vim。所以请更准确地解释你想用标签做什么以及所有终端的东西是什么。

标签: vim plugins project-management


【解决方案1】:

我很长一段时间都遇到同样的问题,同时处理多个项目。

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

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

现在对我来说最好的解决方案是使用 Vim 模式的Spacemacs。 我真的很喜欢 Vim 提供的编辑精神,而且 Spacemacs 的体验是一样的 + 更好的项目处理 + 更好的 git 集成。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      【解决方案4】:

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

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

      2. Gnome 终端选项卡快捷方式 转到下一个和上一个选项卡的默认快捷方式是 Ctrl Pg Up Ctrl Pg Dn。由于我使用 Shift kShift j 作为下一个和上一个缓冲区,因此我映射了 Ctrl kCtrl j 转到我的下一个和上一个选项卡。只需转到 Gnome 终端 > 编辑 > 键盘快捷键

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

      4. Vim 实例最后,为每个 vim 实例保存一个会话文件:mksession fileName

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


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

      【讨论】:

        【解决方案5】:

        我同意 ehamberg 的观点。

        Vim 的缓冲区是全局的,因此任何分组或拆分似乎只会工作几分钟,实际上在第一次时就会中断。

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

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

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

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

        【讨论】:

        • wrt bullet 1:它们处于灰色区域,它们有些相关:我的论文生成了绘制的结果,然后我从这些图中获取一些测试代码并重新插入我的论文,同样,我在模拟器中使用论文中的代码
        • wrt bullet 2:我认为我的计算机可以处理它 =P 但我会重新考虑我的方法。
        • 我想要的是在每个选项卡(网站选项卡除外)中能够执行 :bn(映射到 Shift + J)循环浏览文件,而不是循环浏览 600 多个文件
        • 我更新了这个问题,深入解释了我为什么这样做。
        猜你喜欢
        • 1970-01-01
        • 2010-11-10
        • 2021-04-24
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多