这可能吗?
从概念上讲,一个解决方案应该适用于许多可能的配置,从在 tmux 窗口的窗格中的不同虚拟终端中运行的两个 vim 实例,到在不同地理区域的不同机器上的不同终端中,一个或两个通过网络连接(换句话说,vim 由两个单独的 shell 进程托管,无论如何它们已经在 tmux 下)。
促使我思考这个问题的案例:
我有两个打开 vim 的 tmux 面板,我想使用 Vim yank/paste 来复制文件。
但它只有在我让它们都在同一个 Vim 实例中运行时才有效,所以我不得不:
- 使用 tmux 的复制/粘贴功能来获取内容(这有点乏味和挑剔),或者
- 使用终端(PuTTY,iTerm2)的复制/粘贴功能来获取内容(这同样乏味但不受网络延迟的影响,但是这只能在一定大小的文本有效负载下复制,此时此方法由于终端不知道文件当前不可见部分的内容,因此根本无法工作),或者
- 在拆分缓冲区或选项卡中的一个 Vim 实例中手动重新打开文件时会丢失 Vim 缓冲区历史记录/上下文和可能的 shell 历史记录/上下文,然后关闭另一个终端上下文(对于大型有效负载来说,比 1 更乏味,但更是如此小有效载荷)。
这有点像 PITA,如果我有远见地切换到已经运行 vim 的适当终端来打开我的文件,那么这一切都是可以避免的,但工作流程和习惯的命运很少与本来方便的相匹配。
所以问题是,是否存在允许我跨独立运行的 vim 实例加入缓冲区的命令或直接构建(shell)脚本的可能性?我很难让谷歌充分回答这个问题。
在没有足够的答案的情况下(或者如果有合理的确定性确定 Vim 不具备在其实例之间完成缓冲区传输的功能),则上述方法 3 的良好实现(可绑定到键)是可以接受的。
同时,我将进一步自定义我的 vim 配置并强迫自己使用尽可能少的 vim 实例。