Как настроить ctrl c ctrl v на линукс

Обновлено: 05.07.2024

Когда я копирую что-то в буфер обмена и нажимаю Ctrl + V в Bash, ничего не происходит; Тем не менее, щелкнув правой кнопкой мыши и выбрав Вставить, сделает работу.

Почему? Есть ли какая-либо разумная проблема (я уверен, что есть) за этим поведением в Linux?

Вы также можете использовать Shift + Insert в большинстве оболочек.

Во времена физических терминалов буфер обмена в течение сеанса не существовал, лишь немногие программы поддерживали внутреннее копирование / вставку - часто под названием «буферы» или «кольца уничтожения» - и использовали различные нажатия клавиш. Например, оболочка bash использует Ctrl K или Ctrl U «убивать» (вырезать), Ctrl Y «дергать» (вставлять); это происходит от в Emacs редактора .

Ctrl C почти везде в Unix была клавиша «прерывание» , используемая для отмены текущей программы или операции. Ctrl V Ключ часто означает «дословную вставку» - то есть, вставить следующий символ буквально без выполнения каких - либо соответствующих действий. Например, нормальный Esc переключается в режим в команду VI редакторе, но Ctrl V , Esc будет вставлять ESC символ в документ.

Использование Ctrl C копировать и Ctrl V вставлять из буфера обмена всей сессии было введено Mac OS в 1983 году и Microsoft Windows 3.x в 1990 году. (Более ранние версии Windows (1.x и 2.x), а также IBM OS / 2 , поддерживается только ключи IBM CUA Ctrl Ins для копирования и Shift Ins вставки; эти сочетания клавиш поддерживаются всеми версиями Windows.)

Когда GUI с поддержкой буфера обмена наконец достигли Unix, Ctrl нажатия клавиш уже использовались многими терминальными программами. Кроме того, графический интерфейс X имел несколько иные механизмы : «выборки» и «обрезки буферов». Даже сейчас вы можете выделять текст в одной программе и вставлять его с помощью средней кнопки мыши, без каких-либо явных действий копирования.

Короче говоря, к тому времени, когда были написаны Xterm и GNOME Terminal (я полагаю, вы используете последний), они Ctrl V уже много лет имели совершенно другое значение и не могли быть изменены. Кроме того, альтернативный метод копирования текста - «выделение» - уже присутствовал в X11, поэтому явное действие копирования / вставки, вероятно, считалось не таким важным, как в Windows. Это означает, что нужно было выбирать разные сочетания клавиш - например, большинство современных терминальных программ, таких как GNOME Terminal, используют Ctrl Shift C и Ctrl Shift V . (Если вы используете Xterm, те же самые ярлыки можно добавить вручную, используя Xresource XTerm * vt100 * translations . Rxvt не имеет такой опции.)

(Большинство наборов инструментов X11 также поддерживают клавиши «копировать» и «вставить» CUA, которые не конфликтуют с терминальными программами. К сожалению, реализации довольно противоречивы - Ctrl Ins копии в «буфер обмена» в большинстве программ (GTK, Qt4, но игнорируются Xaw), однако, Shift Ins вставляет из "первичного выбора" в большинстве программ GTK и Qt4, но из "буфера обмена" в Firefox и из устаревших теперь буферов среза в устаревшем Xaw.)

Все , что сказал, некоторые терминалы или консоли (в частности, для Windows 10 консоли) сделать поддерживают эти ключи. Поскольку консоль Windows всегда имела отдельный режим «пометить / выбрать», Ctrl C теперь она также имеет два значения в зависимости от контекста - в обычном режиме она отправляет прерывание, в режиме выбора она копирует в буфер обмена (так же, как Enter раньше).

Между тем, инструменты командной строки Windows никогда не использовались Ctrl V для чего-либо, поэтому он должен был «вставлять», ничего не мешая. Однако сделать то же самое на Unix-подобных терминалах было бы более проблематично.

Copy paste Linux

Хочу рассказать о некоторых особенностях буфера обмена в Linux. О буфере копирования и про буфер выбора (первичный буфер), а также про копирование и вставку текста в терминале.

Буфер копирования

Стандартно для копирования и вставки объектов в Linux используются сочетания клавиш Ctrl+C и Ctrl+V. При копировании текст (или любой другой объект) в таком случае попадает в обычный буфер копирования. Затем вы можете вставить этот текст в другом месте.

Буфер выбора (первичный буфер)

