我正在使用带有vi键的tmux,并且只要您选择一行文本或者只有一个窗口,复制/粘贴就可以正常工作。当我想选择一个文本块(多行,但不是全角)时,就会遇到麻烦。如果我打开了多个vim窗口,那么它将从所有窗口中选择文本,而我需要的是仅从一个窗口中选择文本。也就是说,就像vim中的视觉选择一样。
这可能吗?
我正在使用带有vi键的tmux,并且只要您选择一行文本或者只有一个窗口,复制/粘贴就可以正常工作。当我想选择一个文本块(多行,但不是全角)时,就会遇到麻烦。如果我打开了多个vim窗口,那么它将从所有窗口中选择文本,而我需要的是仅从一个窗口中选择文本。也就是说,就像vim中的视觉选择一样。
这可能吗?
Answers:
确保检查此帖子的底部是否有需要放入.tmux.conf文件的必要绑定。
我假设您的前缀密钥是Ca:
在tmux中从(1,1)到(2,2)进行文本的矩形选择:
注意,space选择矩形时必须按。
要选择通常的行,请进入复制模式,然后按v,用jkhl键选择并按y。
我的.tmux.conf中有这些绑定:
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
版本适用于所有版本,请参阅此问题。
send
和之间有什么区别send-keys
。我在superuser.com/questions/196060/selecting-text-in-tmux-copy-mode中 看到了send-key
。引号也重要吗?
您可以像在vi中一样选择可视块- v
在开始选择之前键入。在联机帮助页中,这称为“矩形切换”。
正如Lars指出的那样,v
实际上是通过在矩形模式和全行选择模式之间切换来实现您所要的。 space
和enter
分别用于开始新选择并复制它。使用前缀输入复制模式,然后使用[
粘贴复制的选择到任何tmux窗口]
这也使我感到困惑,因为v
vim中的space
功能与tmux中的功能一样,开始选择。
:list-keys -t vi-copy
在tmux中发出将在复制模式下显示完整的命令表。
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
由于没有其他答案可以为该问题提供最佳的解决方案,因此我无法超越法律界。
有一种方法可以使块选择与Vim中的选择相同,而无需按空格。只是一个简单的Ctrl-V,已根深蒂固。
它需要编辑您的.tmux.conf(但是已经使用vi-mode了),我不确定它是否适用于tmux <2.4。
将此添加到您的.tmux.conf中,以复制Vim选择和猛拉绑定:
# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
进入选择模式,然后导航到要开始选择的位置。现在v
开始常规(逐字符,逐行)选择,<C-v>
开始块选择,V
(shift-v)开始行选择。无论选择哪种类型,都y
将tmux粘贴到缓冲区(或X剪贴板;请参见上面的代码注释)。
与Vim相同。
编辑:检查源代码后,我已经完全重写了我的答案。
我最初以为这是不可能的,因为我无法v
使它正常工作,但是其他答案是正确的,因为它是正确的密钥,但如何使用它并不明显,特别是如果您习惯使用vim。
同样,这对我也不起作用,因为我必须v
遵守begin-selection
-我想我一定是从其他地方盲目复制了这个想法,以模仿vim方式开始进行角色明智的选择,不知道这会在以后给以后带来问题块选择。
$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy | grep " v "
bind-key -t vi-copy v begin-selection # suppressed my block selection mode
一旦取消绑定(通过在我的行中注释掉.tmux.conf
并重新启动tmux),它便开始起作用,但是仍然相当混乱,因为它与vim根本不一样。
使用默认绑定,它应如下工作:
setw -g mode-keys vi
你.tmux.conf
。C-a [
开始复印模式v
Space
开始选择v
再次按将选择切换回按字符选择,反之亦然。v
按下之前不必键入Space
。您可以先从按字符选择Space
开始,然后按v
切换到矩形选择模式。
它与vim完全不同,在tmux中,您必须键入两个字符:Space
并v
进入矩形选择模式。在vim中,您只需键入Ctrl-V
。
同样在vim中v
开始按字符选择,而不是阻塞。
可悲的是,tmux中似乎没有按行选择模式(Shift-v
在vim中)。
编辑:看起来Tmux版本2.0提供了一个逐行选择模式,但Shift-v
我还没有尝试过!
Shift-v
在我的答案之后)和您的原始答案很久之后才被添加到Tmux(在2015年3月的版本2.0中)。当我们谈论逐行选择时,也许您和我在谈论两件事。请在3种选择模式在VIM比较(与v
,Shift-v
和Ctrl-v
)。
v
选择是明智的。我使用的是1.9a版本,没有类似vim的逐行选择。因此,在2.0版中,vim在tmux中也可能具有确切的三种模式,对吗?