Как отключить bash "readline arguments" для повторения символов? - PullRequest
0 голосов
/ 01 мая 2018

В оболочке bash, вы можете набрать M-<number> <key>, где M - мета-ключ, чтобы повторить, что <key> нажмите <number> раз . Например, ввод M-6 a помещает aaaaaa в командную строку.

На моем компьютере мета отображается на клавишу Esc. Это означает, что нажатие клавиши Esc затем 6 интерпретируется как M-6 и заставляет терминал ожидать повторения другого символа:

(arg: 6)

Это проблематично в моем случае. Я использую iTerm2 на macOS, и у него есть замечательная небольшая функция, которая выдает окно автозаполнения, когда вы начинаете вводить команду с вашей предыдущей историей команд. Например, если вы используете Mercurial и набираете hg update, он позволяет вам выбрать из всех предыдущих закладок и зафиксировать хеши, которые вы обновляли в прошлом, отсортированные по наиболее частым.

Проблема возникает, когда я использую Esc, чтобы закрыть это окно. Например, если я начну вводить hg update , а затем появится окно автозаполнения, а затем я случайно нажму escape несколько раз, а затем вставлю хеш коммита, такой как 6dd0e54, что я на самом деле в конечном итоге в командной строке это:

$ hg update ddddddd0e54

Почему? Поскольку первое нажатие клавиши Esc закрывает окно автозаполнения, второе запускает комбинацию клавиш M-, а затем 6d в вставленном хэше интерпретируется как «повторить d символ 6 раз».

Это бесит, особенно когда приходится иметь дело с более проблемными коммитами, такими как 787075d: в этом случае буквально поместит в мой терминал почти 800 тысяч d символов, что сделает его непригодным для использования.

Итак, зная, что я никогда не использую эти аргументы повторения readline, кроме как случайно, есть ли способ отключить эту функцию, в идеале в bash, но в качестве альтернативы в iTerm2?

1 Ответ

0 голосов
/ 01 мая 2018

Бег

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

возвращает

"\e1": digit-argument

Итак, просто удалите все привязки к digit-argument на bind -r:

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

- также связан с digit-argument, чтобы учесть отрицательные аргументы.

...