【问题标题】:zsh: Unable to bind ^q or \M-q in vi modezsh: 无法在 vi 模式下绑定 ^q 或 \M-q
【发布时间】:2012-12-20 18:52:39
【问题描述】:

我的 .zshrc 文件包含该行

bindkey -v

我正在尝试将 ^q 或 \M-q 绑定到推线,例如

bindkey "^q" push-line

但由于某种原因它不起作用。

运行`bind key -v'确认

"^Q" push-line

但它实际上并没有做任何事情。其他控制映射,例如 ^r,工作正常。

我可以成功地将“push-line”映射到“\eq”,但我不喜欢这种行为。首先,我从不使用 esc 类型的绑定,其次,这样做会将它绑定到 control、meta 和 escape,这太过分了。 (顺便说一句,它不应该只用 `bindkey -m' 绑定所有这些吗?我从来没有在我的 .zshrc 中设置过?)

那么,有人知道这里发生了什么吗?

【问题讨论】:

    标签: zsh


    【解决方案1】:

    这些快捷键被Software flow control (wikipedia)使用

    Ctrl+SCtrl+Q 用于停止和恢复程序的输出。

    尝试一下:
    运行while (true) ; do echo $RANDOM ; sleep 1 ; done
    Ctrl+S,输出停止。
    Ctrl+Q,输出恢复。
    (我不确定程序是否像Ctrl+Z 那样停止,我认为它是由于缺少输出而卡住了。Ctrl+C 杀死程序。)

    这些快捷方式会取代您的快捷方式,但如果您禁用此流量控制功能,它可能会起作用。
    您可以在 How to unfreeze after accidentally pressing Ctrl-S in a terminal? - Unix and Linux 中了解如何禁用它。
    试试看并告诉我们。

    【讨论】:

    • 如果你用 Ctrl-z 暂停一个程序,你可以用“fg”命令恢复它。
    • 另外,我应该能够绑定 meta-q,因为据我所知,根本没有 meta-bindings(至少在我的系统上),但这也不起作用.而且,我要重申,“\eq”同时绑定了 escape-e、meta-q 和 ctrl-q——并且 ctrl-q 在这种情况下可以工作,而无需禁用流控制。
    • 我绑定了“^Q end-of-line”,它不起作用,我运行stty -ixon,然后快捷方式工作,使用emacs或vi模式。 (我通常使用emacs模式)。所以我不确定我能重现你的问题。尝试更多并在man zshzle 中查找信息或给出精确的命令尝试,我可以告诉你我会发生什么。我用的是 zsh 4.3.10,你呢?
    • 好吧,我的行为方式相同。我确实发现必须使用 '^q' 而不是 '\eq' 显式禁用启动/停止输入控制有点违反直觉。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    相关资源
    最近更新 更多