来自tmux 的手册
- 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 不同,这种所谓的“选择模式”没有密钥表。那么这可能吗?
看来在某种模式(
copy-mode
* 除外)下,root
密钥表是相关的;加上特定于模式的键(就像您在问题中引用的那样),但root
首先应用键表。这意味着如果我们将
root
键表转换C-c
为q
模式中的when,那么模式将对我们的Ctrl+做出反应c,就像它对 的反应一样q。我们可以有条件地转换
C-c
为q
。这是一行~/.tmux.conf
:请记住,该文件是在 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要了解另一种模式的正式名称,我们可以这样做:
echo "$TMUX_PANE"
. 假设输出是%0
.tmux display-message -t %0 -p '#{pane_mode}'
,其中%0
是步骤 1 的输出。我已经确定了
view-mode
、tree-mode
、client-mode
、buffer-mode
、options-mode
和clock-mode
(copy-mode
这在您的问题的上下文中很突出,请参阅脚注*)。可能还有其他人。为了检测多种模式,我们需要一些逻辑。例子:
如果我们想转换
C-c
为q
所有模式*,我们可以使用以下行:* 对于关键
copy-mode
表root
(-T root
) 似乎无关紧要。正如您所注意到的,复制模式中使用了单独的表copy-mode
(或)。copy-mode-vi