我在vim中打开了两个文件,每个文件都在一个tmux窗格中。我想从一个文件复制10行到另一个文件。

如何不使用鼠标的Copy-> Paste完成此操作?

评论

您可以使用tmux,但是通常有更简单的方法。两个Vim实例都在同一台(本地)计算机上吗?通常,我会为此使用一个临时文件(即在视觉上选择行:w / tmp / lines,然后选择:r / tmp / lines)。或者,如果您的Vim知道如何与系统剪贴板对话,则可以使用+或*寄存器来避免使用临时文件。

#1 楼

您必须使用tmux快捷方式。假定您的tmux命令快捷键是默认快捷键:Ctrl + b,然后:


移动到文本的开始/结束突出显示。

Ctrlspace

开始突出显示文本(在Arch Linux上)。当我从OSX和其他Linux上的源代码编译tmux时,仅Space可以正常工作。选定的文本会更改颜色,因此您将知道命令是否起作用。

移动到文本的另一端进行复制。
Alt + w将选定的文本复制到tmux剪贴板中。 (在Mac上,请使用Esc + w。)
将光标移动到相对的tmux窗格或完全不同的tmux窗口。将光标放在要粘贴刚复制的文本的位置。
tmux非常擅长将命令映射到自定义键盘快捷键。

看到Ctrl + b了吗?有关设置的键盘快捷键的完整列表。

评论


谢谢。只是一个附加节点:Alt + w在Mac上不起作用。默认情况下,Alt已映射到Esc。因此,它是Esc + w。

–卡兰
16-3-22在7:58



如果您使用屏幕快捷键:Ctrl + A [(输入复制模式),空格键(开始突出显示),Enter(结束突出显示),Ctrl + A](粘贴)。

– jfs
16年8月2日在9:58

值得一提的是,“输入”对我有用,而alt + w则不行。

–伊利亚·林恩(Elijah Lynn)
17年11月29日在1:02

如awhan.wordpress.com/2010/06/20/copy-paste-in-tmux中所述,如果您具有vi键绑定,则应将第5步替换为Enter键。

–熊雄
17/12/4在13:04

如果需要复制并粘贴到文本编辑器怎么办?由于某些原因,即使在选择文本后按“ Enter”键,似乎也没有选择该文本。

–?uday
17年5月5日在20:38

#2 楼

不幸的是,我还无法对Alex Leach的回答发表评论,因此,我将在此处为Mac OS X用户提供一个附录:



Enter复制所选内容文字


评论


谢谢!我在Ubuntu Xenial上,使用byobu / tmux并具有所有默认设置,此方法有效,Alt + w却不起作用。

– Andrea Zonca
16-3-21在18:16



