Як я можу зберегти вміст, який я читав у людини після того, як я кинув?


24

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



Усі пропозиції хороші, але ви також можете просто відкрити друге вікно, щоб переглянути сторінку людини. І, мабуть, також є переглядачі чоловічої сторінки GUI.
Бармар

Відповіді:


38

Я вважаю, що мова йде не стільки про manсебе, скільки для вашого вибору пейджера ( PAGERзмінна середовище) у поєднанні з терміналом, який використовується.

Я здогадуюсь, що ваш пейджер, мабуть, less(типовий пейджер за замовчуванням нині і відповідає опису).

lessє варіант, -Xякий може спричинити поведінку у відповідності з тим, що ви шукаєте.

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

Напр. PAGER="less -X" man manМожна використати для його тестування, і якщо ви вважаєте, що така поведінка є кращою, ви можете розглянути PAGERможливість постійного встановлення цього значення.


На жаль, це псує історію прокрутки.
musiKk

@musiKk Добре працює для мене на Ubuntu 16.04 зі смарт-терміналом unicode (не консолі Linux) та людиною 2.7.5
кіт

3
@musiKk: якщо ви хочете мати змогу прокручувати сторінку "man" після виходу з пейджера, вам слід обмежитися прокруткою вперед на сторінці man (по рядках або сторінках), а не у звичайному випадковому доступі.
Пітер Кордес

1
Або ви можете використовувати LESS=-X, щоб не змінюватись PAGER(я не на 100% довіряю йому працювати у всіх програмах з таким простором, хоча він працює і в людині.)
Random832,

11

Якщо ви працюєте менше як ваш пейджер (що дуже часто), вам не потрібно мати справу зі зміною пейджера, просто виконайте переадресацію вводу / виводу:

man <whatever you want to man> | cat -

Це надрукує копію до терміналу, щоб ви могли прокрутити вгору, коли вам це потрібно.


1
Одне питання при такому підході полягає в тому, що з довгими сторінками вручну може бути важко прокрутити ту частину, яка вас цікавить, і ви не побачите і тієї частини, і поточного командного рядка.
jlliagre

Жодна з інших пропозицій не подолала це питання - це просто притаманне єдине вікно консолі. Але, маючи на увазі, ви завжди можете написати свою команду, прокрутити трохи вгору і прокрутити назад до половини написаної команди.
Brennen Smith

Моя пропозиція, безумовно, подолала це питання. Ви залишаєте команду man, коли на екрані відображається сторінка, яка вас цікавить, і ви можете ввести свою команду, коли ця сторінка все ще буде видно на тому ж екрані.
jlliagre

2
-означає стандарт у, але catприпускає, що все одно
loa_in_

1
Це здебільшого для семантики - мені завжди подобається бути явним із stdin.
Бреннен Сміт

5

Оскільки не тільки, lessале й інші текстові програми, як-от, vimдемонструють ту саму надзвичайно дратівливу особливість, що я роблю, це просто видалити з терміналу можливість підтримувати залучені команди з terminfoбази даних.

Ці команди є smcupі rmcup, які були розроблені, щоб дозволити вмикати і рухатись там, де cupкоманда (положення курсора) була дозволена.

Ось функція оболонки, яку я використовував для автоматизації завдання, вона працює принаймні з Solaris і, ймовірно, з більшою кількістю дистрибутивів Linux:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

Якщо ваш термінальний запис не відновлюється xterm, його слід замінити xtermправильним ім'ям терміналу в сценарії.


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

1
@cat Не те, щоб я перевірив будь-яку існуючу, але ніколи не помічав жодних проблем з іншими програмами після використання цього вирішення. Чи є у вас приклади програм, які б поводилися дивно? Я також підозрюю, що не вдасться, це питання на їхньому боці. Термінальний емулятор не повинен підтримувати всі можливості terminfo там. Він просто рекламує, які з них підтримує, і вирішувати додаток потрібно.
jlliagre

3

Ви можете передавати вихід catкоманді

man man|cat

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

PAGER=cat man man

2

Не змінюючи пейджер, рішення з трубами, які можуть працювати в більшості середовищ:

Приклади для man ls

  • Залиште всю сторінку чоловіка на екраніman ls | cat
  • Прочитайте вихід із хворобливою людиною з можливістю залишити її будь-коли за допомогою q :man ls | more
  • фільтруйте вміст людини за малюнком і зберігайте відповідні рядки на екрані:man ls | grep somestring

-3

це 2016 рік, просто відкрийте другий термінал або вкладку чи вікно або прочитайте людину в Інтернеті ..


І це очевидне практичне рішення.
Брайам

1
@Braiam Не практично, якщо термінал знаходиться на екрані мобільного телефону.
NathaneilCapital

@NathaneilCapital Здається, що саме час вчитися tmux.
Майкл Хемптон

-3

Навіть на своїх серверах (FreeBSD) я встановлюю X і xfce. Тоді я виділяю великий буфер (наприклад, 10 000 рядків) для емуляторів терміналу, щоб я міг повністю прокрутити довідкову сторінку в одному з них, і використати окремий екземпляр терміналу для складання команди. Працює частування.

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