Ответ 1
Вы можете определить последовательность символов, исходящую от клавиши, нажав Ctrl - v в командной строке, а затем нажав интересующую вас кнопку. В моей системе для F12 я получаю ^[[24~
, ^[
представляет Esc. Различные типы терминалов или терминальные эмуляторы могут выделять разные коды для одного и того же ключа.
В приглашении Bash вы можете ввести такую команду, чтобы включить ключевой макрос, чтобы вы могли его попробовать.
bind '"\e[24~":"foobar"'
Теперь, когда вы нажимаете F12, вы получите "foobar" в командной строке, готовой для дальнейшего редактирования. Если вы хотите, чтобы нажатие клавиши сразу вводило команду, вы можете добавить новую строку:
bind '"\e[24~":"pwd\n"'
Теперь, когда вы нажимаете F12, вы увидите текущий каталог, не нажимая Enter. Что, если вы уже набрали что-то на линии, и используете это, которое автоматически выполняется? Это может стать беспорядочным. Однако вы можете очистить строку как часть своего макроса:
bind '"\e[24~":"\C-k \C-upwd\n"'
Пространство гарантирует, что Ctrl - u есть что-то удалить, чтобы звонок не звонил.
Как только макрос будет работать так, как вы хотите, вы можете сделать его постоянным, добавив его в свой ~/.inputrc
файл. Нет необходимости в команде bind
или внешнем наборе одиночных кавычек:
"\e[24~":"\C-k \C-upwd\n"
Edit:
Вы также можете создать привязку клавиш, которая будет выполнять что-то, не нарушая текущую командную строку.
bind -x '"\eW":"who"'
Затем, когда вы вводите команду, требующую имени пользователя, например, и вам нужно знать имена пользователей, которые вошли в систему, вы можете нажать Alt - Shift - W, а вывод из who
будет отображаться, и приглашение будет выведено с сохраненной неполной командой и курсором в том же положении в строке.
К сожалению, это не работает должным образом для таких ключей, как F12, которые выводят более двух символов. В некоторых случаях это можно обойти.
Команда (who
в этом случае) может быть любым исполняемым файлом - программой, script или функцией.