与键序列的绑定

时间:2014-08-13 19:11:24

标签: tmux keymapping

Tmux 是否支持键序列的键绑定,例如 Vim (例如bind-key ab kill -pane)?或者我怎么能效仿呢?

2 个答案:

答案 0 :(得分:4)

Tmux仅支持单字符键绑定(不幸的是)。

所以,只有这个:

bind-key a kill-pane

或者这个:

bind-key b kill-pane

请注意,这与例如C-a(Ctrl-a)或M-a(Alt-a)不同。

即使我们用户编写了多个字符,甚至必须按2个键才能调用它们,但Ctrl-a和Alt-a实际上都是tmux的单个字符(一般来说我知道)。

<强>替代

......可能不是你所期望的,但在这里是:

# in .tmux.conf
bind a command-prompt -p "pressed a" "run '~/my_script %%'"

示例my_script文件:

#!/bin/bash

case "$1" in
  b)
    tmux kill-pane
    ;;
  c)
    tmux kill-window
    ;;
esac

现在,在您重新加载tmux.conf并按prefix + a之后,您将收到一个tmux提示,说“按下了”。

继续按bEnter。来自脚本的tmux kill-pane将执行。

同样,如果按prefix + a + cEnter,您将从脚本中执行另一个选项。

这种模仿最终添加Enter密钥所需的内容。

此外,提供的脚本是可扩展的,因此您可以添加更多&#34;绑定&#34;得到prefix + a + d + Enter等..

答案 1 :(得分:2)

我正在使用tmux 2.3。

您可以通过定义自己的键表并将它们链接在一起来模拟键序列。

例如,如果我想<C-q>x做某事,则将“ x”的绑定放入密钥表“ my-keys”,然后用{{1}绑定激活该密钥表的密钥}(Cq):

switch-client

注意:我从C-q开始,因为它与命令行和Vim的冲突似乎最少。

因此,现在您可以使用带有C-q前缀的每个键。

如果您要在序列中添加更多键,请添加另一个间接级别:

bind-key -Tmy-keys x send-keys "my binding"

# Multi-key prefix for custom bindings
bind-key -Troot C-q switch-client -Tmy-keys

因此,现在我将bind-key -Tmy-keys x send-keys "my binding" # Pane (i.e. 'W'indow commands like Vim with C-w) bind-key -Tmy-keys-window-ctl s swap-pane bind-key -Tmy-keys C-w switch-client -T my-keys-window-ctl # Multi-key prefix for custom bindings bind-key -Troot C-q switch-client -Tmy-keys 绑定到swap-pane

之所以可行,是因为

  1. <C-q><C-w>s激活“我的密钥”密钥表,
  2. 具有绑定<C-q>
  3. 激活“ my-keys-window-ctl”密钥表
  4. 具有绑定<C-w>才能调用s