在 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
,然后出现自动完成窗口,然后我不小心不止一次点击了转义,然后粘贴了一个提交哈希,如 6dd0e54
,我实际上在命令行中得到的是这样的:
$ hg update ddddddd0e54
为什么?因为第一次按下 Esc 键关闭了自动完成窗口,第二次启动了 M-
。组合键,然后是 6d
在粘贴的散列中被解释为“重复 d
字符 6
次。”
这真让人恼火,尤其是在处理更多有问题的提交哈希时,如 787075d
: 在这种情况下,它将从字面上放入将近 80 万 d
字符进入我的终端,使其无法使用。
所以知道我从不使用这些 readline 重复参数除非偶然,有没有办法关闭这个功能,最好是在 bash 中,或者在 iTerm2 中?
最佳答案
运行
bind -p | grep '"\\e1"'
返回
"\e1": digit-argument
因此,只需通过 bind -r
删除对 digit-argument
的所有绑定(bind):
for i in - {0..9} ; do
bind -r '\e'$i
done
-
也绑定(bind)到 digit-argument
,以允许否定参数。
关于bash - 如何关闭 bash 的 "readline arguments"字符重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122841/