compizomania
Копировать, вставить (англ. copy, paste) — набор функций для работы приложений с буфером обмена операционной системы. Копировать и перемещать можно файлы и части объектов (текста, изображения, звука и т. д.). С точки зрения пользователя, реализуется следующими функциями:
Копировать (англ. copy) — помещает фрагмент в буфер обмена, оставляя документ без изменений.
Вставить (англ. paste) — вставляет в текущий документ фрагмент, находящийся в буфере обмена.
Стандартно для копирования и вставки объектов в Linux также как и в Windows используются сочетания клавиш Ctrl+C и Ctrl+V. При копировании текст (или любой другой объект) в таком случае попадает в буфер обмена. Затем вы можете вставить этот текст в другом месте.
В терминале Linux для копирования и вставки не работают стандартные сочетания Ctrl+V, Ctrl+C. Это связано с тем, что исторически Ctrl+C — это сочетание клавиш для прерывания текущего процесса в терминале, которое было назначено задолго до того, как были разработаны графические оболочки.
Предположим, вы набрали следующую команду и нажали Enter.
Команда ls начнет рекурсивно (R) перечислять все файлы и каталоги, начиная с корневого каталога. Через пару мгновений вы понимаете, что это не то, что вам нужно, поэтому вы завершаете процесс, нажимая Ctrl+C:
Процесс ls завершен. Видимое свидетельство Ctrl+C выделено на скриншоте. Он отображается как ^C.
Поэтому, для копирования и вставки при работе в терминале используются сочетания: Ctrl+Shift+C и Ctrl+Shift+V, которые легко запомнить, т.к. они очень похожи на стандартные Ctrl+V и Ctrl+C.
Если вы выделите текст в окне терминала и нажмете Ctrl+Shift+C вы скопируете этот текст в буфер обмена. Вы можете использовать Ctrl+Shift+V чтобы вставить скопированный текст в то же или в другое окно терминала.
Но обратите внимание, когда вы вставляете скопированный текст из терминала в графическое приложение, а не в окно терминала, вы должны использовать Ctrl+V и наоборот.
Я часто публикую статьи с терминальными командами, которые нужно скопировать в браузере и вставить у себя в терминал для выполнения.
Так вот, для копирования команды в браузере, её нужно выделить и нажать сочетание клавиш Ctrl+C, а для вставки в терминал — Ctrl+Shift+V.
Переназначить сочетание Ctrl+Shift+C и Ctrl+Shift+V на Ctrl+C и Ctrl+V можно здесь же в Параметры-Комбинации клавиш, кликом на строке и нажатием новой комбинации на клавиатуре, НО!, тогда вы лишитесь команды принудительно завершающей процесс в терминале в случае необходимости, т.к. переназначить её на другие клавиши НЕВОЗМОЖНО. Лучше оставить всё как есть и просто запомнить сочетание Ctrl+Shift+C и Ctrl+Shift+V.
Работа с буфером обмена в Linux: теория и практика
Исторически сложилось так, что в X Window System (X11, — оконная система для Linux, UNIX) существует два буфера обмена.
Один из них (clipboard) похож на буфер обмена в Windows — при нажатии на Ctrl+Insert или Ctrl+C выделенный фрагмент (текст, картинка, файл) копируется в буфер обмена, а при нажатии на Shift+Insert (или Ctrl+V) — вставляется из него. Следует заметить, что во многих программах эти сочетания зарезервированы для иных целей и приходится пользоваться другими — например, в терминале сочетание Ctrl+C используется для завершения процесса, а для работы с буфером обмена используются сочетания Ctrl+Shift+C для копирования и Ctrl+Shift+V для вставки.
Второй буфер (primary) является специфичным для оконной системы X11. Выделенный текст незамедлительно попадает в буфер primary, и для того, чтобы вставить скопированный текст, достаточно лишь нажать среднюю кнопку мышки (колёсико). У кого в наличии не имеется трёхкнопочной мышки, а так же владельцам ноутбуков с тачпадами следует одновременно нажать левую и правую кнопки мышки для вставки текста.
Обычно эти буферы не связаны друг с другом (некоторые программы некорректно их обрабатывают и считают, что это один и тот же буфер обмена). Следовательно, хранящиеся в них данные не влияют друг на друга, что, несомненно, крайне удобно. Следует заметить, что при закрытии программы, из которой были скопированы данные, содержимое буфера обмена теряется.
Практика
Для решения проблемы утери данных из буфера обмена при закрытии программы существует сторонний софт. Например, Clipboard Daemon. Этот маленький демон держит содержимое буфера обмена в памяти независимо от того, было ли закрыто приложение, из которого скопированы данные.
- Parcellite — многообещаюший менеджер буфера обмена на GTK
- glipper — для Gnome
- klipper — для KDE
- wmcliphist — для Window Maker
- и куча других (в том числе для Windows, Mac OS и прочего).
Существует так же весьма и весьма полезная в умелых руках утилита под названием xclip, предназначенная для работы с буферами обмена из командной строки. Копирование и вставка текста осуществляется простыми командами, что позволяет использовать её в различного рода вспомогательных скриптах, примеры которых я продемонстрирую ниже.
К сожалению, официальная версия xclip у меня с кириллицей корректно не заработала, несмотря на то, что я собирал последнюю версию. Поэтому я предлагаю скачать и собрать версию xclip для дистрибутива Alt Linux.
Скрипты
Update 2: по просьбе хабраюзера dimaka добавил скрипты для перевода:
Update 3: Добавление пункта «копировать полный путь текущего файла» в меню Midnight Commander (Добавить в файл ~/.mc/menu):
_________
Текст подготовлен в редакторе VIM 😉
Буфер обмена в 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 работает особенным образом — в буфер копируется вся текущая строка, введенная в терминале, независимо от того, выбрали вы какой-нибудь текст мышкой или нет, а сама строка пропадает с экрана.