例子

例子

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

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

我制作了以下 ~/.tmux.conf:

setw -g utf8 on
bind-key ù split-window -h

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

/home/glines/.tmux.conf: 2: unknown key: ù

有没有办法绑定这个键?

对于您的帮助,我提前表示感谢。

答案1

很遗憾,tmux其键绑定仅支持单个 8 位值。

如果您使用的是(固定长度)8 位编码(例如 ISO 8859-1、ISO 8859-15 等),那么绑定应该可以正常工作。但是,如果您使用的是 UTF-8,您的 ù (U+00F9) 将被编码为两个字节(C3 B9),并且tmux将其作为未知的键名拒绝(如果键长于一个字节(去除其修饰符前缀后),则将其处理为特殊键的名称,例如,,,F1等等)。PageUpKP0


不过,如果你真的绝望的话,你可以尝试一种粗暴的破解方法:

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

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

ù 的第一个字节(八进制 303)绑定到虚拟命令,第二个字节(八进制 271)绑定到目标命令。这要求您不能设置tmux repeat-time选项为零(禁用重复),并且有一个副作用,即离开tmuxrepeat-time键入后,将处于重复模式数毫秒(默认为 500 毫秒) Prefixù(此副作用通常仅在您立即键入箭头键(带或不带ControlMeta)时才会被注意到Prefixù- 这些键是唯一“可重复”的默认绑定)。

上面的例子使用printfshell 命令来生成所需的字节,但这在你的系统中不起作用.tmux.conf。如果你正在运行tmux1.7,你可以这样写(在你的.tmux.conf):

bind-key -r 0xC3 display 'c3 prefix binding hack'
bind-key -r 0xB9 split-window -h

但是,此十六进制密钥语法在tmux1.6. 因此,您要么需要将原始字节直接放在文件中(您的文本编辑器可能会反对这一点,而且很容易出错),要么使用 shell 来协助您:

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

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

答案2

自 tmux 2.3 以来,Chris Johnsen 解释的动态重新绑定不再是必要的,甚至不起作用。要绑定任何 UTF-8 字符,只需在0x符号中使用其 unicode 值即可。

例子

假设您想要将Prefixě(带有抑扬顿号的小写 E) 绑定到窗口 2。

首先您需要找出的unicode值ě(请注意,这与UTF-8代码序列不同)。

您可以使用例如python3将 UTF-8 字符转换为它的 unicode 值:

$ python3
>>> hex(ord('ě'))
'0x11b'

现在,当您知道 unicode 值时,ě只需0x011B将这一行添加到您的 tmux 配置文件中:

bind-key 0x011B select-window -t 2

相关内容