Unix 在vim实例之间移动vim中的缓冲区

Unix 在vim实例之间移动vim中的缓冲区,unix,vim,Unix,Vim,这可能吗 从概念上讲,解决方案应适用于许多可能的配置,从在tmux窗口窗格中的独立虚拟终端中运行的两个vim实例,到位于独立地理区域中独立机器上的独立终端中,一个或两个通过网络连接(换句话说,VIM由两个独立的shell进程托管,无论如何,它们已经在tmux下了) 促使我思考这个问题的案例: 我有两个tmux面板,都打开了vim,我想使用vim yank/paste跨文件复制。 但只有当我让它们都在同一个Vim实例中运行时,它才起作用,因此我不得不: 使用tmux的复制/粘贴功能完成内容(这有点

这可能吗

从概念上讲,解决方案应适用于许多可能的配置,从在tmux窗口窗格中的独立虚拟终端中运行的两个vim实例,到位于独立地理区域中独立机器上的独立终端中,一个或两个通过网络连接(换句话说,VIM由两个独立的shell进程托管,无论如何,它们已经在tmux下了)

促使我思考这个问题的案例:

我有两个tmux面板,都打开了vim,我想使用vim yank/paste跨文件复制。

但只有当我让它们都在同一个Vim实例中运行时,它才起作用,因此我不得不:

  • 使用tmux的复制/粘贴功能完成内容(这有点繁琐和挑剔),或者
  • 使用终端(PuTTY,iTerm2)的复制/粘贴功能来覆盖内容(这同样繁琐,但不受网络延迟的影响,但是这只适用于复制特定大小的文本有效负载,此时由于终端不知道文件当前不可见部分的内容,此方法将根本不起作用),或者
  • 在拆分缓冲区或选项卡中的一个Vim实例中手动重新打开文件,然后关闭另一个终端上下文时,会丢失Vim缓冲区历史记录/上下文,可能还会丢失外壳历史记录/上下文(对于大有效负载,要比1简单得多,但对于小有效负载,则更麻烦)
  • 这有点像一个PITA,如果我有远见切换到一个已经运行vim的合适终端来打开我的文件,那么这一切都可以避免,但是工作流和习惯的命运很少与方便的命运相匹配

    所以问题是,是否存在一个命令或一个straighforwardly构造(shell)脚本的可能性,允许我跨独立运行的vim实例加入缓冲区?我很难让Google充分回答这个问题

    在没有充分答案的情况下(或者如果合理确定Vim不具备在其实例之间完成缓冲区传输的功能),可以接受上述方法3的良好实现(可绑定到密钥)


    同时,我将继续进一步定制我的vim配置,并强迫自己使用尽可能少的vim实例。

    不,vim不能在多个实例之间共享会话。这就是它的设计方式,它不提供任何会话共享功能。寄存器、动态映射/设置、命令历史记录等都是Vi的本地内容m会话,而实际上你对此无能为力


    但是你的标题有点误导:你写了“buffer”,但看起来你只是在从一个Vim实例复制/粘贴(涉及“register”,而不是“buffers”)到另一个Vim实例之后才写的。是这样吗?如果是这样的话,为什么你不简单地用剪贴板支持来获得一个正确的构建呢

    在一个实例中复制/拖动实例就像在另一个实例中复制
    “+y
    一样简单

    显然,如果您的Vim实例位于不同的系统上,这将不起作用。在这种情况下,源Vim中的
    “+y
    ,以及目标Vim中系统提供的粘贴(可能带有
    :set paste
    )是最常见的解决方案


    如果您在Mac上,请安装MacVim并将附带的
    mvim
    shell脚本移动到路径中的某个位置。您可以将终端中的MacVim可执行文件与
    mvim-v
    一起使用

    如果您在Linux上,请从包管理器安装vim gnome包

    如果您使用的是Windows,请安装最新的“Vim With Cream”



    但对我来说,整个事情看起来像一个XY问题。使用Vim的内置
    :e[dit]
    有效地使用命令可能是解决您潜在问题的最佳解决方案:从许多不同的shell编辑许多文件。

    将缓冲区写入文件,从文件插入?可以让vim使用操作系统剪贴板,但我从未成功过。删除vim搜索历史记录、vim撤消历史记录、vim命令历史记录等等(尽管看起来这是不可避免的)也可以将一个键绑定到一个函数,该函数在后台模拟中的某些文件上的缓冲区,例如
    /tmp
    ,而无需更改任何其他内容。我只使用本机操作系统GUI(无论是X还是aqua)或其他任何东西,用鼠标剪切从终端窗口选择的粘贴文本。不确定您希望vim如何做到这一点een会话。特别是当它们在不同的系统上时