В Linux существует еще буфер выбора или первичный буфер. Текст, который вы выделяете в любой программе, автоматически попадает в буфер обмена! Это удобно, выделил текст, открыл другое окно и вставил этот кусок текста. Есть некоторые исключения, но они незначительны. Например, у меня в Ubuntu это не работает, если программа использует JVM (Java Virtual Machine).

Кстати, именно этим объясняется следующие поведение. Вы выделили текст в программе, затем открыли другую программу и выделили какой-нибудь текст в ней. После этого, выделение текста в первой программе автоматически снимется, а текст который вы выделили последним, попадет в буфер выбора.

Копирование и вставка в терминале

В терминале для копирования и вставки не работают стандартные сочетания Ctrl+V, Ctrl+C. Это связано с тем, что исторически Ctrl+C это сочетание клавиш для прерывания текущего процесса. Поэтому, для копирования и вставки при работе в терминале используются сочетания Ctrl+Insert и Shift+Insert соответственно. В Gnome терминале и, наверное, во многих других также работают сочетания Shift+Ctrl+C и Shift+Ctrl+V. Они же указаны в главном меню программы в разделе Правка.

Также в терминале работают сочетания клавиш Ctrl+U, чтобы вырезать текст; и Ctrl+Y для вставки текста. Сочетание Ctrl+U работает особенным образом — в буфер копируется вся текущая строка, введенная в терминале, независимо от того, выбрали вы какой-нибудь текст мышкой или нет, а сама строка пропадает с экрана.



Раньше, у меня довольно часто возникала такая ситуация, когда одновременно работаешь в терминале и, например, в браузере.
После нескольких часов работы начинаешь путаться и в терминале вместо [Ctrl]+[Shift]+[C] нажимаешь [Ctrl]+[C], а в браузере наоборот. В итоге в терминале вы получаете прерывание а в браузере вместо ожидаемого эффекта у вас медленно прогружается дебаггер.
В один прекрасный момент меня это достало и я решил, что пора что-то менять.

До того как я переустановил на своей рабочей машине OSX на Linux, я успел привыкнуть к довольно приятной реализации сочетаний клавиш. А точнее к тому, что все основные операции, такие как «Вырезать», «Копировать» и «Вставить», все они используют кнопку [Cmd] (аналог кнопки [Win] на PC), а не [Ctrl], как это сделано по умолчанию в Linux и Windows. Это очень удобно, так как, повторюсь, если вы часто работаете в терминале, вы имеете единые сочетания клавиш для копирования и вставки как и во всех других приложениях, а прерывание всегда остается на своем месте [Ctrl]+[C].
Вы так же олучите профит от такого способа, если вы используете тайловый оконный менеджер, т.к. в большинстве случаев для использования стандартных операций и переключений между тэгами/окнами вам не придется снимать палец с вашего modkey

Конечно настраивать сочетания клавиш можно в конфигах каждого определенного приложения, но это слишком не удобно, к тому же не каждое приложение поддерживает такую настройку. По этому я решил просто забиндить стандартные сочетания клавиш на те, что нужны мне.
Т.е. нажимая [Win]+[C], ваш терминал будет думать, что вы нажимаете [Ctrl]+[Shift]+[C], а все остальные приложения, что [Ctrl]+[C].

Для реализации задуманного нам понадобятся программа, которая будет отслеживать наши нажатия, например xbindkeys или же можно воспользоваться штатными возможностями вашего оконного менеджера, и эмулятор нажатий на клавиши, их несколько: xdotool, xte и xvkbd.

Правда с первыми двумя у меня возникал один преинтереснийший глюк: если например вы нажимете [Win]+[A], эмулятор покорно передаст [Ctrl]+[A] в приложение, а приложение увидит что нажаты все три клавиши [Win]+[Ctrl]+[A] и не обработает такое сочетание. Этот весьма неприятный баг было не просто обнаружить, так как не помогала даже опция --clearmodifiers для xdotool, которая, казалось бы, специально для такого случая и создана. В xkdbb подобного поведения замечено не было.

Начнем, пожалуй с xbindkeys. Отключем все CapsLock, NumLock и прочие модификаторы, запускаем:

Открывается окошко, в окошке нажимаем сочетание [Win]+[A], в терминале получаем такой вывод:

где Mod4 — это наша клавиша [Win]. Это же можно использовать для написания конфига xbindkeys:

/.xbindkeysrc и пишем:

Теперь запустим xbindkeys:

И попробуем нажать [Win]+[A], эффект будет такой-же как и если бы вы нажали [Ctrl]+[A]


