tmux:尝试绑定 utf8 键

Gli*_*ome 3 bind tmux utf-8 xbindkeys

我在 Fedora 17 i686 上使用带有 konsole 的 tmux 1.6。

我有一个 azerty 键盘(带有重音字符),我想绑定 'ù' 键。

我做了以下 ~/.tmux.conf:

setw -g utf8 on
bind-key ù split-window -h
Run Code Online (Sandbox Code Playgroud)

但是,当我运行 tmux 时,出现以下错误:

/home/glines/.tmux.conf: 2: unknown key: ù
Run Code Online (Sandbox Code Playgroud)

有没有办法绑定这个键?

对于您的帮助,提前致谢。

Chr*_*sen 7

不幸的是,tmux在其键绑定中仅支持单个 8 位值。

如果您使用的是(固定长度)8 位编码(例如 ISO 8859-1、ISO 8859-15 等),那么绑定应该有效。但是,如果您使用的是 UTF-8,则您的ù (U+00F9) 被编码为两个字节 (C3 B9),并且tmux 将其拒绝为未知的密钥名称(如果密钥长于单个字节(在剥离其改性剂的前缀),它被处理为一个特殊的键例如名称F1PageUpKP0,等等)。


不过,如果你绝望了,你可以尝试一个严重的黑客攻击:

tmux bind-key -r $(printf '\303') display 'c3 prefix binding hack' \; \
     bind-key -r $(printf '\271') split-window -h
Run Code Online (Sandbox Code Playgroud)

这滥用了“重复”绑定功能,使用它保持“前缀模式”,同时基本上忽略 ù(十六进制 C3 B9,八进制 303 271)的 UTF-8 编码的第一个字节。

ù(八进制303)的第一个字节绑定到一个虚拟命令,第二个字节(八进制271)绑定到目标命令。这要求您不能将tmux repeat-time选项设置为零(以禁用重复),并且在您键入后将tmux留在其重复模式repeat-time几毫秒(默认为 500 毫秒)的Prefixù副作用(这种副作用通常只会是如果您在之后立即键入箭头键(带或不带ControlMeta),您会注意到——这些Prefixù键是唯一“可重复”的默认绑定)。

上面的示例使用printfshell 命令生成所需的字节,但这在您的.tmux.conf. 如果你正在运行tmux 1.7,你可以这样写(在你的.tmux.conf):

bind-key -r 0xC3 display 'c3 prefix binding hack'
bind-key -r 0xB9 split-window -h
Run Code Online (Sandbox Code Playgroud)

但是,此十六进制密钥语法在tmux 1.6 中不起作用。因此,您要么需要将原始字节直接安排在文件中(您的文本编辑器可能会在这方面与您争吵,而且很容易出错),或者使用 shell 来帮助您:

run-shell "tmux bind-key -r $(printf '\\303') display 'c3 prefix binding hack' \\; bind-key -r $(printf '\\271') split-window -h"
Run Code Online (Sandbox Code Playgroud)

注意:run-shell异步运行其命令,因此在您的第一个会话开始后可能无法立即使用绑定。