18

Я использую 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 не делал раньше).

Как мне сделать эти изменения?

Кстати, мне нравится, как терминал работает в OS X. Использование клавиши командной строки делает все команды копирования / вставки очень согласованными (в отличие от многих других вещей в OS X).

PS Я прочитал справочную страницу bash, и это не помогло. Это дало мне идеи, но мне нужны конкретные примеры для вышеуказанных комбинаций. Благодарю.

4 ответа4

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
7

Это почти полностью решено сейчас. Часть решения была впервые доведена до моего сведения 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, но это не было (для меня). В итоге я просто экспериментировал, основываясь на различных подсказках, таких как те, что были опубликованы выше.

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

stty intr \^ k

Я проверил, что все работает как хотелось.

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

Любые предложения относительно того, в какой скрипт я должен поместить команду?

И наконец, что касается ответов на проповеди, они не нужны и бесполезны.

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 в командной строке. Он не имеет понятия "выбор" или "буфер обмена". Он использует такие вещи, как "kill buffer" и "point", "mark", "word", "line", "kill" и "yank" и т.д.

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

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

Когда в Риме...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .