我总是同时处理多个项目。我拥有的文件数量细分如下
Project | Files
--------------------------
Thesis 20
Simulator 50
Plots 30
Graphs 30
Website 500+
将所有这些文件放在一个窗口中很麻烦。有几个选项,我会讨论他们的画布,或者我敢说他们的跟腱。
拆分Windows 我可以将vim分成5个窗口,每个项目一个,但我不妨通过针孔编码。我实际上从来不是分裂窗口的粉丝,除了你经常比较和编辑两个相关文件的情况。此外,我发现两个维度的导航方式与水平方向一样无缝。
标签标签,或者更确切地说是视频标签,愚蠢地称为标签,似乎正好适用于此类问题,但它们并未对缓冲区提供限制。例如,如果我在Thesis
标签中,我只想导航那20个缓冲区,而不是所有500个网站相关的缓冲区。当我将这些保存为会话时,如果我不小心切换到website
标签中的Thesis
缓冲区,退出,然后输入后我有两个website
标签,则可能会导致问题。这还有问题,因为我为每个选项卡设置了本地目录(:lcd
)。
终端选项卡使用终端选项卡可确保每个选项卡中的缓冲区保持独立。但是,每个vim会话都不能再共享信息。我不能将文本从一个终端拉到另一个终端(我想我可以进入+
寄存器)。我也不能再在所有缓冲区上使用:buffdo
。此外,我喜欢这样一个事实,即我可以将所有vim标签保存到单个会话中。
我知道这对公众讨论是一种诅咒,所以我会问存在是否有办法实现我正在努力的功能。
编辑总结我需要的一个好方法是说我想要“子缓冲区”。
编辑我想从vim的标签中获取的是能够更有效地使用它们的能力:视口。我希望能够为我的论文部分专门设置一个标签。在本节中,我将更改本地目录以反映它。此外,我想过滤掉该表中的缓冲区,使其只是所有缓冲区的子集。类似地,在模拟器选项卡中,我想将它专门用于我的模拟器文件。
基本上我想要的是通过制表符来运行vim的多个独立会话的能力,但仍然有一些额外的额外津贴(即共享寄存器能够猛拉)
答案 0 :(得分:6)
我找到了一种方法来做到这一点。 vim标签几乎没用。相反,我使用了Gnome终端标签。
全局寄存器要模拟使用全局寄存器,以便能够在vim的不同实例之间复制粘贴,通过添加行来“管道”系统剪贴板和未命名的寄存器{。1}}到你的.vimrc文件。这具有将所有yank / delete ...操作复制到系统剪贴板的效果。从那里,vim的其他实例将可以访问它。同样地,任何粘贴你在vim之外做的拷贝现在都会存储在未命名的寄存器中。
Gnome终端选项卡快捷方式转到下一个和上一个标签的默认快捷方式是 Ctrl Pg Up 和 Ctrl Pg Dn 。由于我使用 Shift k 和 Shift j 作为我的下一个和上一个缓冲区,我映射 Ctrl < / kbd> k 和 Ctrl j 转到我的下一个和上一个标签页。只需前往Gnome Terminal&gt;编辑&gt;键盘快捷键
Gnome终端选项卡编写shell脚本以将每个vim实例作为新的终端选项卡启动。 See here for instructions
Vim实例最后,对于每个vim实例,保存会话文件set clipboard=unnamedplus
它并不完美(例如,命名的寄存器不能在终端之间复制)但在我看来,它更能代表视口(这里称为“制表符”)应该做什么。
编辑我实际上已经回到使用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和任何其他插件。