Каковы сочетания клавиш для командной строки?

10

Я говорю о сочетаниях клавиш, которые вы используете в командной строке / терминале.

Пример: Ctrl+, cкоторый убивает процесс, Ctrl+ dтот выход, Ctrl+ zкоторый отправляет процесс в фоновый режим ... и т. Д.

Я проверил некоторые и обнаружил , что они не являются ни терминал (то есть gnome-terminal, xterm, konsole) специфичные ни оболочки (т.е. bash, zsh) специфический, они даже работают в ttyс.

Итак, я хочу знать:

  • Кто предоставляет эти ярлыки?
  • Как я могу перечислить и изменить / определить их?
Pandya
источник
Попробуйте bind -pперечислить, так же как и help bindдля других
Костас

Ответы:

10

Драйвер терминала ядра ( termios) интерпретирует специальные ключи, которые можно вводить для отправки сигнала процессу, отправки конца файла, удаления символов и т. Д. Это базовая функциональность ядра Unix и очень похожа на большинство реализаций Unix и Linux.

Команда sttyотображает или устанавливает termiosспециальные символы, а также другие параметры для драйвера терминала.

Вызвать, stty -aчтобы увидеть текущие значения специальных символов и другие «настройки линии терминала». В следующих примерах вы можете видеть, что intrэто Ctrl+ C, eofэто Ctrl+ D, suspэто Ctrl+ Z. (Я удалил другой вывод, чтобы показать только настройки специальных символов):

stty -a специальные символы в GNU / Linux:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

stty -a специальные символы на FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

Чтобы изменить значение специального символа, например, чтобы изменить символ прерывания с Ctrl+ Cна Ctrl+, Eвызовите sttyэто так ( ^Eбуквально два символа, roundflex ( ^), за которым следует буква E):

stty intr '^E'

Для получения дополнительной информации см. Справочные страницы для sttyи termios. В GNU / Linux вы также можете посмотреть tty_ioctlсправочную страницу.

Заметки:

intrКлюч ( Ctrl+ Cпо умолчанию), на самом деле не убить процесс, но заставляет ядро посылать сигнал прерывания ( SIGINT) ко всем процессам в группе процессов. Процессы могут организовывать перехват или игнорирование сигнала, но большинство процессов завершается, что является поведением по умолчанию.

Причина, по которой Ctrl+ dвыводит вас из системы, заключается в том, что драйвер линии терминала отправляет EOF (конец файла) на стандартный ввод оболочки. Оболочка завершается, когда получает стандартный конец файла.

RobertL
источник
@Sukminder, во FreeBSD -aбыла добавлена ​​опция POSIX stty.
RobertL
Я пробовал stty intr '^E'это работает (устанавливает), но временно и только для текущего терминала / TTY. Как я могу изменить это глобально и навсегда?
Пандя
Я думаю, что лучшим способом было бы вызвать sttyиз вашего $ HOME / .profile или $ HOME / .bashrc или какой-либо другой файл инициализации запуска оболочки.
RobertL
Я пытался: он работает с терминалом, но не работает вtty
Pandya
Что вы пробовали, что вы видите и что вы имеете в виду tty? Может быть, это может быть новый вопрос?
RobertL
14

С http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

Команды для редактирования ярлыков

  • Ctrl+ a- перейти в начало командной строки
  • Ctrl+ e- перейти в конец командной строки
  • Ctrl+ k- удалить от курсора до конца командной строки
  • Ctrl+ u- удалить от курсора до начала командной строки
  • Ctrl+ w- удалить от курсора до начала слова (т.е. удалить назад одно слово)
  • Ctrl+ y- вставить слово или текст, вырезанный с помощью одного из ярлыков удаления (например, выше) после курсора
  • Ctrl+ xx- перемещаться между началом командной строки и текущей позицией курсора (и обратно)
  • Alt+ b- переместиться назад на одно слово (или перейти к началу слова, на котором в данный момент находится курсор)
  • Alt+ f- перейти на одно слово вперед (или перейти к концу слова, на котором находится курсор)
  • Alt+ d- удалить до конца слова, начинающегося с курсора (целое слово, если курсор находится в начале слова)
  • Alt+ c- использовать заглавную букву до конца слова, начинающегося с курсора (целое слово, если курсор находится в начале слова)
  • Alt+ u- сделать верхний регистр от курсора до конца слова
  • Alt+ l- сделать строчную букву от курсора до конца слова
  • Alt+ t- поменять текущее слово с предыдущим
  • Ctrl+ f- двигаться вперед на один символ
  • Ctrl+ b- переместиться назад на один символ
  • Ctrl+ d- удалить символ под курсором
  • Ctrl+ h- удалить символ перед курсором
  • Ctrl+ t- поменять местами курсор под предыдущим

Команды быстрого вызова Recall

  • Ctrl+ r- искать историю задом наперед
  • Ctrl+ g- выход из режима поиска истории
  • Ctrl+ p- предыдущая команда в истории (т. Е. Пройти через историю команд)
  • Ctrl+ n- следующая команда в истории (т.е. идти вперед по истории команд)
  • Alt+ .- использовать последнее слово предыдущей команды

Командные клавиши управления

  • Ctrl+ l- очистить экран
  • Ctrl+ s- останавливает вывод на экран (для длительной многословной команды)
  • Ctrl+ q- разрешить вывод на экран (если ранее был остановлен командой выше)
  • Ctrl+ c- прекратить команду
  • Ctrl+ z- приостановить / остановить команду

Команды Bash Bang (!)

Bash также имеет некоторые удобные функции, которые используют! (взрыв), чтобы позволить вам сделать некоторые интересные вещи с командами Bash .

  • !! - запустить последнюю команду
  • ! blah - запустить самую последнюю команду, начинающуюся с 'blah' (например,! ls)
  • ! blah: p - распечатать команду, которую запустит ! blah (также добавляет ее как последнюю команду в истории команд)
  • ! $ - последнее слово предыдущей команды ( так же , как Alt +. )
  • ! $: p - вывести слово, которое заменяет ! $
  • ! * - предыдущая команда, за исключением последнего слова (например, если вы введете « find some_file.txt / », тогда ! * Выдаст вам « find some_file.txt »)
  • ! *: p - распечатать что ! * заменит
Иисус Сепеда
источник
1
@ Sukminder Нет, Ctrl + S останавливает вывод. Вы, кажется, путаете это с Ctrl + Z.
Жиль "ТАК - перестань быть злым"
Смотрите также: Emacs.
Эрих
Приятно! И есть ли способ достичь того ^U, что stty -aпоказывает, определенный для SIGKILL в Linux, из bash? Желательно, не отменяя определения readline (возможно, через третий мод / мета-ключ). Я предполагаю, что это только затенено привязкой ctrl + u readline?
nyov