Ок, с этим разобрались, но как нам передавать различные сочетания клавиш, при нажатии одних и тех же кнопок, в зависимости от программы с которой мы работем?
На помощь приходит все тот же xdotool и xprop, с помощью которых мы определяем является ли активное окно терминалом.

Давайте напишем простенький скрипт и положим его в /bin/copypaste.sh:

Используйте xprop, если вы не знаете какой класс использует ваша программа:
и клик на окне

Всем нам удобно работать с единообразными интерфейсами. Любому человеку просто необходимо, чтобы одни и те же действия в разных программах выполнялись одинаковым образом. Только тогда пользователь сможет эффективно и безошибочно работать.

К сожалению, терминальные программы системы Linux стоят особняком от данного принципа. Причины кроются в закостенелой природе UNIX-терминалов и использовании принципов, считающимися нормой тридцать лет назад, но выглядящие дико с позиции современного пользователя. Примером такой дикости могут служить самобытные сочетания клавиш, предназначенные для рутиных действий. Например, многие красноглазые друзья считают, что использовать для копирования и вставки текста традиционные клавиши Ctrl+C/Ctrl+V в терминальных программах невозможно. В данной статье будет рассказано, как все-таки заставить работать эти привычные сочетания клавиш.

Вначале стоит объяснить, почему некоторые сочетания клавиши Ctrl+буква "заняты" как в чистой консоли, так и в программах эмуляции терминала (XTerm, Konsole, Gnome-trminal). Все дело в том, что UNIX-терминал должен иметь возможность отсылать командной оболочке так называемые "сигналы". Эти сигналы командная оболочка использует для управления процессами.

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

  • intr - Послать сигнал прерывания текущего процесса
  • quit - Послать сигнал выхода
  • erase - Удалить последний введенный символ
  • kill - Удалить текущую строку
  • eof - Послать конец файла (завершить ввод)
  • eol - Конец строки
  • eol2 - Альтернативный символ конца строки (Не-POSIX)
  • swtch - Переключиться на другой уровень оболочки (Не-POSIX)
  • start - Запустить вывод далее, если он был приостановлен
  • stop - Приостановить вывод
  • susp - Послать сигнал остановки терминала
  • dsusp - Послать сигнал остановки терминала после сброса ввода (Не-POSIX)
  • rprnt - Перерисовать текущую строку (Не-POSIX)
  • werase - Удалить последнее введенное слово (Не-POSIX)
  • lnext - Протолкнуть в ввод следующий символ, даже если это специальный символ

Чтобы узнать, к каким комбинациям клавиш привязаны действия, можно дать команду:

Сия команда выведет на консоль примерно такой текст:

speed 38400 baud; rows 35; columns 110; line = 0;
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; 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

из него видно, что заняты комбинации клавиш Ctrl+C (^C) и Ctrl+V (^V) (а Ctrl+X, кстати, свободна).

Если писать точнее, то мы видим, что:

  • При нажатии комбинации Ctrl+C происходит действие intr. Действие intr означает отправку сигнала SIGINT, который сигнализирует консольной программе что нужно завершить работу.
  • При нажатии комбинации Ctrl+V происходит действие lnext. Это действие означает, что следующий вводимый символ надо воспринимать как символ, а не как команду (Последовательное нажатие Ctrl+V и Ctrl+A протолкнет в терминал символ ^A, имеющий код 01h).

Что мы должны сделать в такой ситуации, чтобы освободить Ctrl+C и Ctrl+V? Вначале подумать, а нужны ли нам действия intr и lnext. Действие intr вроде как нужно. А возникала ли у вас хоть раз необходимость в действии lnext? Нет? Значит, ненужно.

Почитав невнятную документацию по программе stty, кое-как можно понять, что для освобождения комбинации Ctrl+V нужно просто удалить привязанное к комбинации действие lnext. Для этого нужно воспользоваться командой:

$ stty lnext undef

Теперь осталось решить, что делать с intr (Ctrl+C). Однозначно, данное действие нам нужно, и его надо перевешивать на другую комбинацию клавиш. Но на какую? Разумно было бы перевесить на Ctrl+Break. Но как обозначается Break, в документации по stty не написано. Так же не написано, может ли вообще stty работать с не-ASCII символами (коды 0-127). Да и вообще непонятно, работает ли stty с символами или с кодами клавиш. Судя по всему, stty оперирует именно абстракцией "символ". А если так, то символа Break нет как понятия (хотя, возможно, есть символ Pause, который как раз завязан на ту же клавишу, но тут нужно разбираться).

