Використання тексту з результатів попередніх команд


16

EDIT Квітень 2015: Якщо у вас є те саме питання, рекомендую також перевірити http://xiki.org/


Я знаю, що це не так, як працюють термінали, але я вважаю, що часто хочу, щоб був простий спосіб використання тексту (копіювання, модифікація тощо), який вже є в історії мого вікна терміналу з попереднього виводу команди.

Я уявив це так:

Я в своїй команді bash, що збирається ввести команду, і я розумію, що мені потрібно набрати щось, що вже є на екрані в декількох рядках вище. Я можу дотягнутися до миші та вибрати її, але це ненавиджу. Що я дійсно бажаю в цей момент, це те, що весь мій термінал став гігантським буфером Vim, і все це: підказки, команди, які я набрав, і вихід з цих команд. Все. І тоді я міг би стрибнути кілька рядків вгору, можливо, трохи відредагувати і вирвати якийсь текст. Потім поверніться до режиму оболонки bash і вставте все, що я забив у поточний командний рядок.

Я знаю, що є кілька варіантів:

  • Звичайно, передайте потрібний мені текст безпосередньо з виводу якоїсь команди у файл або праворуч до наступної команди. Але для цього потрібно запланувати заздалегідь або повторно виконати команду зі своєї історії (припустимо, що вихід не зміниться між викликами).

  • Щоб дотягнутись до миші та виберіть текст для копіювання. Кумедний, дратує, я б хотів, щоб цього не робили, (це не сайт stackexchange GUI, чи не так? =)

  • Щоб використовувати опцію "Експортувати текст як ..." моєї програми (Mac OS X), термінал, і зберегти текст терміналу у файл. Потім відкрийте файл і працюйте з ним. Майже, але навіщо пройти крок збереження до файлу на диску?

Тож питання: Що ти робиш у цій ситуації? Чи є якась хитрість, інструмент, функція оболонки, яка може бути корисною в цьому сценарії? Ви просто відмовитеся від використання миші або повторного введення всього необхідного для введення?

Можливо, проблема полягає в тому, що я не роблю речі «unix», але скажімо, це 2010 рік, і я не можу легко скопіювати якийсь текст за кілька рядків від мого курсору?



Відповіді:


4

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

Використовуйте термінальний мультиплексор (екран, tmux тощо). Наприклад, для екрана http://web.mit.edu/gnu/doc/html/screen_11.html#

Команда: копіювання Введіть режим копіювання / прокрутки. Це дозволяє копіювати текст з поточного вікна та його історію в буфер вставки. У цьому режимі активний повноекранний редактор, з елементами управління, як описано нижче.

Інші термінальні мультиплексори, безумовно, мають більш розширені можливості.


Добре. Я щойно дізнався, що термінальний мультиплексор - це, мабуть, те, що мені потрібно. Спасибі. Також дякую за підказку команди 'script'.
Серхіо Акоста

5

У tmux (термінальному мультиплексорі) ви можете натиснути Ctrl + A- [для переходу в режим буфера Vi, де ви можете переміщатися по екрану, прокручувати буфер вперед і назад, копіювати текст і т.д. [але це, очевидно, було призначене для перенастроювання. Також буферним режимом за замовчуванням є Emacs, але ви можете налаштувати його на Vi.

Перевірте tmux, це справді чудовий мультиплексор терміналу. Окрім роботи з буфером, ви можете розділити екран на декілька вікон, підключитись до одного і того ж сеансу з декількох терміналів і т.д.

На OpenBSD tmux навіть був внесений в базову систему.

Докладніші відомості див. На сторінці man для tmux. Також дивіться скріншоти на http://tmux.sourceforge.net/


tmux - найкрутіший!
габе.

4

У emacs оболонка Mx обробляє випуск попереднього виходу. Ви можете легко скопіювати вставлення попередніх команд виводу або будь-яку частину буфера, як звичайний буфер. Я впевнений, що має існувати еквівалент vim.


1
Це дуже близько до того, що я хочу, але мені вже потрібно бути в Emacs або Vim. +1
Серхіо Акоста

Так, це може бути ваш термін + оболонка за замовчуванням. :) Тоді ви б використовували звичайні текстові навігаційні клавіші там як мінімум. Якщо ви дізналися більше спеціальних клавіш, то можна отримати доступ до таких функцій Emacs 'eshell .
imz - Іван Захарящев

1

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


1

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

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

Оригінальне джерело: http://www.github.com/muennich/urxvt-perls


1

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


Вибачте, я не стежу за вами. Чи можете ви детальніше розібратися?
roaima
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.