从哪里可以获得 zsh bindkey 的代码?特殊性我需要左移。
到目前为止,我找到了获取代码的不同方法:
1)key[Down]=${terminfo[kcud1]}
但是在哪里可以找到 terminfo 中的所有键名?
2)sudo showkey -a
打印某些值的输出,例如^[[C
右箭头,但 ctrl、shitf、space 等的输出为空。
3)Ctrl+V
在终端中,
它返回一些值,但对于shift、ctrl等来说又是空的。
还有xmodmap -pk | grep Shift
返回0xffe1 (Shift_L)
,但是当我尝试绑定此代码时,它不起作用,为什么会这样?
答案1
终端不是这样工作的。
终端不发送修饰键。修改器被终端吞掉并且不会通过线路发送到主机。终端输入的形式为字符序列不是键盘事件。 (是的,一些真实的终端,例如 DEC VT520 支持“扫描代码”模式,但这将无法修复您的情况实际上尝试做,并且几乎可以肯定你是不是使用 DEC VT520 或任何完全模拟它的东西。)这些序列是预先组成的字符,或表示某些非图形键(即功能、光标键盘、编辑键盘和计算器键盘键)的 ECMA-48 控制序列。
使用终端 I/O 的程序根本不将其作为其 I/O 范例的一部分。
顺便说一句,Terminfo 不具备几乎全部甚至大部分 ECMA-48 控制序列。这实际上是处理终端输入的一种非常低劣的方式,具有讽刺意味的是,因为它对密钥的处理非常糟糕和弦包括非图形键和修饰键。因此,不要去查找 terminfo 来告诉您有关终端输入的信息。
GUI、其他操作系统上的“控制台”以及内核(和某些用户空间)虚拟终端所基于的低级 HID 是不同的概念。那些做具有应用程序可见的键盘按下/释放输入事件的概念。但是POSIX通用终端接口,如 ZLE 在 Z shell 中所使用的那样,并不按您想象的方式工作。
进一步阅读
答案2
该线程中有一些有趣的点,其中没有一个显示 Shift 键的键绑定。
查看“系统偏好设置”->“键盘”->“修饰键”中的修饰键,似乎两个 Shift 键都无法更改。 Shift 锁是,但不是任一 Shift 键