
EDIT Апрель 2015: Если у вас возник тот же вопрос, рекомендую также проверитьhttp://xiki.org/
Я знаю, что терминалы работают не так, но мне часто хотелось бы иметь простой способ использования текста (копирования, изменения и т. д.), который уже есть в истории окна терминала из какого-то предыдущего вывода команды.
Я представлял это так:
Я нахожусь в оболочке bash, собираюсь ввести команду и понимаю, что мне нужно ввести что-то, что уже есть на экране несколькими строками выше. Я могу дотянуться до мыши и выбрать это, но я ненавижу это. Чего я действительно хочу в данный момент, так это чтобы весь мой терминал стал гигантским буфером Vim, все: приглашения, команды, которые я набрал, и вывод этих команд. Все. И тогда я мог бы перепрыгнуть на несколько строк вверх, может быть, немного отредактировать и вытащить какой-нибудь текст. Затем вернуться в режим оболочки bash и вставить то, что я вытащил, в текущую командную строку.
Я знаю, что есть несколько вариантов:
Естественно, перенаправить нужный мне текст напрямую из вывода какой-то команды в файл или сразу в следующую команду. Но для этого вам придется планировать заранее или повторно выполнять команду из истории (предполагая, что вывод не изменится между вызовами).
Дотянуться до мыши и выделить текст для копирования. Убогий, раздражающий, лучше бы я этого не делал (это ведь не сайт GUI stackexchange, не так ли? =)
Использовать опцию "Экспортировать текст как..." моего терминала (Mac OS X) и сохранить текст терминала в файл. Затем открыть файл и работать с ним. Почти, но зачем проходить этап сохранения в файл на диске?
Итак, вопрос: что делать в этой ситуации? Есть ли какой-то трюк, инструмент, функция оболочки, которые могли бы быть полезны в этом сценарии? Вы просто смиряетесь с тем, чтобы использовать мышь или перепечатывать то, что вам нужно напечатать?
Может быть, проблема в том, что я не делаю все «как в Unix», но, черт возьми, на дворе 2010 год, и я не могу просто скопировать текст, находящийся в нескольких строках от курсора?
решение1
В emacs,оболочка Mxобрабатывать редактирование предыдущего вывода. Вы можете легко копировать и вставлять вывод предыдущих команд или любую часть вашего буфера, как обычный буфер. Я почти уверен, что должен быть эквивалент в vim.
решение2
В tmux (терминальном мультиплексоре) можно нажать Ctrl+A-[, чтобы переключиться в режим буфера Vi, где можно перемещаться по экрану, прокручивать буфер вперед и назад, копировать текст и т. д. Сочетание клавиш по умолчанию на самом деле Ctrl+B-[, но это, очевидно, должно было быть перенастроено. Кроме того, режим буфера по умолчанию — Emacs, но вы можете настроить его на Vi.
Проверьте tmux, это действительно отличный современный терминальный мультиплексор. Помимо работы с буфером вы можете разделить экран на несколько окон, подключиться к одной и той же сессии с нескольких терминалов и т. д. Для максимального удобства вы даже можете сделать его своей оболочкой входа, если укажете ей, какая у вас фактическая оболочка.
В OpenBSD tmux даже был включен в состав базовой системы.
Подробнее см. man-страницу для tmux. Также см. скриншоты наhttp://tmux.sourceforge.net/
решение3
Вы можете использовать скрипт (используйте -f, чтобы убедиться, что он сбрасывается каждый раз) и сохранить все выходные данные в файле.
Используйте терминальный мультиплексор (screen, tmux и т.д.). Например, для screen http://web.mit.edu/gnu/doc/html/screen_11.html#
Команда: копировать Войти в режим копирования/прокрутки. Это позволяет копировать текст из текущего окна и его историю в буфер вставки. В этом режиме активен полноэкранный редактор в стиле vi с элементами управления, как показано ниже.
Другие терминальные мультиплексоры наверняка обладают более продвинутыми возможностями.
решение4
Я использую urxvt (rxvt-unicode) и есть пакет urxvt-keyboard-select, который может быть именно тем, что вам нужно, если вы можете установить urxvt. Информация о пакете Archlinux (содержащая указатели) находится здесь:
https://aur.archlinux.org/packages.php?ID=39950
Первоисточник: http://www.github.com/muennich/urxvt-perls