如何关闭 bash 的 "readline arguments" 字符重复?
How to turn off bash's "readline arguments" for character repetition?
在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,它有一个很棒的小功能,当您开始使用以前的命令历史输入命令时,它会弹出一个自动完成 window。例如,如果您使用 Mercurial 并键入 hg update
,它可以让您从所有以前的书签中 select 并提交您过去更新过的散列,按最频繁排序。
当我使用 Esc 关闭此 window 时,问题就来了。例如,如果我开始输入 hg update
,然后自动完成 window 出现,然后我 不小心 不止一次点击转义,然后粘贴像 6dd0e54
一样提交哈希,我在命令行中实际得到的是这样的:
$ hg update ddddddd0e54
为什么?因为第一次按下 Esc 键取消了自动完成 window,第二次按下 M-
组合键,然后粘贴散列中的 6d
被解释为 "repeat the d
character 6
times."
这真让人恼火,尤其是在处理像 787075d
这样有问题的提交哈希时:在这种情况下,它将 字面上 放置近 80 万 d
个字符进入我的终端,使其无法使用。
所以知道我从不使用这些 readline 重复参数除非是偶然,有没有办法关闭这个功能,最好是在 bash 中,但也可以在 iTerm2 中?
运行
bind -p | grep '"\e1"'
returns
"\e1": digit-argument
因此,只需删除 bind -r
对 digit-argument
的所有绑定:
for i in - {0..9} ; do
bind -r '\e'$i
done
-
也绑定到 digit-argument
,以允许否定参数。
在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,它有一个很棒的小功能,当您开始使用以前的命令历史输入命令时,它会弹出一个自动完成 window。例如,如果您使用 Mercurial 并键入 hg update
,它可以让您从所有以前的书签中 select 并提交您过去更新过的散列,按最频繁排序。
当我使用 Esc 关闭此 window 时,问题就来了。例如,如果我开始输入 hg update
,然后自动完成 window 出现,然后我 不小心 不止一次点击转义,然后粘贴像 6dd0e54
一样提交哈希,我在命令行中实际得到的是这样的:
$ hg update ddddddd0e54
为什么?因为第一次按下 Esc 键取消了自动完成 window,第二次按下 M-
组合键,然后粘贴散列中的 6d
被解释为 "repeat the d
character 6
times."
这真让人恼火,尤其是在处理像 787075d
这样有问题的提交哈希时:在这种情况下,它将 字面上 放置近 80 万 d
个字符进入我的终端,使其无法使用。
所以知道我从不使用这些 readline 重复参数除非是偶然,有没有办法关闭这个功能,最好是在 bash 中,但也可以在 iTerm2 中?
运行
bind -p | grep '"\e1"'
returns
"\e1": digit-argument
因此,只需删除 bind -r
对 digit-argument
的所有绑定:
for i in - {0..9} ; do
bind -r '\e'$i
done
-
也绑定到 digit-argument
,以允许否定参数。