Как скопировать текст из командной строки в буфер обмена без использования мыши?


10

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

Ctrl+a - перейти к началу строки.

Ctrl+k - режет всю линию.

Ctrl+y - дергает вырезанный текст обратно.

В качестве альтернативы я также могу использовать Ctrl+uдля выполнения первых 2 шагов.

Это, конечно, работает, но я пытаюсь выяснить, где именно сохранен вырезанный текст. Есть ли способ получить к нему доступ без использования Ctrl+y? Я знаю xclipи даже использую его для передачи текста прямо в буфер обмена, поэтому я думал о передаче данных, сохраненных Ctrl+kв xclip, но не уверен, как это сделать.

Метод, который я получил до сих пор, - это написание скрипта, который используется xdotoolдля добавления echoв начало строки и | zxcдо конца строки, а затем нажимает клавишу enter ( zxcявляясь пользовательским псевдонимом, который в основном передается по конвейеру xclip). Это также работает, но это не очень «чистое» решение.

Я использую Cshell, если это что-то меняет.

РЕДАКТИРОВАТЬ: я не хочу использовать screenв качестве решения, забыл упомянуть об этом.

Спасибо!


Не имеет значения, но также полезно знать: Shift-Ins вставляет выделение в xterm, если вы хотите не только вырезать текст, но и вставлять его.
dirkt

Ответы:


7

При использовании xtermили производной вы можете настроить привязки клавиш для начала и окончания выделения текста и сохранить его в качестве основного выделения X11 или буфера вырезания. См man xterm. Например, добавьте в свой ~/.Xdefaults:

XTerm*VT100.Translations: #override\n\
    <Key>KP_1: select-cursor-start() \
            select-cursor-end(PRIMARY, CUT_BUFFER0)\n\
    <Key>KP_2: start-cursor-extend() \
            select-cursor-end(PRIMARY, CUT_BUFFER0)\n

Вы можете иметь только одну XTerm*VT100.Translationsзапись. Обновите сервер X11 новым содержимым файла с помощью xrdb -merge ~/.Xdefaults. Начать новый xterm.

Теперь, когда у вас есть некоторый ввод в командной строке, ввод 1с цифровой клавиатуры начнет выделять текст в текущей позиции текстового курсора, так же, как при нажатии кнопки 1 на мышке. Переместите курсор с помощью клавиш со стрелками, затем нажмите 2цифровую клавиатуру, и промежуточный текст будет выделен и скопирован в основной выбор и обрезной буфер0. Очевидно, что можно выбрать другие более подходящие ключи и действия. Вы можете аналогичным образом вставить выделение с привязками, как insert-selection(PRIMARY).


Это здорово! Я понятия не имел, что ты можешь сделать это. Очень полезно! Можно ли использовать его в консоле?
Санчо Панчо

2
Я быстро взглянул на руководство konsole, но оно не упоминает этот вид управления. Маловероятно, что вы найдете это в большинстве эмуляторов терминала, поскольку они предпочитают предоставлять настройки, которыми проще управлять через меню и диалоги.
Мех,

translationsРесурс является функция X Toolkit упоминается здесь и там , который не имеет аналогов в других инструментариев. Однако вы можете переключаться между наборами переводов, используя эту keymapфункцию (отмечая комментарий «У вас может быть только один»).
Томас Дики

Спасибо за все комментарии. Все еще не узнал о буфере обмена ctrl-k / ctrl-y, кто-нибудь знает, как получить к нему доступ или где он на самом деле сохраняет вырезанный текст?
Санчо Панчо

@SanchoPancho В зависимости от вашего csh, он реализует внутреннее kill-ring, которое сохраняет вырезанный текст и возвращает его с привязками yank и yank-pop. Я не думаю, что у вас есть другой доступ к этому кольцу. увидеть человека CSH .
meuh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.