我知道如何使用 输出绑定键bindkey
。
我可以grep
说一句话
$ bindkey | grep line
"^A" beginning-of-line
"^E" end-of-line
"^J" accept-line
"^K" kill-line
...
但我不能 grep^[G
或^[[A
等等。
$ bindkey | grep ^[G
zsh: bad pattern: ^[G
我如何使用or等grep
关键字?^[G
^[[A
答案1
两个问题:shell 的特殊字符和正则表达式中的特殊字符。
开括号[
在 shell 的文件名扩展模式中具有特殊含义,这就是 zsh 在该错误中所指的内容。您可以告诉它按字面意思加引号。单引号或双引号都可以,但单引号更好,它们的例外情况较少。
在正则表达式中,首字母^
指示将模式锚定到行首,并且[
具有与 shell 中类似的特殊含义。因此,您需要告诉grep
将它们都视为文字,这是通过用反斜杠转义它们来完成的。
所以:
bindkey | grep '\^\[G'
请注意,^A
输出中的bindkey
是两个字符^
(插入符号)和A
(大写字母 A),而该组合在键绑定中代表的是 Ctrl-A,即数值为 1 的控制字符。对该字符的 Grepping 将为不同的。
答案2
使用-F
选项和使用引号有效。
~ % bindkey | grep -F '^[G'
"^[G" get-line
-F, --fixed-strings 将 PATTERN 解释为固定字符串列表,以换行符分隔,其中任何一个都将被匹配。 (-F 由 POSIX 指定。)