将文本从一个tmux窗格复制到另一个(使用vim)


132

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

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


2
您可以使用tmux,但是通常有更简单的方法。两个Vim实例是否都在同一台(本地)计算机上?通常,我只为此使用一个临时文件(即,在视觉上选择行:w /tmp/lines,然后:r /tmp/lines在其他情况下选择)。或者,如果Vim知道如何与系统剪贴板对话,则可以使用+*注册来避免使用临时文件。
克里斯·约翰森

Answers:


192

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

  1. Ctrl+ b[进入复制(?)模式。

  2. 移至文本的开头/结尾以突出显示。

  3. Ctrlspace

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

  4. 移动到文本的另一端进行复制。

  5. Alt+将w选定的文本复制到tmux剪贴板中。(在Mac上,请使用Esc+ w。)

  6. 将光标移动到相反的tmux窗格或完全不同的tmux窗口。将光标放在要粘贴刚复制的文本的位置。

  7. Ctrl+ b]从tmux剪贴板粘贴复制的文本。

tmux非常擅长将命令映射到自定义键盘快捷键。

Ctrl+ b?为一套键盘快捷键的完整列表。


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

11
如果使用screen快捷方式:(Ctrl + A [输入复制模式),Space(开始突出显示),Enter(结束突出显示),Ctrl + A ](粘贴)。
jfs

11
值得一提的是,“输入”对我有用,而alt + w则不行。
伊利亚·林恩

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

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

33

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

  1. Enter 复制所选文字

1
谢谢!我在Ubuntu Xenial上,使用byobu/ tmux并使用所有默认设置,此方法有效,Alt + w无效。
Andrea Zonca '16

1
这在tmux 2.0的OS X Yosemite上不起作用,alt + w,esc + w也不起作用:(
weberc2 '16

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

15

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

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

  • 复制:
    1. prefix+ [进入复印模式。
    2. 使用箭头键转到文本选择的开始/结束。
    3. ctrl+ space(如果已将ctrl+ 设置space为前缀,请按ctrl+ space+ space代替)
    4. 使用箭头键移至选择的另一侧。
    5. ctrl+ w
  • 糊:
    1. 在插入模式下按prefix+ ]

8

我正在使用ZOC终端 ssh客户端连接到Windows计算机上的CentOS服务器。这对我有用:

  • 进入复印模式:<prefix>+[
  • 开始复制: <Space>
  • 复制文字: <Enter>
  • 粘贴文字:<prefix>+]

2

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


1
要使用系统剪贴板,您必须使用"+2yy–将两行复制到X11剪贴板"+dd–将行剪切到X11剪贴板"+p–粘贴X11剪贴板
Patryk 2013年

使用这些命令之前是否需要输入任何内容?
托马斯·艾勒

@ThomasAhle,没有..其字面其次2ys(Y)。确保你是在正常模式下,如果你在正常模式下,你应该能够使用双引号(“),其次是加号(+)h,j,k,l到。移动我也有时会看到我的Ubuntu VM中,“+”寄存器消失,不知什么原因,要验证是否有+注册,您可以键入:reg并检查是否有串"+在第一列。
alpha_989

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

1

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

Tmux复制粘贴将起作用,但是存在一些缺点。

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

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

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

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


0

由于tmux快捷键序列有点长,我很难记住它,因此有几个供vim使用的选项

像上面的答案说,你可以使用"+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/how-can-i-copy-text-to-the-system-clipboard-from-vim

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.