这在tmux 2.0的OS X Yosemite上不起作用,alt + w也不行,esc + w也没有:(

–weberc2
16年4月6日在15:59

使用Zoc终端在Windows上也对我有效。

– jdhao
18-10-22在9:24

#3 楼

如果在macOS上使用vim和tmux(在macOS 10.12.2,tmux 2.3上测试):

(假设tmux的前缀键组合为prefix。默认情况下,前缀为ctrl + b。)


复制:


按前缀+ [进入复制模式。
使用箭头键转到文件的开始/结束。文本选择。
按ctrl +空格(如果已将ctrl +空格设置为前缀,请按ctrl +空格+空格)
使用箭头键移至选择的另一侧。
按ctrl + w。


粘贴:


在插入模式下按前缀+]。




评论


我在Mac OS上,在步骤3中,仅按空格键有效,在步骤5中,按回车键即可。

– zyy
20-5-6在17:05



#4 楼

我正在使用ZOC终端ssh客户端连接到Windows计算机上的CentOS服务器。这是适合我的方法:


进入复制模式:<prefix> + [

开始复制:<Space>

复制文本:<Enter>

粘贴文本:<prefix> + ]



#5 楼

您可以将系统剪贴板使用“ * y”和“ * p”代替普通的y和p。

评论


要使用系统剪贴板,您必须使用“ + 2yy –将两行复制到X11剪贴板” + dd –将行剪切到X11剪贴板” + p –粘贴X11剪贴板

–Patryk
2013年1月9日12:59

使用这些命令之前是否需要输入任何内容?

–托马斯·阿勒
18 Mar 9 '18 at 12:46

@ThomasAhle,不。其字面上是双引号(“),其后是加号(+),然后是2ys(y)。请确保您处于普通模式。如果您处于普通模式,则应该可以使用h ,j,k,l移动。我也有时在我的ubuntu VM上看到“ +”寄存器消失,原因不明。要验证是否有+寄存器,可以键入:reg并检查是否有字符串第一栏中的“ +”。

–alpha_989
18年4月12日在15:05

是的,就是这样,这就是答案。比其他建议的简单得多(使用tmux复制/粘贴),并且不会弄乱行号。如果将标准y和p重新映射为“ + y和” + p,这会引起任何问题吗?

– ryan
19年8月23日在16:08

#6 楼

如果您打开了vim,最好使用vim复制粘贴来复制文本。

Tmux复制粘贴将起作用,但是有几个缺点。

首先,在复制多行文本时,您将不得不选择多行。 Tmux复制粘贴通常不了解vim具有行号或vim装订线中有标记(例如相对编号/绝对编号)。结果,它也会复制那些。

其次,我发现如果文本具有特定于语言的格式,而您直接尝试使用tmux复制粘贴到vim,则会破坏格式。通过使用set paste!可以避免这种情况。但是,这需要更多的工作。

使用"+y复制并粘贴"+p

Vim本机提供了一种使用"+y"*y在vim缓冲区和系统剪贴板之间复制粘贴的方法。然后使用"+p"*p粘贴。这将避免在相对于vim不相关的装订线或其他随机标记中复制相对数字

评论


我不明白我尝试使用“ + y”在vim中进行复制,但是当切换到具有普通外壳的窗格时,尝试使用“ + p”进行粘贴将无法工作,因为它将开始输入“ ... etc”。我在做什么错?

–SFbay007
20-4-12的3:12

#7 楼

我选择使用Ctrl+Alt+CCtrl+Alt+V在tmux中复制和粘贴。 Tmux的copy-mode-vi可以使用vim键hjkl^$...在tmux窗格中导航,矩形模式对于复制表列很有用,或者当窗格中还有其他拆分时,请使用r激活它。

这是我在~/.tmux.conf中设置的方式:

bind P paste-buffer
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
# Also copy to system clipboard
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -sel clip -i'
# map copy mode to ctrl+alt+c
bind-key -n 'C-M-c' copy-mode
# map paste buffer to ctrl+alt+v
bind-key -n 'C-M-v' paste-buffer


我是通过修改此博客文章来创建此设置的。

如果2个tmux窗格(vim实例或其他任何东西)位于不同的机器(一台远程,一个本地)上,则此复制粘贴解决方案也将起作用。

评论


正是我所需要的!谢谢!

– shintocv
20-05-22在7:12

#8 楼

由于tmux快捷键序列有点长,我很难记住

上面的回答说可以分别使用"+y"*y复制,然后分别使用"+p"*p复制糊。如果您想让vim默认使用剪贴板,那么您就可以直接使用y/p

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +


剪贴板命令的来源:https://vi.stackexchange.com / questions / 84 /如何将文本从vim复制到系统剪贴板

#9 楼

我自己遇到了问题,并在此处上传了.vimrc和.tmux.conf文件:
tvp-repl

您可以将tmux配置为


将vim窗格选择复制到剪贴板,
阅读剪贴板并将其粘贴到另一个窗格,然后
跳回到原始窗格。

所有需要设置vim复制到剪贴板[可视模式Ctrl + c]:

set clipboard=unnamedplus
vnoremap <C-c> "+y


然后使用tmux命令运行从vim复制并将缓冲区粘贴到另一个窗格[Ctrl + b Enter]:

bind-key Enter run "tmux send-keys -t 0 C-c" \; 
run "tmux select-pane -t 1" \; 
run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" \; 
run "tmux send-keys -t 1 Enter" \; 
run "tmux select-pane -t 0"


注意:
a)该脚本需要xclip才能与剪贴板交互。
b)假设vim是在窗格0中;目标窗格是窗格1。