示例:在一个tmux窗格中复制(通过vim),然后切换到另一窗格(运行另一个vim实例)并使用vim paste命令粘贴。我知道这可以通过tmux(使用prefix +]来完成,但是如果我可以使用vim绑定进行复制和粘贴,那将非常方便,因为我只是在运行vim的不同窗格之间切换。
有任何想法吗?
示例:在一个tmux窗格中复制(通过vim),然后切换到另一窗格(运行另一个vim实例)并使用vim paste命令粘贴。我知道这可以通过tmux(使用prefix +]来完成,但是如果我可以使用vim绑定进行复制和粘贴,那将非常方便,因为我只是在运行vim的不同窗格之间切换。
有任何想法吗?
Answers:
抱歉,我试图说服您使用vim内置功能。
为了copy/paste
简便起见,您可以在其他标签页中打开文件:
:tabe /path/to/another/file
使用gt或gT切换标签页。
或拆分窗口以编辑另一个文件:
: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
仅在需要复制终端输出时才使用它们。
prefix-[,]
默认设置。因为我已经学会了它们。您可以将它们配置为所需的内容。
bind-key -T copy-mode-vi ...
代替了bind-key -t vi-copy ...
我已经使用了这种方便的绑定多年:)
" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
我目前只能在运行Windows的笔记本电脑上工作,但我的所有开发工作都是在运行Linux的服务器上进行的,因此最终我整天都在PuTTY的tmux会话中工作。
我想在tmux会话中的不同窗口中运行的vim实例之间复制文本。我尝试使用*
寄存器复制到系统剪贴板,但是由于我是通过PuTTY连接的,所以我没有X会话,因此即使我启动gVim而不是vim也没有系统剪贴板。(我可能已经能够使用x转发或某种方法来解决此问题,但是我不想在Windows上安装x服务器。)
我认为应该有一种方法可以使用vim的tmux复制/粘贴缓冲区代替系统键盘,并确保有足够的人为此编写了插件。
安装fakeclip会添加一个新寄存器,&
该寄存器映射到tmux的粘贴缓冲区。由于我所有的vim实例都在同一个tmux会话中,因此在它们之间拉动/放置文本变得非常简单。
插件文档说,fakeclip也应该可以在gnu屏幕上使用,但是我还没有亲自测试过。
tl; dr
安装fakeclip插件,然后就可以使用"&y,以抽出到TMUX的缓冲区,"&p以把从TMUX的缓冲区。
尽管我同意最好只使用一个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的粘贴缓冲区复制到系统剪贴板。
您可以使用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.您可以按v
或V
或ctrl-v
进入可视模式,然后选择要拉动的内容,然后按ty
将其复制到剪贴板。
2.ty
可以与其他动作结合。例如,tyaw
可用于将光标下的单词复制到剪贴板。tyib
复制括号中的内容。tyi"
复制双引号内的文本,等等。
另请参阅如何使Vim从系统剪贴板粘贴(并复制到系统)?进一步解释。
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的一部分
控制+插入=复制
shift + insert =粘贴