Есть несколько способов. Некоторые из упомянутых способов включают (я думаю) tmux, screen, vim, emacs и оболочку. Я не знаю emacs или screen, поэтому я перейду к остальным трем.
Tmux
Хотя это не выбор X, tmux имеет режим копирования, доступный через prefix-[
(prefix
- это Ctrl + B по умолчанию). Буфер, используемый для этого режима, является отдельным и эксклюзивным для tmux, что открывает немало возможностей и делает его более универсальным, чем выбор X в нужных ситуациях.
Чтобы выйти из этого режима, нажмите q ; для навигации используйте привязку vim
или emacs
(по умолчанию = vim), поэтому hjkl
для движения, v/V/C-v
для выбора персонажа / линии / блока и т. д. Когда у вас есть выбор, нажмите Enter для копирования и выхода из режима.
Чтобы вставить из этого буфера, используйте prefix-]
.
Shell
Любая установка X11
, по-видимому, идет с двумя программами по умолчанию: xclip
и xsel
(вроде как и с startx
и xinit
). В большинстве других ответов упоминается xclip
, и мне очень нравится xsel
за его краткость, поэтому я собираюсь охватить xsel
.
С xsel (1x) :
Параметры ввода
-a, --append
добавить стандартный выбор к выбору. Подразумевает -i .
-f, --follow
добавить к выбору по мере увеличения стандартного ввода. Подразумевает -i .
-i, --input
читать стандартный ввод в выборку.
Варианты вывода
-o, --output
записать выборку в стандартный вывод.
Опции действий
-c, --clear
очистить выбор. Переопределяет все параметры ввода.
-d, --delete
Запросить удаление текущего выбора. Это не только очищает выделение, но и запрашивает программу, в которой находится выделение, об удалении выделенного содержимого. Переопределяет все параметры ввода.
Варианты выбора
-p, --primary
работает на первичном выборе (по умолчанию).
-s, - среднее
работают на ВТОРИЧНОМ выборе.
-b, --clipboard
работает с выбором CLIPBOARD.
И это все, что вам нужно знать. p
(или ничего) для PRIMARY
, s
для SECONDARY
, b
для CLIPBOARD
, o
для вывода.
Пример: скажем, я хочу скопировать вывод foo
из TTY и вставить его на веб-страницу для сообщения об ошибке. Для этого было бы идеально скопировать в / из сеанса TTY / X. Поэтому возникает вопрос как получить доступ к буферу обмена из TTY?
В этом примере мы предположим, что сеанс X отображается :1
.
$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
Тогда я могу Ctrl-V
принять форму, как обычно.
Теперь скажите, что кто-то на сайте поддержки дает мне команду на запуск, чтобы решить проблему. Это сложно и долго.
$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
Заказ пиццы похоже на продуктивное использование командной строки.
... двигаясь дальше.
Vim
Если скомпилировано с +clipboard
(это важно! Проверьте vim --version
), Vim должен иметь доступ к выборкам X PRIMARY
и CLIPBOARD
. Эти два выбора доступны из регистров *
и +
, соответственно, и могут быть записаны и считаны на досуге так же, как и любой другой регистр. Например:
:%y+ ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example
Если ваша копия vim напрямую не поддерживает доступ к выборкам X, это еще не конец света. Вы можете просто использовать технику xsel
, как описано в последнем разделе.
:r ! xsel -bo ; read (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b ; write (w) to the stdin of (!) `xsel -b`
Свяжите пару комбинаций клавиш, и все будет хорошо.