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

时间:2012-06-14 23:51:44

标签: vim vi tmux

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

有什么想法吗?

8 个答案:

答案 0 :(得分:47)

抱歉,我试图说服你使用vim内置功能。<​​/ p>


要简化copy/paste,您可以在另一个标签页中打开文件:

:tabe /path/to/another/file

使用 gt gT 切换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

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

答案 1 :(得分: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>

答案 2 :(得分: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

因此,您可以使用prefix-<C-y>来激活复制模式,/search term作为示例移动到您想要的位置,v可视地选择,y可以移动到tmux。然后转到其他vim会话并进入插入模式。使用prefix-p粘贴tmux粘贴缓冲区中的内容。还有一些方法可以将tmux的粘贴缓冲区复制到系统剪贴板。

答案 3 :(得分:12)

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

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

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

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

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


<强> TL;博士

安装fakeclip插件,然后您可以使用 &amp; y yank 进入tmux的缓冲区, &amp; p 从tmux的缓冲区中删除。

答案 4 :(得分:3)

您可以使用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进入可视模式,然后选择要抽取的内容,并按ty将其复制到剪贴板。
2. ty可以与其他动作结合使用。例如,tyaw可用于将光标下的单词复制到剪贴板。 tyib复制括号内的内容。 tyi"将文本复制到双引号内等...

另请参阅How to make vim paste from (and copy to) system's clipboard?以获取进一步说明。

答案 5 :(得分:2)

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的一部分

答案 6 :(得分:1)

这在neovim中有效。

执行:checkhealth,您会发现以下内容:

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

如果没有,也许您需要将tmux升级到最新版本2.9。

然后在“〜/ config / nvim / init.vim”中添加以下代码

set clipboard+=unnamedplus

答案 7 :(得分:0)

control + insert =复制

shift +插入 =粘贴