【问题标题】:Bindings with key sequences与键序列的绑定
【发布时间】:2014-10-07 07:00:51
【问题描述】:

Tmux 是否支持与 Vim 一样的键 sequences 键绑定(例如 bind-key ab kill -窗格)?或者我该如何模仿?

【问题讨论】:

  • 你试过什么?你能不能回答这个问题,以便我们可以帮助你解决具体问题?
  • @Petr 我试图破解 evdev,它太复杂了。
  • 在此上下文中定义“hack”。就像 Petr 说的,你能给我们展示一些你尝试过的代码吗?
  • 我把问题简化为一个单元!

标签: tmux keymapping


【解决方案1】:

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 提示,说“按下 a”。

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

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

这种通过在末尾添加Enter 键来模仿您想要的。

此外,提供的脚本是可扩展的,因此您可以添加更多“绑定”来获取prefix + a + d + Enter 等。

【讨论】:

    【解决方案2】:

    我正在使用 tmux 2.3。

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

    例如,如果我想让<C-q>x 做某事,我将“x”的绑定放入密钥表“my-keys”中,然后将激活该密钥表的密钥与switch-client (Cq) 绑定:

    bind-key -Tmy-keys x send-keys "my binding"
    
    # Multi-key prefix for custom bindings
    bind-key -Troot C-q switch-client -Tmy-keys
    

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

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

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

    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 绑定到<C-q><C-w>s

    这是因为

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

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 2014-06-22
      • 2012-12-12
      • 2020-10-07
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多