问这个问题我有点不好意思,不过这个话题好像特别难找。
在 Linux 系统上,我几乎只使用终端,并通过终端模拟器使用 SSH 访问系统(最常来自 macOS)。
一般来说,当涉及终端多路复用器时,复制和粘贴代码片段和日志中的错误等是跨系统遍历缓冲区的棘手问题,这通常是通过终端仿真器自己的选择功能进行复制和使用客户端操作系统的粘贴缓冲区。这个问题与此无关。
我的问题是当我在单个 Linux 服务器上打开大量 vim 实例时。我处于运行级别 3 并且不运行 GUI。我没有可用的xclip,主要是没有安装X。
当我在这个工作流程中时,我发现需要猛拉文件的一部分并将它们粘贴到同一个删除框上的其他 vim 中。Vim 的内置缓冲区+和*复制/粘贴缓冲区不起作用。(vim 中的剪贴板编译选项在这些系统上未启用)
但是,有效的是,如果我在一个 vim 实例中拉取一些文本,退出它,然后打开另一个 vim 实例,然后粘贴就可以了。所以关于退出 vim 的一些东西会在某个地方保留缓冲区。我认为,如果我可以让这个系统实时运行而不必关闭 vim,那就太好了。我想避免必须在 yanks 和 deletes 上分层绑定来实现我自己的 yank/paste 实现。
这是.viminfo文件 ( :h viminfo)。
当您退出 vim 时,它会写出当前状态,例如命令历史记录和该文件的寄存器值。当它启动时,它读取文件并恢复它描述的任何状态。这意味着连续的vim 会话(似乎)共享某些状态,但并发会话不共享。
可以用:rv/:rviminfo命令强行重新读取 viminfo 文件,用:wv. 所以y :wv在一个编辑器中,在另一个编辑器:rv p中可以工作,但会有副作用:你所有的寄存器值和命令历史可能会被重置,还有很多其他的事情,这对你来说可能重要也可能无关紧要。
这也可能是一个优势:您可以使用完整范围的寄存器在编辑器之间获得多个复制缓冲区,这是系统剪贴板不提供的。另一方面,除非您重新绑定y以自动执行此操作,否则它并不是非常方便,并且p您可能不想每次都读取文件。我已经读/写 viminfo 绑定到领导命令,但这只会为我节省一个按键(听起来你会更频繁地使用它)。
您还可以使用其他一些方法,例如自己手动分页到特定文件,这样可以避免副作用。这听起来不像你想要的,但这是一种选择。还有一些插件可以或多或少地满足您的需求,还有会话系统。它们不是您问题的直接答案,但它们可能会告诉您最终的目标。