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

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

有任何想法吗?

对不起,我试图说服你使用vim的内置function。


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

 :tabe /path/to/another/file 

使用gtgT切换Tabpages。


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

 :sp /path/to/another/file 

使用Ctrl-w w切换Windows。
要垂直分割窗口,请使用: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 

我只有在需要复制terminal输出时才使用它们。

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

 " copy to buffer vmap <Cc> :w! ~/.vimbuffer<CR> nmap <Cc> :.w! ~/.vimbuffer<CR> " paste from buffer map <Cp> :r ~/.vimbuffer<CR> 

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

  setw -g mode-keys vi unbind [ unbind p bind Cy 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-<Cy>来激活复制模式, /search term作为例子去你想要的地方, v可以直观地select, y被放入到tmux中。 然后转到其他vim会话并进入插入模式。 使用prefix-p粘贴tmux粘贴缓冲区中的内容。 还有一些方法可以将tmux的粘贴缓冲区复制到系统剪贴板中。

目前,我正在使用运行Windows的笔记本电脑,但是我在运行Linux的服务器上进行了所有的开发工作,所以我最终一整天都在使用PuTTY进行tmux会话。

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

我认为应该有一种方法来使用vim中的tmux复制/粘贴缓冲区来代替系统键盘,而且肯定有人已经为此写了一个插件 。

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

插件文档说fakeclip也应该与gnu屏幕一起工作,但我没有亲自testing过。


TL;博士

安装fakeclip插件,然后你可以使用 y来插入tmux的缓冲区,而 p从tmux的缓冲区放置

您可以使用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中的系统的clipborad。

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

另请参见如何从(并复制到)系统的剪贴板粘贴vim? 作进一步解释。

解决scheme在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的一部分