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

Pat*_*ryk 182 vim tmux copy-paste

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

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

Ale*_*ach 272

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

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

  2. 移动到要突出显示的文本的开头/结尾。

  3. Ctrl+Space

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

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

  2. Alt+ 将w选定的文本复制到tmux剪贴板。
    在 Mac 上,使用Esc+ wEnter如果以上都不起作用,请尝试。

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

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

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

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

  • 值得注意的是,“输入”对我有用,而 alt+w 则不然。 (22认同)
  • 如果您使用 `screen` 快捷键:`Ctrl + A [`(进入复制模式)、`Space`(开始突出显示)、`Enter`(结束突出显示)、`Ctrl + A ]`(粘贴)。 (18认同)
  • 如 https://awhan.wordpress.com/2010/06/20/copy-paste-in-tmux/ 中所述,如果您有 vi 键绑定,则应将第 5 步替换为“Enter”键。 (9认同)
  • 如果我需要复制并粘贴到文本编辑器怎么办?出于某种原因,即使在选择文本后按“输入”,它似乎也没有选择所选文本。 (5认同)
  • 谢谢。只是一个旁节点:Alt + w 在 Mac 上不起作用。默认情况下,Alt 映射到 Esc。因此它是 Esc+w。 (4认同)

小智 47

不幸的是,我还不能对 Alex Leach 的回答添加评论,所以我将在此处为 Mac OS X 用户添加一个附录:

  1. Enter 复制选定的文本

  • 谢谢!我在 Ubuntu Xenial 上,使用带有所有默认设置的 `byobu`/`tmux`,这有效,Alt + w 没有。 (2认同)

小智 24

如果您在 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+ ]


jdh*_*hao 18

我正在使用ZOC 终端ssh 客户端连接到 Windows 机器上的 CentOS 服务器。以下是对我有用的方法:

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


alp*_*989 7

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

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

首先,复制多行文本时,您必须选择多行。Tmux 复制粘贴通常不理解vim有行号或 vim 装订线中有标记(例如相对数字/绝对数字)。结果,它也会复制这些。

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

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

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