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

如何在运行vim实例的不同tmux窗格之间复制和粘贴,vim,vi,tmux,Vim,Vi,Tmux,示例:复制一个tmux窗格(通过vim),然后切换到另一个窗格(运行另一个vim实例)并使用vim paste命令进行粘贴。我知道这可以通过tmux(使用prefix+])完成,但如果我可以使用vim绑定进行复制和粘贴,那将非常方便,因为我只是在运行vim的不同窗格之间切换 有什么想法吗?对不起,我想说服您使用vim的内置功能 要使复制/粘贴变得简单,您可以在另一个选项卡页中打开文件: :tabe /path/to/another/file 使用gt或gt切换选项卡页面 或拆分窗口以编辑另

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


有什么想法吗?

对不起,我想说服您使用vim的内置功能


要使复制/粘贴<代码>变得简单,您可以在另一个选项卡页中打开文件:

:tabe /path/to/another/file
使用gt或gt切换选项卡页面


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

:sp /path/to/another/file
使用Ctrl-ww切换窗口。
要垂直拆分窗口,请使用
:vsp文件


更新: 这是我的
.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

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

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

“复制到缓冲区
vmap:w!~/.vimbuffer
nmap:.w!~/.vimbuffer
“从缓冲区粘贴
map:r~/.vimbuffer

尽管我同意最好只使用一个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-
来激活复制模式,
/search term
作为一个示例,去您想去的地方,
v
来直观地选择,
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屏幕一起使用,但我个人还没有对此进行测试


tl;dr


安装插件,然后您可以使用“&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中的系统剪贴板

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


有关更多说明,请参见。

软呢帽24上的解决方案

您需要使用vimx而不是vim

输入您的.bashrc或.zshrc

alias vi='vimx'
alias vim='vimx'
然后,您可以轻松地在vims/tmux面板之间进行复制


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

,它在neovim中工作

执行
:checkhealth
,您将发现如下内容:

## Clipboard (optional)
  - OK: Clipboard tool found: tmux
如果没有,可能需要将tmux升级到最新版本2.9

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

set clipboard+=unnamedplus

控制+插入=复制


shift+insert=粘贴

或旋转缓冲区,kev复制到剪贴板怎么样?没有办法直接通过tmux执行吗?我在不同的目录中打开了不同的窗格,有时不方便:tabe或:sp并键入长路径。切换窗格和粘贴更容易。我将
前缀-[,]
保留为默认值。因为我已经把它们背下来了。您可以根据需要对它们进行配置。我认为有理由不只是使用单个vim实例。例如,您可能只希望在终端中打开三个窗格:一个半屏幕编辑会话、一个第四屏幕编辑会话和一个第四屏幕终端。我不确定用一个vim实例就可以实现这一点。对于较新版本的tmux,它是
bind key-T copy mode vi…
而不是
bind key-T vi copy…
tmux窗格是否在不同的主机上运行vim?如果不是,我只运行一个vim实例,并使用vim缓冲区打开2个文件并在缓冲区之间粘贴。这可能是由于您的vim版本没有使用剪贴板支持进行编译的问题-请参阅下面的@DmitrySemenov的答案为了不了解这些命令的任何人,您是否可以添加对每个命令的解释?这将使答案更有用@我很惊讶我的回答会被注意到!我现在展开我的答案。如果有歧义或语法错误(我不是以英语为母语的人),请告诉我:)确切地说,它没有复制到系统剪贴板。但是它满足了这个问题的要求:)为什么使用一个vim实例更好?当然,这与拥有不同工作空间的想法是不相容的?看起来不太好
## Clipboard (optional)
  - OK: Clipboard tool found: tmux
set clipboard+=unnamedplus