Поэтому, пока никто не подсказал решения для Ctrl+Break, перевесим Ctrl+C на другое сочетание. Вначале хотел перевесить на Ctrl+0 (Ctrl+Ноль), но оказалось, что stty этого сделать не может. Вообще, создается впечатление, что stty может перенастраиваться только на 26 букв латинского алфавита (и, возможно на некоторые знаки препинания), которые можно задавать десятичными кодами 1-26. Например, команда "stty intr 10" задаст для действия intr комбинацию Ctrl+J, т.к. буква J - десятая буква в латинском алфавите. Если задавать коды не из диапазона 1-26, терминал начинает неимоверно глючить.

Чтоб было легче запомнить, настроим действие intr на комбинацию Ctrl+Q (ибо Q - это "quit", "выход").

Обратите внимание, что команда "stty -a" показывает, что Ctrl+Q сопоставлено с действием start. Это действие вызывает команду "продолжать вывод на теринал после приостановки вывода" (приостановка вывода делается с помощью действия stop клавишами Ctrl+S). Учитывая современные скорости выстреливания символов в поток вывода, нам действия start/stop не нужны. Так что спокойно будем использовать комбинацию Ctrl+Q как нам заблагорассудится.

Сначала нужно освободить комбинацию клавиш Ctrl+Q от действия start

$ stty start undef

Затем выполняем команду:

и после нее, сразу, прерывание программы будет работать по Ctrl+Q (вместо традиционного для консоли Ctrl+C). Работу комбинации Ctrl+Q можно проверить на любой подходящей программе cat, top, и т.д.

stty lnext undef

stty start undef

можно поместить в файл .bashrc в домашней директории пользователя, и терминал с этого момента будет запускаться со свободными комбинациями Ctrl+C и Ctrl+V.

После такой настройки терминала можно в программе-эмулятора терминала (XTerm, Konsole, Gnome-trminal, . ) настроить комбинацию Ctrl+C для копирования в буфер, и Ctrl+V для вставки из буфера. И эти комбинации будут работать!

Терминал - один из самых мощных инструментов Linux. С помощью него можно настроить и сделать практически всё в этой операционной системе. Чтобы сделать работу в терминале ещё более удобной и продуктивной разработчики добавили различные сочетания клавиш.

В этой статье мы собрали самые полезные горячие клавиши терминала Linux, которые могут пригодится вам в работе. Здесь есть комбинации клавиш для навигации по истории команд, коррекции ошибок и управления окном терминала. Все клавиши расположены в случайном порядке.

Горячие клавиши терминала Linux

1. Tab

Без этого сочетания терминалом пользоваться невозможно, и поэтому его знают все. Одно нажатие клавиши Tab автоматически дополняет текущую команду или путь к файлу если возможен только один вариант. Два нажатия по ряд показывают возможные варианты автодополнения. Это делает набор команд и путей к файлам намного быстрее.

2. Ctrl + R

После нажатия Ctrl+R появляется строка поиска в которой вы можете начать вводить имя команды, которую надо выполнить. Система найдёт все команды, которые ранее выполнялись с таким началом и отобразит самую свежую. Вы можете уточнить поиск добавив ещё несколько символов. Для выполнения команды просто нажмите Enter, для редактирования Esc.


3. Ctrl + C

Это сочетание клавиш позволяет прервать работу любой программы, которая выполняется в терминале. После нажатия Ctr + C программе отправляется сигнал SIGINT и если она не обрабатывает его особым образом выполнение программы завершается. Некоторые программы перехватывают сигнал и перед завершением выполняют кое какие действия по сохранению данных и завершению операций, например пакетный менеджер zypper.

4. Ctrl + Z

С помощью Ctrl+Z вы можете перевести текущую программу в фоновый режим. Обычно, если вам надо чтобы программа выполнялась в фоновом режиме просто добавьте символ & после команды. Но если вы забыли это сделать поможет это сочетание клавиш. Чтобы посмотреть задачи, которые сейчас работают в фоне используйте команду jobs, а для возврата задачи в нормальный режим - команду fg.

5. Ctrl + D

Сочетание клавиш Ctrl+D можно считать альтернативой команды exit. Если вы подключены по SSH то сессия будет разорвана. Если вы работаете в терминале напрямую, то окно будет закрыто.

6. Ctrl + L

Альтернатива команды clear. Позволяет очистить вывод терминала. Очень удобно для создания снимков экрана и просто для очистки лишней информации.

7. Ctrl+P и Ctrl+N

Эти сочетания клавиш альтернативы клавишам стрелки вверх и вниз. Первое показывает предыдущую введенную команду, а второе следующую. Так вы можете перемещаться по истории команд. Это не удобнее стрелок, но иногда может быть полезно.

