bash - 如何关闭 bash 的 "readline arguments"字符重复?

标签 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 aaaaaaa在你的命令行上。

在我的电脑上,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/

相关文章:

linux - 如何在 linux 脚本中更改函数参数的值?

php - 如何终止 iTerm2 中的旧 session

git - 为 pull 远程分支定义 git 别名

linux - 无法通过 SSH 保留最新的 5 个文件夹并删除较旧的文件夹

bash - 如何提高一个人的 bash/命令行技能?

shell - 格式化 Neo4J-Shell 密码查询结果?

linux - <<$$$ 在 Unix shell 中是什么意思?

terminal - 更改launch.json使用的外部控制台

macos - 为什么我无法在 macOS 上更改环境变量 $USERNAME?

linux - 分别处理 stdout 和 stderr 添加时间戳 : Wrong order