这可能吗?
从概念上讲,一个解决方案应该适用于许多可能的配置,从在 tmux 窗口的 Pane 中的不同虚拟终端中运行的两个 vim 实例,到在不同地理区域的不同机器上的不同终端中,一个或两个通过网络连接(换句话说,vim 由两个独立的 shell 进程托管,无论如何它们已经在 tmux 下)。
促使我思考这个问题的案例:
我有两个打开 vim 的 tmux 面板,我想使用 Vim yank/paste 来复制文件。
但它只有在我让它们都在同一个 Vim 实例中运行时才有效,所以我不得不:
这有点像 PITA,如果我有远见地切换到已经运行 vim 的适当终端来打开我的文件,那么这一切都是可以避免的,但工作流程和习惯的命运很少与本来方便的相匹配。
所以问题是,是否存在允许我跨独立运行的 vim 实例连接缓冲区的命令或直接构建(shell)脚本的可能性?我很难让谷歌充分回答这个问题。
在没有足够的答案的情况下(或者如果有合理的确定性确定 Vim 不具备在其实例之间完成缓冲区传输的功能),则上述方法 3 的良好实现(可绑定(bind)到键)是可以接受的。
同时,我将进一步自定义我的 vim 配置并强制自己使用尽可能少的 vim 实例。
最佳答案
不,Vim 不能在多个实例之间共享 session 。这就是它的设计方式,它不提供任何 session 共享工具。寄存器、动态映射/设置、命令历史记录等对于 Vim session 来说是本地的,您实际上无法对此做任何事情。
但是您的标题有点误导:您写了“缓冲区”,但看起来您只是在从一个 Vim 实例复制/粘贴(涉及“注册”,而不是“缓冲区”)到另一个之后。是对的吗?如果是这样,您为什么不简单地使用剪贴板支持为自己构建一个合适的版本呢?
跨实例复制/复制就像 "+y
一样简单在一个和 "+p
在另一个。
显然,如果您的 Vim 实例位于不同的系统上,这将不起作用。在这种情况下,"+y
在源 Vim 中和系统提供的粘贴到目标 Vim 中(可能带有 :set paste
)是最常见的解决方案。
如果您使用的是 Mac,请安装 MacVim 并移动随附的 mvim
路径中某处的 shell 脚本。您可以通过 mvim -v
在终端中使用 MacVim 可执行文件。 .
如果您在 Linux 上,请从包管理器中安装 vim-gnome 包。
如果您使用的是 Windows,请安装最新的“Vim without Cream”。
但对我来说,整个事情看起来像是一个 XY 问题。使用 Vim 的内置 :e[dit]
有效的命令可能是解决潜在问题的最佳解决方案:从许多不同的 shell 编辑许多文件。
关于unix - 在 vim 中跨 vim 实例移动缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444823/