8. Ctrl + A и Ctrl + E

Перемещаться можно не только по истории команд, но и по текущей строке. Эти горячие клавиши - аналоги клавиш Home и End. Первая комбинация перемещает курсор в начало строи, а вторая в конец.

9. Ctrl + U и Ctrl + K

С помощью первого сочетания можно удалить весь текст от начала строки до позиции курсора, а с помощью второго - от позиции курсора и до конца строки. Это может быть полезно если вы ввели неверную команду и не хотите стирать её по одному символу.

10. Ctrl + W

Нажав Ctrl+W вы можете стереть слово перед курсором. Если курсор находится в середине слова, то будут стёрты все символы от курсора до начала слова. Удобнее всего ставить курсор после слова, которое нужно убрать.

11. Ctrl + Y

С помощью Ctrl + Y вы можете вставить текст вырезанный с помощью Ctrl + U, Ctrl + K и Ctrl + W. Текст будет вставлен туда, где находится курсор.

12. Ctrl + B и Ctrl + F

Аналог для клавиш стрелка вправо и стрелка влево. Первое сочетание позволяет перемещаться на один символ вправо, а второе на один символ влево.

13. Ctrl + T

Заменяет символ, находящийся под курсором на предыдущий символ. Или перемещает символ перед курсором к концу строки.

14. Ctrl +X затем Ctrl + E

Открывает текущую команду в текстовом редакторе. Если в переменной EDITOR редактор не задан, то будет использоваться nano. После редактирования и сохранения результата команда будет выполнена. Удобно для написания многострочных скриптов.

15. Alt +.

Аналог команды $!. Позволяет вставить последний аргумент предыдущей команды в позицию курсора. Удобно, если надо выполнить несколько команд с одинаковым аргументом.

16. Alt + B и Alt + F

Эти сочетания позволяют перемещаться по словам, также как их аналоги с Ctrl по символам. Alt + B перемещает курсор на слово влево, а Alt+F на слово вправо.

17. Alt + C, Alt + L и Alt + U

Следующие три сочетания клавиш позволяют играть с регистром символов команды. Первое сочетание - Alt + C делает символ под курсором прописным, а все остальные буквы до конца слова строчными. Alt + L делает все буквы до конца слова строчными, а Alt + U - прописными.

18. Ctrl + S и Ctrl + Q

Если команда выводит информацию слишком быстро, а вам надо прочитать её или скопировать, можно попросить терминал поставить на паузу вывод команды. Для этого нажмите Ctrl +S. Чтобы вернуть всё обратно нажмите Ctrl + Q.

Сочетания клавиш эмулятора терминала

Все сочетания клавиш, перечисленные выше будут работать во всех терминалах и эмуляторах терминала, которые используют командную оболочку Bash или другую популярную оболочку. Но у популярных эмуляторов терминала есть свои горячие клавиши, которые могут вам очень сильно пригодится при работе. Давайте рассмотрим их тоже. В этой статье будут использоваться горячие клавиши из Gnome Terminal, но в других терминалах они похожи.

1. Ctrl + Alt + T

С помощью этого сочетания клавиш можно открыть терминал в большинстве дистрибутивов, основанных на Ubuntu и Debian. Это просто, быстро и удобно.

2. Ctrl + Shift + С и Ctrl + Shift + V

Копирование и вставка - очень важные функции операционной системы. Сочетание клавиш Ctrl + C просто не может работать для копирования, потому что оно используется для завершения команды, поэтому для копирования и вставки была добавлена клавиша Shift.

3. Ctrl + Shift + F

Если вам надо выполнить поиск по выводу в терминале можно воспользоваться сочетанием Ctrl + Shift + F. После нажатия откроется окно ввода, в котором вы можете ввести искомое слово.


4. Shift + ЛКМ и Shift + ПКМ

Здесь ЛКМ и ПКМ - это правая и левая кнопка мышки. Такие программы, как screen и tmux в режиме поддержки работы мышью захватывают контроль мышки и вяжут на неё свои функции. Таким образом обычное копирование и вставка могут стать проблемой. Чтобы этого избежать можно выделять текст сочетанием клавиш Shift + ЛКМ и открывать контекстное меню с помощью Shift + ПКМ.

Выводы

В этой статье мы собрали лучшие сочетания клавиш терминала Linux, которые могут пригодится вам в работе с системой или во время её настройки. А какие горячие клавиши нравятся вам? Какие вы используете? Напишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Читайте также: