在bash shell中you can type M-<number> <key>
, where M
is the meta key, in order to repeat that <key>
press <number>
times。例如,键入M-6 a
会在命令行中放置aaaaaa
。
在我的计算机上,meta映射到Esc键。这意味着Esc
然后6
的击键被解释为M-6
,并使终端期望重复另一个角色:
(arg: 6)
这在我的案例中是有问题的。我在macOS上使用iTerm2,它有一个很棒的小功能,当你开始用你以前的命令历史记录输入一个命令时,它弹出一个自动完成窗口。例如,如果您使用Mercurial并键入hg update
,则可以从所有以前的书签中进行选择,并提交您过去更新过的哈希值,并按最常见的顺序排序。
当我使用Esc关闭此窗口时出现问题。例如,如果我开始键入hg update
,然后自动完成窗口出现,然后我意外地多次触发转义,然后粘贴一个提交哈希,如{{1}我在命令行中最终得到的是:
6dd0e54
为什么呢?因为第一个Esc键按下了自动完成窗口,第二个启动$ hg update ddddddd0e54
组合键,然后粘贴的哈希中的M-
被解释为“重复6d
个字符{{1时间。“
这是令人愤怒的,特别是在处理更有问题的提交哈希值时,例如d
:在这种情况下,它将字面上将近80万6
个字符放入我的终端,呈现它无法使用。
因此我知道我从不使用这些读取重复参数,除非意外,是否有任何方法可以关闭此功能,理想情况是在bash中,但在iTerm2中?
答案 0 :(得分:2)
正在运行
bind -p | grep '"\\e1"'
返回
"\e1": digit-argument
因此,只需删除digit-argument
的所有bind -r
绑定:
for i in - {0..9} ; do
bind -r '\e'$i
done
-
也与digit-argument
绑定,以允许否定参数。