在ZSH中,ZLE命令可以有多个键绑定,例如:
▶ bindkey | grep accept-and-hold
"^[A" accept-and-hold
"^[a" accept-and-hold
如何从bindkey
生成一个列表,该列表将给定命令的所有键序列聚合成一行?
使用q
的一个解决方案:
▶ bindkey | q "select c2, group_concat(c1) from - group by c2" | grep accept-and-hold
accept-and-hold ^[A,^[a
但是我想知道是否有办法在不使用perl
,awk
,sed
,q
等使用更高级的工具的情况下执行此操作
答案 0 :(得分:0)
救援的一些awk
:
% bindkey | awk -v zle=accept-and-hold '$2==zle{s=s" "$1};END{print zle s}'
accept-and-hold "^[A" "^[a"
如果你真的想要删除引号:
% bindkey | awk -v zle=accept-and-hold '$2==zle{s=s" "gensub(/\"/,"","g",$1)};END{print zle s}'
accept-and-hold ^[A ^[a
答案 1 :(得分:0)
但是我想知道是否有一种方法可以在不使用
perl
,awk
,sed
,q
等更高级的工具的情况下进行操作< / p>
剩余的资源不多...但是我们可以使用关联数组来汇总给定命令(键)的键序列(值):
b=`bindkey`
typeset -A a
setopt EXTENDED_GLOB
eval "${b//(#b)([^$'\n']#) ([^$'\n']#)/a[$match[2]]+=\ $match[1]}"
print -RaC2 ${(kv)a}