- Choose mode, which allows an item to be chosen from a list. This may be a client, a session or window or pane, or a buffer. This mode is entered with the choose-buffer, choose-client and choose-tree commands.
如果我们看一下choose-tree
命令:
The following keys may be used in tree mode:
Key Function
Enter Choose selected item
Up Select previous item
Down Select next item
+ Expand selected item
- Collapse selected item
M-+ Expand all items
M-- Collapse all items
x Kill selected item
X Kill tagged items
< Scroll list of previews left
> Scroll list of previews right
C-s Search by name
m Set the marked pane
M Clear the marked pane
n Repeat last search
t Toggle if item is tagged
T Tag no items
C-t Tag all items
: Run a command for each tagged item
f Enter a format to filter items
H Jump to the starting pane
O Change sort field
r Reverse sort order
v Toggle preview
q Exit mode
具体来说,我还想绑定C-c
到Exit mode
,就像q
现在一样。
与复制模式、复制模式-vi 和 root 不同,这种所谓的“选择模式”没有密钥表。那么这可能吗?
答案1
具体来说,我还想绑定
C-c
到Exit mode
,就像q
现在一样。
看来在某种模式(copy-mode
* 除外)下root
,密钥表是相关的;加上特定于模式的键(就像您在问题中引用的那样),但root
首先应用键表。
这意味着如果我们将root
键表转换C-c
为q
模式中的when,那么模式将对我们的Ctrl+做出反应c,就像它对 的反应一样q。
我们可以有条件地转换C-c
为q
。这是一行~/.tmux.conf
:
bind-key -T root C-c if-shell -F '#{==:#{pane_mode},tree-mode}' 'send-keys q' 'send-keys C-c'
请记住,该文件是在 tmux 服务器启动时解析的。为了影响我们已经运行的服务器,我们需要将命令传递给 tmux(例如,tmux bind-key …
在 tmux 内的 shell 中)或重新加载更改后的文件 ( prefix:source-file ~/.tmux.conf
Enter)。
Ctrl+后c,绑定将检测当前窗格是否位于tree-mode
( -F '#{==:#{pane_mode},tree-mode}'
) 中。如果是,则发送q
( send-keys q
);如果不是,它会发送C-c
( send-keys C-c
),因为我们不想在不在该模式下时失去Ctrl+的功能。c
要了解另一种模式的正式名称,我们可以这样做:
- 在窗格中的 shell 中,我们调用
echo "$TMUX_PANE"
.假设输出是%0
. - 我们将窗格置于所需的模式。
- 在另一个窗格的 shell 中,我们调用
tmux display-message -t %0 -p '#{pane_mode}'
,其中%0
是步骤 1 的输出。
我已经确定了view-mode
、tree-mode
、client-mode
、buffer-mode
、options-mode
和clock-mode
(copy-mode
这在您的问题的上下文中很突出,请参阅脚注*)。可能还有其他人。
为了检测多种模式,我们需要一些逻辑。例子:
bind-key -T root C-c if-shell -F '#{m/r:(tree|client|buffer)-mode,#{pane_mode}}' 'send-keys q' 'send-keys C-c'
如果我们想转换C-c
为q
所有模式*,我们可以使用以下行:
bind-key -T root C-c if-shell -F '#{pane_in_mode}' 'send-keys q' 'send-keys C-c'
* 对于关键copy-mode
表root
( -T root
) 似乎无关紧要。正如您所注意到的,复制模式中使用了单独的表copy-mode
(或)。copy-mode-vi