змінити клавіші швидкого доступу, такі як Ctrl-C?


21

Я використовую Kubuntu 10.04. Я хотів би змінити деякі стандартні комбінації клавіш для bash (терміналу).

Ось ярлики, які я хотів би встановити:

  • Ctrl- Cскопіювати вибраний текст у терміналі до буфера обміну.

  • Ctrl- Vвставити з буфера обміну в термінал.

  • Ctrl- Zскасувати редагування на поточному рядку в терміналі.

  • Ctrl- Shift- C(або ще краще, Super- C) припинити команду.

  • Ctrl- Shift- Z(або Super- Z) бути фоновою командою.

  • Ctrl- Shift- V(або Super- V) - це буквальна команда вставки (або що завгодно Ctrl- zробилася раніше).

Як зробити ці зміни?

До речі, мені подобається те, як працює термінал в ОС X. Використання командного ключа робить всі команди копіювання / вставки дуже послідовними (на відміну від багатьох інших речей в OS X).

PS Я прочитав сторінку bash man, і це не допомогло. Це дало мені ідеї, але мені потрібні конкретні приклади для вищезгаданих комбінацій. Спасибі.


деякі з цих "ярликів" не можна "реалізувати" в баші, але їх потрібно поставити на сам термінал (xterm, gnome-terminal, konsole тощо). Наприклад, "вибраний текст", "буфер обміну"
akira

Відповіді:


10

Це не особливості bash, це особливості драйвера терміналу. Як такі, вони вказані stty(1).

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
ДОБРЕ. Дякую за підказку. Тепер я все-таки хотів би досягти своєї мети. І я також знаю, що inputrc може перезавантажувати Ctrl-C. Але мені дуже все одно, як я це роблю, я просто хочу знати, як перевпорядкувати ці ярлики в терміналі.
Пол,

15
Ось "риба": stty intr \ ^ k (де команда завершення, раніше Ctrl-C тепер стає Ctrl-K, K може бути будь-яким альфа-ключем). Я багато працював, щоб знайти це самостійно. Тож проповідь з прислів’ями змушує вас виглядати як ривок, ІМО.
Пол

Як ви можете перезавантажити його до Ctrl + Shift + C?
crypdick

8

Це майжеЗараз повністю вирішено. Частину рішення вперше було привернено до відома MTK358 за адресою http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ . Він вказав на (досить очевидний, на мій розчулення) факт, що клавіші швидкого доступу скопіювати та вставити можна легко змінити в налаштуваннях меню konsole. Як тільки я це побачив, знадобилося близько 1 хвилини, щоб налаштувати Ctrl-C і Ctrl-V для копіювання та вставки з терміналом.

Інша частина рішення повинна була бути зрозумілою зі сторінки stty man, але це не було (для мене). Я закінчив просто експериментувати, грунтуючись на різних підказках, таких, як розміщені вище.

Я вирішив, який нечисловий ключ я хочу замінити Ctrl-C як команду завершення. (Я використав "k"). Я ніколи не знаходив жодної інформації про те, як передати модифікатор зміни до stty, тому я відмовився від цього. З цим рішенням все, що мені потрібно було зробити, - це ввести в командний рядок наступне:

stty intr \ ^ k

Я перевірив, що все працює, як хочеться.

Тепер мені просто довелося розмістити одну команду вище (stty intr \ ^ k) у сценарії запуску. Я не впевнений, який із них є "правильним". Я хотів би, щоб ця зміна була широкомасштабною та постійною.

Будь-які пропозиції щодо того, до якого сценарію я повинен розмістити команду?

І нарешті, що стосується проповідницьких відповідей, вони є непотрібними та непотрібними.


Ви коли-небудь визначали, яким є «правильний» сценарій запуску, або кращий спосіб це зробити? Я борюся з цією самою проблемою (ваше оригінальне запитання). Але хоча я можу змусити 'stty intr \ ^ k' прив’язати ctrl-k, це не розв’язування ctrl-c і ні 'stty intr undef', ні 'stty intr = ^ -' зробити це, ctrl-c все ще надсилає інтерп'ют . І "stty -a" ніколи не показує змін, які я змінив.
EricS

4

