【问题标题】:How to copy and paste between different tmux panes running vim instances如何在运行 vim 实例的不同 tmux 窗格之间复制和粘贴
【发布时间】:2012-06-18 01:35:00
【问题描述】:

示例:复制到一个 tmux 窗格(通过 vim),然后切换到另一个窗格(运行另一个 vim 实例)并使用 vim paste 命令粘贴。我知道这可以通过 tmux(使用 prefix+])来完成,但如果我可以使用 vim 绑定复制和粘贴,那将非常方便,因为我只是在运行 vim 的不同窗格之间切换。

有什么想法吗?

【问题讨论】:

  • tmux 窗格是否在不同的主机上运行 vim?如果不是,我只运行一个 vim 实例并使用 vim 缓冲区打开 2 个文件并在缓冲区之间粘贴。
  • 这可能是您的 vim 版本没有在剪贴板支持下编译的问题 - 请参阅下面的 @DmitrySemenov 的答案

标签: vim vi tmux


【解决方案1】:

抱歉,我试图说服你使用 vim 的内置功能。


为了方便copy/paste,您可以在另一个标签页中打开文件:

:tabe /path/to/another/file

使用 gtgT 切换标签页。


或者拆分窗口编辑另一个文件:

:sp /path/to/another/file

使用 Ctrl-ww 切换窗口。
要垂直拆分窗口,请使用:vsp file


更新:

这是我的.tmux.conf 文件:

# vim
setw -g mode-keys vi
bind [ copy-mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy V rectangle-toggle
bind ] paste-buffer

# buffer
bind Space choose-buffer

我只在需要复制终端输出时使用它们。

【讨论】:

  • 或者旋转缓冲区,复制到剪贴板怎么样?
  • 有没有办法直接通过tmux做呢?我在不同的目录中打开了不同的窗格,有时不方便使用 :tabe 或 :sp 并输入长路径。切换窗格和粘贴要容易得多。
  • 我将prefix-[,] 保留为默认值。因为我已经背诵了它们。您可以将它们配置为您想要的。
  • 我认为有理由不只使用单个 vim 实例。例如,您可能只想在终端中打开三个窗格:一个半屏编辑会话、一个第四屏编辑会话和一个第四屏终端。我不确定这可以通过一个 vim 实例来完成。
  • 对于较新版本的 tmux,它是 bind-key -T copy-mode-vi ... 而不是 bind-key -t vi-copy ...
【解决方案2】:

我已经使用这个方便的绑定好几年了 :)

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>

【讨论】:

  • 没错,它没有复制到系统剪贴板。但它满足了这个问题的要求:)
【解决方案3】:

我目前在工作时被一台运行 Windows 的笔记本电脑困住了,但我在运行 Linux 的服务器上完成了所有开发工作,所以我最终整天在 PuTTY 上的 tmux 会话中工作。

我想在我的 tmux 会话中在不同窗口中运行的 vim 实例之间复制文本。我尝试使用* 寄存器复制到系统剪贴板,但由于我是通过 PuTTY 连接的,所以我没有 X 会话,所以 is 没有系统剪贴板,即使我启动gVim 代替 vim。 (我可能已经能够使用 x-forwarding 或其他东西来解决这个问题,但我不想在 Windows 上安装 x-server。)

我认为应该有一种方法可以使用 vim 中的 tmux 复制/粘贴缓冲区来代替系统键盘,果然有人写了a plugin for that

安装 fakeclip 会添加一个新寄存器 &amp;,它映射到 tmux 的粘贴缓冲区。由于我所有的 vim 实例都在同一个 tmux 会话中,这使得在它们之间拉出/放置文本变得非常简单。

插件文档说 fakeclip 也应该适用于 gnu screen,但我没有亲自测试过。


tl;dr

安装fakeclip插件,然后就可以使用"&yyank进入tmux的缓冲区,以及 "&pput 从 tmux 的缓冲区。

【讨论】:

    【解决方案4】:

    虽然我同意只使用一个 vim 实例会更好,但您也可以单独使用 tmux。它有一个内置的复制模式。我的 tmux.conf 设置如下:

      setw -g mode-keys vi
      unbind [
      unbind p
      bind C-y copy-mode
      bind p paste-buffer
      bind -t vi-copy v begin-selection
      bind -t vi-copy y copy-selection
      bind -t vi-copy Escape cancel
    

    所以你可以使用prefix-&lt;C-y&gt; 激活复制模式,/search term 作为示例去你想要的地方,v 视觉选择,y 拉入 tmux。然后转到其他 vim 会话并进入插入模式。使用 prefix-p 粘贴 tmux 粘贴缓冲区中的内容。还有一些方法可以将 tmux 的粘贴缓冲区复制到系统剪贴板。

    【讨论】:

    • 为什么使用一个 vim 实例更好?这肯定与拥有不同工作空间的想法不相容吗?当我有 5 个不相关的大型项目要处理时,这似乎不太实用。
    • 主要是意见和/或 CPU 效率问题。这是一段视频:vimeo.com/4446112
    【解决方案5】:

    您可以使用 vim 绑定将内容复制到剪贴板,然后切换到窗格并粘贴它。 以下键绑定可能会很方便。

    noremap ty "+y
    noremap tY "+Y  // copy a whole line to the clipboard
    noremap tp "+p  // put the text from clipboard after the cursor 
    noremap tP "+P  // put the text from clipboard before the cursor 
    

    "+ 寄存器用于在 Vim 中访问系统的剪贴板。

    一些有用的提示:
    1.您可以按vVctrl-v进入可视模式,然后选择要拉取的内容,然后按ty将其复制到剪贴板。
    2.ty可以与其他动作组合。例如,tyaw 可用于将光标下的单词复制到剪贴板。 tyib 复制括号内的内容。 tyi"复制双引号内的文字等...

    更多解释请参见How to make vim paste from (and copy to) system's clipboard?

    【讨论】:

    • 为了任何可能不知道这些命令的人,您能否添加每个命令的解释?这将使答案更有用!
    • @PetahChristian 我很惊讶我的回答应该引起注意!我现在扩展我的答案。如果有歧义或语法错误(我不是以英语为母语的人),请告诉我:)
    【解决方案6】:

    这适用于 neovim。

    执行:checkhealth,你会发现类似这样的东西:

    ## Clipboard (optional)
      - OK: Clipboard tool found: tmux
    

    如果没有,可能需要将 tmux 升级到最新版本 2.9。

    然后在'~/config/nvim/init.vim'中加入如下代码

    set clipboard+=unnamedplus
    

    【讨论】:

      【解决方案7】:

      Fedora24 上的解决方案

      你需要使用 vimx 而不是 vim

      放入你的 .bashrc 或 .zshrc

      alias vi='vimx'
      alias vim='vimx'
      

      然后您可以轻松地在 vims/tmux 面板之间复制


      $ vim --version | grep clipboard
      -clipboard       +insert_expand   +path_extra      -toolbar
      +eval            +mouse_dec       +statusline      -xterm_clipboard
      
      $ vimx --version | grep clipboard
      +clipboard       +insert_expand   +path_extra      +toolbar
      +eval            +mouse_dec       +statusline      +xterm_clipboard
      

      vimx 是你很可能已经安装的 vim-enhanced-2:7.4.1868-1.fc24.x86_64 的一部分

      【讨论】:

        【解决方案8】:

        控制+插入 = 复制

        shift+insert = 粘贴

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-09
          相关资源
          最近更新 更多