如何在运行vim实例的不同tmux窗格之间进行复制和粘贴

gyl*_*laz 66 vi vim tmux

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

有任何想法吗?

kev*_*kev 47

对不起,我试图说服你使用vim内置功能.


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

:tabe /path/to/another/file
Run Code Online (Sandbox Code Playgroud)

使用gtgT切换Tabpages.


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

:sp /path/to/another/file
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

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

  • 使用寄存器`*`和`+`来操作系统剪贴板. (7认同)
  • 有没有办法直接通过tmux来做?我在不同的目录中打开不同的窗格,有时使用 :tabe 或 :sp 并输入长路径并不方便。切换窗格和粘贴要容易得多。 (2认同)
  • 对于新版本的tmux,它是`bind-key -T copy-mode-vi ...`而不是`bind-key -t vi-copy ...` (2认同)

che*_*aie 20

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

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
Run Code Online (Sandbox Code Playgroud)

  • 确切地说,它没有复制到系统剪贴板.但它满足了这个问题的要求然后:) (2认同)

Con*_*ner 12

虽然我同意只使用一个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
Run Code Online (Sandbox Code Playgroud)

所以你可以prefix-<C-y>用来激活复制模式,/search term作为一个例子去你想去的地方,v直观地选择,y进入tmux.然后转到其他vim会话并进入插入模式.使用prefix-p粘贴有什么在TMUX粘贴缓冲区.还有一些方法可以将tmux的粘贴缓冲区复制到系统剪贴板中.

  • 为什么使用一个 vim 实例更好?这肯定与拥有不同工作空间的想法不相容吗?当我有 5 个大型、不相关的项目需要处理时,这似乎不太实用。 (2认同)

Dao*_*Wen 12

我目前在工作时遇到了运行Windows的笔记本电脑,但是我在运行Linux的服务器上进行了所有开发,所以我最终在PuTTY上的tmux会话中工作了一整天.

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

我认为应该有一种方法可以使用vim中的tmux复制/粘贴缓冲区代替系统键盘,当然有人为此编写了一个插件.

安装fakeclip会添加一个新的寄存器,&映射到tmux的粘贴缓冲区.由于我的所有vim实例都在同一个tmux会话中,因此在它们之间抽取/放置文本非常简单.

插件文档说假冒伪劣也应该与gnu屏幕一起使用,但我没有亲自测试过.


TL;博士

安装fakeclip插件,然后就可以使用"&y猛拉到TMUX的缓冲区,"&p从TMUX的缓冲区.