Как отключить "аргументы readline" Баша для повторения символов?


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

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

(arg: 6)

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

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

$ hg update ddddddd0e54

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

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

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

1 2

1 ответ:

Выполняется

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

Возвращает

"\e1": digit-argument

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

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

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