Как скопировать текст из моего xterm без мыши? - PullRequest
28 голосов
/ 23 ноября 2008

Я хочу использовать часть вывода команды, запущенной из командной строки, в другом xterm или в составе другой команды. Например:

> grep error error.log
error: can't find file ~/<some very long path>/thisfile

и я хочу сделать это:

>ls ~/<some very long path>/

Я знаю два способа сделать это:
1. Скопируйте ~/<some very long path>/ с помощью мыши.
2. использовать некоторую комбинацию head / tail / awk / sed / perl / cut / etc ..., чтобы извлечь из вывода только то, что мне нужно, а затем использовать , что внутри спины.

Есть ли способ скопировать текст без использования мыши? Пример, который приходит на ум, это визуальный режим внутри VIM, но я не знаю, как это сделать внутри xterm.

Ответы [ 5 ]

39 голосов
/ 23 ноября 2008

Вы можете использовать команды копирования и вставки экрана GNU.

Краткое руководство:

  1. Открыть экран: screen (или screen myprog my args here)
  2. Запустите вашу программу, создавая вывод, который вы хотите скопировать
  3. Вход в режим копирования: Контроль + a + [
  4. Переместите курсор в начальную точку
  5. Hit Enter
  6. Переместите курсор в конечную точку
  7. Hit Enter
  8. Вставить: Контроль + a + ]

Экран намного более мощный, чем этот (я использую его для вкладки нескольких виртуальных терминалов без необходимости специального эмулятора терминала, а также для того, чтобы не терять сеансы при сбое X или чем-то еще). Чтобы выйти из экрана, просто завершите сеанс оболочки или введите Ctrl + a , Ctrl + \ .

11 голосов
/ 26 ноября 2008

Я считаю XSel полезен в подобных ситуациях. Это инструмент, который манипулирует выбором X. Например, это сохранит вывод вашей команды в буфер обмена:

grep error error.log | xsel -bi
6 голосов
/ 25 февраля 2015

Вы также можете использовать tmux, который имеет аналогичные возможности до screen. Как только вы попали в tmux и у вас есть вывод, который вы хотите скопировать, вы можете сделать следующее, чтобы скопировать, а затем вставить его:

  1. Войдите в режим копирования с помощью Ctrl + B , [
  2. Переместите курсор с помощью клавиш со стрелками, а затем начните выделение с помощью Ctrl + Пробел
  3. Переместите курсор, чтобы выбрать текст / регион для копирования, а затем скопируйте с помощью Alt + W (это немедленно выведет вас из режима копирования)
  4. Теперь вы можете вставлять (только в tmux), используя Ctrl + B , ]

В этих инструкциях предполагается, что emacs привязки клавиш включены. Для привязок vi см. Это сравнение или просто следуйте этому пошаговому руководству.

2 голосов
/ 23 ноября 2008

ОП сказал, что не хотел этого делать, но вот Unix использует способ сделать это для потомков. Если вы изучите эти маленькие утилиты Unix, они могут быть очень мощными.

ls $ (dirname $ (ошибка grep error.log | head -1 | cut -d "" -f 5-))

примечание: синтаксис из памяти

1 голос
/ 27 ноября 2008

Вы можете отправить вывод напрямую соответствующему xterm, используя устройство xterm №. Вот команда.

xyz$ls /home/ankit/documents/etc/x/y/z > /dev/pts/0 

(или каково бы ни было имя устройства, Вы можете получить его, используя команду 'w' для открытого xterm)

Попробуйте и надеюсь, что это может решить вашу проблему.

...