如何关闭字符重复的bash的“readline参数”?

时间:2018-05-01 19:47:38

标签: bash shell iterm2

在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中?

1 个答案:

答案 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绑定,以允许否定参数。