Использование текста из предыдущих команд

16

РЕДАКТИРОВАТЬ Апрель 2015: Если у вас есть тот же вопрос, я рекомендую также проверить http://xiki.org/


Я знаю, что это не так, как работают терминалы, но мне часто хочется, чтобы был простой способ использования текста (его копирование, изменение и т. Д.), Который уже есть в истории моего окна терминала из некоторых предыдущих выводов команд.

Я представил это так:

Я нахожусь в своей оболочке bash и собираюсь ввести команду, и я понимаю, что мне нужно напечатать что-то, что уже есть на экране несколькими строками выше. Я могу достать мышь и выбрать ее, но я ненавижу это. В настоящий момент я действительно хочу, чтобы весь мой терминал превратился в гигантский буфер Vim, и все это: подсказки, набранные мной команды и вывод этих команд. Все. И тогда я мог бы подскочить на несколько строк, возможно, немного отредактировать, и набрать немного текста. Затем вернитесь в режим оболочки bash и вставьте все, что я нажал, в текущую командную строку.

Я знаю, что есть несколько вариантов:

  • Естественно, направьте нужный мне текст непосредственно из вывода какой-либо команды в файл или прямо в следующую команду. Но для этого вы должны запланировать заранее или повторно выполнить команду из вашей истории (предположим, что результат не будет меняться между вызовами).

  • Дотянуться до мыши и выбрать текст для копирования. Хромая, раздражающая, я бы не хотел этого делать (это не сайт обмена стеком с графическим интерфейсом, не так ли? =)

  • Чтобы использовать опцию «Экспортировать текст как ...» моего приложения Mac OS X и сохранить текст терминала в файл. Затем откройте файл и работайте с ним. Почти, но зачем проходить этап сохранения в файл на диске?

Итак, вопрос: что вы делаете в этой ситуации? Есть ли какая-нибудь хитрость, инструмент, функция оболочки, которая может быть полезна в этом сценарии? Вы просто смирились с тем, чтобы использовать мышь или набираете все, что вам нужно набрать?

Возможно, проблема в том, что я не делаю вещи «по-юниксовски», но, давай, это 2010, и я не могу легко скопировать какой-нибудь текст в нескольких строках от моего курсора?

Серхио Акоста
источник
1
Смотрите также Как я могу использовать последний вывод из командной строки? ,
Жиль "ТАК - перестать быть злым"
stackoverflow.com/questions/5955577/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

4

Вы можете использовать скрипт (используйте -f, чтобы убедиться, что он каждый раз сбрасывается), и вы можете получить весь вывод в файле.

Используйте терминальный мультиплексор (screen, tmux и т. Д.). Например, для экрана http://web.mit.edu/gnu/doc/html/screen_11.html#

Команда: копировать Войдите в режим копирования / прокрутки. Это позволяет копировать текст из текущего окна и его историю в буфер вставки. В этом режиме активен полноэкранный редактор в стиле vi, элементы управления которого описаны ниже.

Другие терминальные мультиплексоры, безусловно, имеют более продвинутые возможности.

nc3b
источник
Ok. Я только что узнал, что «терминальный мультиплексор», вероятно, то, что мне нужно. Благодарю. Также спасибо за подсказку команды «script».
Серхио Акоста,
5

В tmux (терминальный мультиплексор) вы можете нажать Ctrl + A- [, чтобы переключиться в режим буфера Vi, где вы можете перемещаться по экрану, прокручивать буфер вперед и назад, копировать текст и т. Д. По умолчанию это сочетание клавиш Ctrl + B- [но это, очевидно, должно было быть перенастроено. Кроме того, режим буфера по умолчанию - Emacs, но вы можете настроить его на Vi.

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

На OpenBSD tmux был даже сделан частью базовой системы.

Смотрите man-страницу для tmux для более подробной информации. Также смотрите скриншоты на http://tmux.sourceforge.net/

zvolkov
источник
Tmux самый крутой!
таращиться
4

В emacs оболочка Mx обрабатывает выпуск предыдущего вывода. Вы можете легко скопировать вставить предыдущие команды вывода, или любую часть вашего буфера, как обычный буфер. Я почти уверен, что должен быть VIM-эквивалент.

Elmarco
источник
1
Это очень близко к тому, что я хочу, но мне нужно быть уже в Emacs или Vim. +1
Серхио Акоста
Да, это может быть ваш термин по умолчанию + оболочка. :) Тогда вы бы использовали обычные текстовые навигационные клавиши там как минимум. Если вы узнали больше специальных клавиш, то доступны следующие функции Emacseshell .
imz - Иван Захарящев
1

Как уже упоминалось, Emacs ' eshellможет быть вашим термином по умолчанию + shell. :) Тогда вы бы использовали обычные текстовые навигационные клавиши там как минимум. Если вы узнали больше специальных ключей, то eshellдоступны следующие функции Emacs :

imz - Иван Захарящев
источник
1

Я использую urxvt (rxvt-unicode), и есть пакет с именем urxvt-keyboard-select, который может быть именно тем, что вам нужно, если вы можете установить urxvt. Информация о пакете Archlinux (которая содержит указатели) находится здесь:

https://aur.archlinux.org/packages.php?ID=39950

Первоисточник: http://www.github.com/muennich/urxvt-perls

Никто
источник
1

Попробуйте использовать vim в качестве CLI? Просто выберите выход из нескольких строк и передайте его через:!.

Стивен М. Уэбб
источник
Прости, я не слежу за тобой. Можете ли вы уточнить, пожалуйста?
Ройма