Які комбінації клавіш для командного рядка?


10

Я говорю про комбінації клавіш, які ви використовуєте в командному рядку / терміналі.

Приклад: Ctrl+, cщо вбиває процес, Ctrl+ dцей вихід, Ctrl+, zякий надсилає процес на задній план ... і т.д.

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

Отже, я хочу знати:

  • Хто надає ці ярлики?
  • Як я можу їх перерахувати та змінити / визначити?

Спробуйте bind -pперелічити, як і help bindдля інших
Costas

Відповіді:


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це буквально два символи, circflex ( ^), за яким слідує літера E):

stty intr '^E'

Для отримання додаткової інформації дивіться довідкові сторінки для sttyта termios. У GNU / Linux ви також можете переглянути tty_ioctlсторінку man.

Примітки:

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

Причина, що Ctrl+ dвиходить із системи, полягає в тому, що драйвер термінальної лінії надсилає EOF (кінець файлу) на стандартний вхід оболонки. Оболонка виходить, коли вона отримує кінець файлу на стандартному вході.


@Sukminder, на FreeBSD, -aопцію POSIX було додано до stty.
RobertL

Я спробував stty intr '^E'це працює (встановлює), але тимчасово і лише для поточного терміналу / tty. Як я можу це змінити глобально та постійно?
Пандія

Я думаю, що найкращим способом було б викликати sttyу своєму $ HOME / .profile або $ HOME / .bashrc або іншому файлі ініціалізації запуску оболонки.
RobertL

Я спробував: він працює з терміналом, але ніякого ефекту вtty
Пандія,

Що ви спробували, що ви бачите і що ви маєте на увазі під собою tty? Може, це може бути нове питання?
RobertL

15

Від 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- символ заміни під курсором з попереднім

Ярлики команд

  • 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? Переважно, не визначаючи матеріали читання рядків (можливо, через третій мод / мета-ключ). Я припускаю, що це лише затінено прив'язкою читання ctrl + u?
nyov
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.