如何在运行vim实例的不同tmux窗格之间复制和粘贴
示例:复制一个tmux窗格(通过vim),然后切换到另一个窗格(运行另一个vim实例)并使用vim paste命令进行粘贴。我知道这可以通过tmux(使用prefix+])完成,但如果我可以使用vim绑定进行复制和粘贴,那将非常方便,因为我只是在运行vim的不同窗格之间切换如何在运行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切换选项卡页面 或拆分窗口以编辑另
有什么想法吗?对不起,我想说服您使用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