【问题标题】:How to turn off bash's "readline arguments" for character repetition?如何为字符重复关闭 bash 的“readline 参数”?
【发布时间】:2018-05-01 19:47:37
【问题描述】:

在 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 ,然后自动完成窗口出现,然后我不小心多次点击了escape,然后粘贴了6dd0e54这样的提交哈希,我实际上最终在命令行中是这样的:

$ hg update ddddddd0e54

为什么?因为第一次 Esc 键关闭自动完成窗口,第二次启动 M- 组合键,然后粘贴哈希中的 6d 被解释为“重复 d 字符 6 次。”

这令人恼火,尤其是在处理像787075d 这样有问题的提交哈希时:在这种情况下,它字面上会将近 80 万个 d 字符放入我的终端,使其无法使用。

所以知道我从不使用这些 readline 重复参数,除非是偶然的,有没有办法关闭这个功能,最好是在 bash 中,或者在 iTerm2 中?

【问题讨论】:

标签: bash shell iterm2


【解决方案1】:

跑步

bind -p | grep '"\\e1"'

返回

"\e1": digit-argument

所以,只需删除bind -rdigit-argument 的所有绑定:

for i in - {0..9} ; do
    bind -r '\e'$i
done

- 也绑定到 digit-argument,以允许否定参数。

【讨论】:

  • 谢谢。这确实回答了所问的问题。不幸的是,这会导致6dd0e54 的提交哈希被粘贴为dd0e54,剥离第一个字符,这更好但仍然不是超级好。我要去寻找一种方法来关闭 iTerm2 中的 Esc-as-Meta,但这有点超出了我要求的范围,所以我会接受这个答案。
猜你喜欢
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2019-09-22
相关资源
最近更新 更多