tmux 复制模式-选择文本块

tmux 复制模式-选择文本块

我使用 tmux 和 vi 键,只要您选择一行文本,或者只有一个窗口,复制/粘贴就可以正常工作。当我想选择一段文本(多行,但不是全宽)时,我就会遇到麻烦。如果我打开了多个 vim 窗口,那么它会从所有窗口中选择文本,而我需要的只是从一个窗口中选择文本。也就是说,就像 vim 中的可视选择一样。

这可能吗?

答案1

请务必检查此帖子的底部,了解需要放入 .tmux.conf 文件的必要绑定。

我假设你的前缀键是 Ca:

  • Ca 表示:按Ctrl+A
  • Ca [ 表示:按Ctrl+A然后按[

做一个矩形选择在 tmux 中从 (1,1) 到 (2,2) 的文本:

  • 进入复印模式:Ca[
  • 移动行的中间位置
  • 按简历
  • 新闻空间
  • 使用 jkhl 移动选择
  • 对选择满意后,按 Enter 键(如果在配置文件中有绑定,则按 y 键)。
  • 您可以通过以下方式粘贴最新的复制缓冲区:Ca ]

请注意,space选择矩形时必须按下。

要像平常一样选择行,请进入复制模式,按 v,用 jkhl 键选择,然后按 y。

我的 .tmux.conf 中有这些绑定:

之前版本 2.4(2017 年 4 月 20 日)

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection     # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle  # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection      # Yank selection in copy mode.

版本 2.4

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection     # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle  # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection      # Yank selection in copy mode.

取消默认的矩形切换绑定非常重要:

unbind-key -t vi-copy v  # Prior to version 2.4
unbind-key -T copy-mode-vi v

否则新的“Cv”绑定不起作用。

.tmux.conf注意:要获得适用于不同版本的单一版本,请参阅这个问题

答案2

您可以像在 vi 中一样选择一个可视块 -v在开始选择之前键入。在手册页中,这称为“矩形切换”。

答案3

正如 Lars 指出的那样,v实际上是通过在矩形模式和全行选择模式之间切换来实现您的要求。 spaceenter分别用于开始新的选择并复制它。 使用您的前缀进入复制模式,然后[使用 粘贴您复制的选择到任何 tmux 窗口中]

这也让我感到困惑,因为vvim 中的功能与spacetmux 中的功能一样,可以开始选择。

在 tmux 中发出:list-keys -T copy-mode-vi将在复制模式下显示完整的命令表。

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down

答案4

这是针对 macOS 用户的解决方案

  1. prefix+[进入复印模式
  2. 使用箭头键导航到文本选择的开始或结束
  3. 按空格键开始选择,有时control+space
  4. 使用箭头键移动到要复制的文本的另一端
  5. 按下return可将选定的文本复制到tmux剪贴板,有时control+w 或者 esc+w 或者 alt+w
  6. 在同一个会话中,使用+tmux粘贴,粘贴到,使用+prefix]vimprefix]vim 插入模式

相关内容