Деякі з цих параметрів можна встановити за допомогою звичайного механізму швидкого доступу клавіатури KDE. У меню "Налаштування" Konsole натисніть на "Налаштувати ярлики", і ви отримаєте діалогове вікно, за допомогою якого можна змінити прив'язки клавіш до функцій, якими керує KDE. Це дозволить вам перезаписати Ctrl + C для копіювання та Ctrl + V для вставки - але майте на увазі, що після цього ці ключові послідовності більше не будуть передаватися до терміналу, тому ви не зможете використовувати Ctrl + C, наприклад, щоб перервати програму.

Інші функції контролюються readlineбібліотекою, яку можна налаштувати, редагуючи файл ~/.inputrc. Щоб отримати Ctrl + Z, щоб повернути будь-які зміни, внесені в поточному рядку, ви хочете додати

C-z: revert-line

але ця послідовність ключів, ймовірно, вже захоплена терміналом, тому вам, можливо, доведеться скористатися, sttyщоб від’єднати її, перш ніж вона запрацює. Спочатку шукайте ^Zу висновку stty -a(як це показано у відповіді Ігнасіо), а потім, наприклад, якщо він з'являється у susp = ^Z, запустіть

stty susp ^-

відключити це ключове відображення.

Інші зміни, про які ви запитуєте, повинні були бути виконані, sttyяк каже Ігнасіо, оскільки це термінальні функції, але я не впевнений, як саме. Проблема полягає в тому, що я не знаю, чи розпізнає термінал Shift або як це зробити, як передати цю інформацію stty.


3

Bash використовує emacsабо viрежим у командному рядку. У ньому немає поняття "вибір" чи "буфер обміну". У ньому використовуються такі речі, як "буфер вбивства" та "точка", "позначка", "слово", "рядок", "вбити" та "тріскати" тощо.

Спроба ввімкнути функціональність у стилі графічного інтерфейсу буде в кращому випадку неприємною і не працюватиме повноцінно. Ви повинні спробувати об'єднати функції stty, readlineі ваш термінал (імовірно Terminal.appдля вас). Вам потрібно буде перепризначити функції , такі як intr, susp, lnextі т.д., так що ви можете використовувати свої можливості.

Я настійно рекомендую проти таких радикальних модифікацій. Він просто не був розроблений для того, щоб робити те, що ти хочеш.

Коли в Римі ...


Дейв, для системи, яка працює як OS X, я можу запропонувати вам використовувати OS X? Як натякав Денніс, навіть якщо ви зможете змусити його працювати, ви будете сильно обридлі, коли будете входити як-небудь, окрім як на власній машині.
msw

Я не можу поручити інші команди, але копіювання та вставка мають ідеальний сенс у вікні команд, і вони дуже зручні. Я їх постійно використовую для копіювання та вставлення між іншими вікнами та консоллю, і роблю це вже багато років. Shift-Ctrl-C і Shift-Ctrl-V працюють таким чином для Konsole поза коробкою. І хоча я роблю це щодня протягом багатьох років, я неминуче забуваю і натискаю Ctrl-c у Консолі. Особисто я готовий припинити застосовувати прислів’я "коли в Римі" і переробляти їх, щоб вони працювали, як практично ВСЕ інше, що існує.
EricS

1

Я запускаю Ubuntu і змінив ярлик для Copy із стандартного Ctrl+ Shift+ Cна більш звичайний і простий Ctrl+ C. Це , однак , змусив мене бігти в проблему не в змозі послати команду переривання ^ C .

Завдяки відповіді @Paul я знайшов запуск команди

tty intr \^k

Дозволяє мені надсилати команду переривання за допомогою Ctrl+ K. Однак цю команду потрібно було запускати щоразу, коли я відкриваю термінал, який є клопотом (так само, як він згадав про себе).

Трохи подальших досліджень (googling 😂) я виявив, як виконувати команду щоразу, коли термінал відкривається (все одно в Ubuntu) .

Таким чином, нарешті виконання наступної команди (один раз) (в Ubuntu 18.04 і, швидше за все, більше) дасть очікувану поведінку щоразу.

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

Нарешті, варто згадати, що ти не повинен користуватися Kкнопкою. Ви можете обміняти букву k у всіх командах вище на будь-яку буквену клавішу на ваш вибір.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.