Як скопіювати багатосторінковий текст з терміналу в буфер обміну?


13

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

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

Я сподіваюся, що отримаю загальну відповідь, однак я використовую Ubuntu.

Відповіді:


9

У мене є пара недосконалих, але, можливо, корисних ідей.

Спосіб 1 - мишо.

Використовуйте смугу прокрутки терміналів.

Деталі (якщо припустити xterm; для інших терміналів будуть потрібні коригування.)

  1. Увімкніть смугу прокрутки, якщо її ще немає. (В xterm, це в меню, яке ви отримуєте за допомогою Ctrl + Button2.)
  2. Переконайтеся, що параметр lessне працює з цією -cопцією (у мене ввімкнено цю опцію в моїй LESSзмінній оточення, але це заважає тому, що ми збираємось робити, тому мені потрібно набрати текст, -cщоб вимкнути її.)
  3. Використовуючи будь-які lessкоманди, які вам подобаються, прокрутіть вгору або вниз, щоб перший рядок, який ви хочете скопіювати, був видно на екрані.
  4. потрійний Button1 ваш вибраний початковий рядок, щоб вибрати його.
  5. Прокрутіть вниз, поки на екрані не буде показаний останній рядок, який потрібно скопіювати. Ви повинні використовувати лише пробіл або інші прості клавіші прокрутки, а не /пошук - справа тут у тому, lessщоб надіслати всі рядки до терміналу, щоб вони могли бути скопійовані.
  6. Кнопка3 у вибраному вам кінцевому рядку, щоб розширити вибір.

Можливі труднощі: ваш буфер прокрутки може бути недостатньо великим. Це можна змінити за xtermдопомогою параметра saveLinesресурсу чи -slкомандного рядка, але я не знаю способу змінити його у вже запущеному xterm.

Спосіб 2 - не миші.

Використовуйте команду |(pipe) lessдля надсилання тексту до xclip.

Деталі:

  1. Використовуючи будь-які lessкоманди, які вам подобаються, прокрутіть вгору або вниз, щоб розташувати останній рядок, який ви хочете скопіювати, у верхній частині екрана. Ви можете пропустити цей крок і наступний крок, якщо хочете скопіювати його до кінця.
  2. За допомогою команди m(mark) встановіть позначку у вибраному вами кінцевому положенні. Познаки є корисною особливістю самі по собі, і ви повинні їх знати вже з vi, але на випадок, якщо цього не зробите: mxвстановлює позначку, де xможе бути будь-яка літера, і 'xповертає вас туди пізніше.
  3. Тепер прокрутіть вгору, щоб перший рядок, який ви хочете скопіювати, був у верхній частині екрана.
  4. Скористайтеся командою pipe: |xяка відобразить підказку для введення зовнішньої команди. Це xмає бути та сама буква-позначка, яку ви використовували в mкоманді, або $"до кінця". Введіть xclipтам.

Простий випадок копіювання всієї сторінки man доводиться до g|$xclipEnter.

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


2
Користувачі Mac можуть використовувати pbcopy, якщо у них не встановлено xclip.
Майк Хедман

3

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


2

Як зазначено на Nixcraft :

  1. Отримайте xclip:

    sudo apt-get install xclip 
    

    або

    yum install xclip
    

    на системі на основі RPM.

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+ Vдо змісту вашого серця. Ви можете видалити, -selection clipboardщоб замість цього вибрати середнє клацання мишкою (називається основним виділенням).

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


Крім xclipтого є також xsel(та інші). Ви також можете ознайомитись із цією дискусією в буфері обміну .
петерф

Чи можна це зробити за допомогою миші? Так що, коли миша досягне кінця сторінки, сторінка прокручується.
Мухаммед Гелбана

0

Це залежить від вашої термінальної програми, але більшість термінальних програм не мають функціоналу для збереження вибраного тексту.

LXTerminal, uxterm, Konsole та GNOME Terminal, здається, не мають цієї «функції», але можуть бути й інші, які мають це. Подивіться на структуру меню вашого терміналу, і там може бути щось на зразок "Зберегти вибране"


0

Якщо припустити, що ви використовуєте gnome-terminalі lessяк пейджер, manви можете:

  • Запуск lessдля manз -Xключем для відключення альтернативного екрану, наприклад:LESS=-X man less

Це дозволить додати вихід manдо буфера історії емулятора терміналу. Дивіться цю відповідь для отримання більш детальної інформації /unix//a/38638/87918 .

  • Перейдіть до останньої сторінки тексту, яку потрібно скопіювати. (Під час прокрутки весь прокручений текст буде збережений у буфері історії)
  • Виберіть текст за допомогою миші, gnome-terminalпочинаючи з останньої сторінки до першої, перетягуючи мишу до верхнього краю вікна. Детальний процес вибору тексту описаний тут :

Це не працює в терміналі Gnome. Замість того, що вам потрібно зробити, це запустити вибір лівою кнопкою миші і, роблячи її, перетягніть курсор миші до краю вікна (або поза вікном). GT прокрутить речі для вас, розширивши вибір у процесі. Прокрутка GT є досить швидкою, що це досить зручний та інтуїтивний процес, мабуть, кращий, ніж xterm.

  • Тепер у вас вибраний текст (будь-які сторінки, які ви хочете), який ви можете скопіювати та вставити куди завгодно.

0

Використовуйте | Команда (труба) менше з позначками, на що відповів Wumpus Q. Wumbley у своєму другому варіанті , але перенаправлення використовує tee для додавання до вже наявного файлу з цією метою:

|tee >> ~/helpaggregator.txt

Я пропоную існуючий файл, оскільки зазвичай потрібно проконсультуватися під час вивчення нових команд, а один любить постійно консолідувати їх. Більше того, корисне заповнення вкладок.

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