我只能找到使用 Control ( \C-
) 或 Escape ( \e
) 作为前缀设置 Readline 键绑定的示例。
就我而言,在 macOS 上,该\C-
空间被默认按键绑定完全填满,并且该\e
空间在带有触摸栏的 Macbook 上并不实用。
输入"\M-f": kill-word
结果~/.inputrc
为:
bind -P | grep -F "\M-"
kill-word can be found on "\e[3;5~" "\ed".
但kill-word
不能使用Option
、Command
、 或fn
作为前缀来执行 - Readline 会忽略它。
这个问题是 macOS 特有的吗?我该如何解决它?
此外,如何控制执行键绑定(即较长键绑定的前缀)之前应发生的“超时”?
答案1
我不认为你做错了什么,你只需要告诉 Terminal.app 使用“Option”键作为“Meta”即可。只需转到终端 ( ⌘+ ,) 的首选项,然后型材,那么键盘默认配置文件选项卡并选中“使用选项作为元键”。
否则,您将获得默认的 macOS 行为(在大多数键盘映射中),其中 Option + 键会生成特殊字符,就像Option+f会生成带钩的小写字母“f”从你的屏幕截图(完整参考这里)。
在i学期2,我相信默认情况下左 Option 键已经做了明智的事情,但为了以防万一,以下是如何更改它:
至于将 Option 重新映射为 Escape,如果您仍然想做这件事,可以通过单击窗口底部附近的“修改键...”按钮,从系统偏好设置中的键盘预置面板中完成。
然后将其重新映射到您想要的任何内容(从可用的选项中):
我在使用新 Mac 的前五分钟左右就打开了这个首选项窗格,这样我就可以将 Caps Lock 重新映射到 Control,因为 Mac 键盘上的 Control 键处于一个尴尬的位置。
答案2
实用程序是:
showkey (1) - examine the codes sent by the keyboard
但这似乎在 mac-os 上缺失...这里是“关键代码”...?
或者您输入 ctrl-V (qouted insert),然后输入一些特殊键。在 bash 中,这会^[OP
在 xterm 和^[[[A
F1 键的控制台中打印。
读取行变量:
keyseq-timeout (500)
是用于半完成序列的超时。
在此之下,必须有一种键映射文件,其中键被转换为符号。这是来自/usr/share/kbd/keymaps/mac/
linux:
keycode 51 = Delete Remove
alt keycode 51 = Meta_Delete
shift alt keycode 51 = Meta_Delete
control keycode 51 = Remove
keycode 53 = Escape
alt keycode 53 = Meta_Escape
shift alt keycode 53 = Meta_Escape
keycode 54 = Control
keycode 55 = Alt # Command/Apple key
keycode 56 = Shift
keycode 57 = Caps_Lock
keycode 58 = AltGr # Alt/Option key
你看到了灵活性!元删除符号可能会成为杀戮词......
绑定 '"^[f": 杀字
这^[
必须是\e
、 或 ctrl-V,然后是 Escape:一个字节,而不是抑扬符加括号。
这就像说: ^C 表示 control-C,而不是 Shift-6 然后是 Shift-c...在 shell (bash) 或 vim 中,当我输入 ctrl-v 然后 Esc 我得到^[
,但它是当你退后一步时,只有一个字符。与 readline 中的这些元标志选项一起,它可能会变得复杂......我只是说明整个链:
键映射“default.map”(将扫描码和修饰符转换为键符号)
keycode 105 = Left F150 F151
string F150 = "\033[150"
string F151 = "\033[151"
keycode 106 = Right F154 F155
string F154 = "\033[154"
string F155 = "\033[155"
默认“Left”后面的 F150 和 F151 表示 Shift 和 Control 左箭头。在第二步中,您可以定义一个字符串,在本例中是一个转义序列。在这里,\e
不起作用,但八进制 033 是 ascii 27 是 control-[ 是 Escape...这个键盘映射是 Linux 特定的,但 X Windows 有类似的逻辑。
在 .inputrc 中:
"\e[150": backward-word
"\e[151": shell-backward-word
"\e[154": forward-word
"\e[155": shell-forward-word
这在 Linux 控制台中工作得非常好。在 X Windows (Xorg) 下的 xterm 中:完全不:Xorg 本身扫描密钥。
backward-word can be invoked via "\e[150", "\e[1;2D", "\e[1;3D", "\eb".
中间两个带分号的是VTxxx风格修饰的左箭头。这是预先配置的,并且也会backward-word
自动绑定。
答案3
如果我正确理解你的问题:
bind '"^[f": kill-word'
将定义Option+F
调用kill-word