有点不好意思问这个问题,不过这个话题好像特别难搜。
在 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,但这只会为我节省一个按键(听起来你会更频繁地使用它)。您可以使用其他一些方法,例如自己手动分页到特定文件,这样可以避免副作用。这听起来不像你想要的,但它是一种选择。还有一些插件可以或多或少地完成您正在寻找的工作,以及会话系统。它们不是您问题的直接答案,但它们可能会告知您最终的目标。
按照承诺:
linux 特定的脚本(我
$HOME/util
的在我的$PATH
):vim 绑定:
幂等 shell 别名脚本(我从 bash 和 zsh 获取此别名脚本):
当我开始使用带有 X 的实际 linux 时,我可能会更加充实 Linux 配置,这样我也可以利用它的粘贴缓冲区。它需要某种机制来创建
pbcopy
和pbpaste
程序类似的。该方法是程序级别的统一性之一,因此 Vim 可以像我现在可以从 shell 一样利用该功能。