Как настроить .inputrc, чтобы ALT + UP имел эффект cd

7

Это должно быть возможно, если ALT + UP генерирует последовательный ввод с клавиатуры, эквивалентный cdspace..ENTERопределению макроса. Но не могу понять, как именно это сделать.

artistoex
источник

Ответы:

18

Чтобы сделать буквально то, что вы просите, добавьте следующую строку ~/.inputrc:

"\e\e[A": "cd ..\n"

Вот \e\e[Aпоследовательность байтов, которую ваш терминал отправляет, когда вы нажимаете Alt+ Up( \eанализируется как escape-символ), некоторые терминалы могут отправлять \e[1;3A~или какую-то другую последовательность вместо этого. Чтобы узнать, какую последовательность посылает ваш терминал, запустите catи нажмите клавишу (escape будет отображаться как ^[).

В bash вы можете в принципе привязать ключ к шелл-коду, поэтому теоретически это должно работать:

bind -x '"\e\e[A":cd ..'

Однако в bash 4.2 он не работает из-за трудно исправляемой ошибки реализации . Zsh эксперт Стефан Шазелас имеет обходной путь:

bind -x '"\201":cd ..'
bind '"\e\e[A":"\201"'

Эффект несколько сбивает с толку, потому что приглашение не перерисовывается.

В bash ≥4 добавьте shopt -s autocdв свой ~/.bashrc. Затем вы можете перейти в родительский каталог (или любой другой каталог), просто введя ..без необходимости вводить cdкоманду.

жилль
источник
Это похоже на ответ сверхвысокого качества, но по какой-то причине он не работает в оболочке Git Bash в Windows. (Пока еще не вытащил мой Air для тестирования там ...) Вам известны какие-то ошибки, которые уникальным образом влияют на Cygwin?
иконоборчество
(Я должен был упомянуть, что он закрывает окно терминала.)
иконоборчество
2
по какой-то причине SE удалил "@Gilles:" из начала моих комментариев. WTF !?
иконоборчество
1
@iconoclast Я думаю, что и Console2 и Mintty являются портативными. Для Console2 распакуйте zip и запустите его. Для Mintty вам нужен mintty.exeплюс dll Cygwin либо в том же каталоге, либо в другом месте %PATH%. Что касается удаления @Gilles: Eeeeek - что случилось с моим @ приветствием?
Жиль
1
@iconoclast Я думаю, что основатель, а затем ведущий разработчик (не пользователь UX) заставил эту функцию работать. Не вините в этом дизайнера UX.
Жиль