我实在不明白bash对控制字符的使用。我了解简单的事情,例如使用转义序列添加颜色,但不知道如何执行诸如绑定键之类的事情.inputrc
。
例如,有没有办法输入类似的内容Shifta并看看我应该如何表示它.inputrc
?
就像这位朋友在这里所做的那样: http://linuxart.com/log/archives/2005/10/13/super-useful-inputrc
答案1
以供参考,这是 archive.org OP问题中(死)链接的副本。其中显示的代码是 emacs lisp 风格的代码。我对他们了解不多。当然,剥猫皮的方法不止一种,但以下可能是最简单的:
首先,使用showkey -a
获取键盘序列的十六进制表示形式。例如,当我按 时CtrlShift~,我得到:
^^ 30 0036 0x1e
所以,我的十六进制表示是0x1e
.然后我可以添加一行到我的~/.inputrc
:
"\x1e": beginning-of-line
下次我打开 bash shell(或任何使用 readline 的程序)时,键入CtrlShift~会将光标移动到行的开头。您还可以执行以下操作:
"\x1b\x5a": "type this text whenever I press alt+shift+z"
答案2
OP的问题提出的基本问题是如何解决readline(和bash)的限制:
- 特殊键(例如功能键和光标键)通常会发送转义序列,
- 转义序列可能(取决于终端及其初始化方式)不同。
- 终端描述的一个主要区别是使用应用方式相对正常模式。
- 在应用程序模式下,光标键可能会发送
\eOA
(使用 bash 的名称作为转义字符),而在正常模式下它会发送\e[A
. - 全屏应用程序(终端数据库支持)通常采用应用程序模式;但也有例外,例如为 Linux 控制台提供的终端描述则没有。
- 如果终端描述使用应用程序模式,则终端描述中定义的键与 shell 中看到的值不匹配(因为 shell 没有打开相应的功能
smkx
)。
readline sort-of 关注终端数据库(因此它可以在您编辑的行周围移动光标),但不足以对键绑定中有关应用程序模式与正常模式的信息执行任何有用的操作。要使用 readline,您必须提供与您使用的每个终端相匹配的硬编码转义序列。当然,您可以将多个序列映射到同一个函数。幸运的是,同一序列的冲突使用很少见。
要便携式地查找由特殊键发送的字符,请使用cat -v
,即键入该命令并按按键查看结果。它将分别^[
对应每个转义字符。其他字符可以按原样使用。
顺便一提,showkey
是 Linux 特定的,并且仅在安慰。
进一步阅读:
- 特殊按键(xterm 手册)
- 如何查看键盘发送的内容?(ncurses 常见问题解答)
- 我的光标键不起作用(ncurses 常见问题解答)