我在 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
等等)。PageUp
KP0
不过,如果你真的绝望的话,你可以尝试一种粗暴的破解方法:
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ù(此副作用通常仅在您立即键入箭头键(带或不带Control或Meta)时才会被注意到Prefixù- 这些键是唯一“可重复”的默认绑定)。
上面的例子使用printf
shell 命令来生成所需的字节,但这在你的系统中不起作用.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