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


16

Я зазвичай використовую tcsh або bash і часто хочу використовувати "man" для перегляду параметрів команди. В даний час, коли я виходжу з людини або ctrl-C, текст чоловіка зникає, і я бачу буфер прокрутки, який був там до того, як я виконав команду 'man'. Я хотів би все-таки бачити текст "man", який я розглядав як посилання, коли я набираю команду в командному рядку, не відкриваючи друге вікно, як це зробити?

Відповіді:


17

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

Пошук в Інтернеті за термінами "запобігти altscreen" надав сторінку, на якій обговорюється "проблема" альтернативного екрана та кілька рішень .

Як описано на цій пов'язаній сторінці, деякі програми можна налаштувати так, щоб не використовувати альтернативний екран. -XВаріант для менш є непрямим способом зробити це. Vim можна налаштувати аналогічно, відміняючи змінні t_tiта t_te.


Рішення з ширшою сферою застосування - редагувати запис terminfo для свого терміналу, щоб він не включав альтернативні послідовності керування екраном. Записи terminfo утворюють базу даних, яка повідомляє програмам, які керують послідовністю надсилання до терміналу для створення певних ефектів (переміщення курсору, очищення екрана, видалення частини поточного рядка тощо). Редагуючи запис терміна, який використовує ваш термінал, ви можете домовитись про «знехтування сказати» всім програмам, що використовують терміни, про те, що керуючі послідовності «альтернативного екрана» навіть існують.

Зі списку керуючих послідовностей для xterm , ми можемо бачити, що контрольні послідовності, що цікавлять (для xterm- подібних термінальних емуляторів), є

  • включити альтернативний екран: ESC [ ? 47 h(аналогічно 1047 та 1049) та
  • відновити нормальний екран: ESC [ ? 47 l(аналогічно для 1047 та 1049).

Ці коди, швидше за все, присутні у змінних terminfo smcupта rmcup. Швидкий і брудний спосіб визначення цих змінних для вашого поточного терміна може виглядати так:

infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo

Цей метод є досить грубим і, безумовно, не працює для всіх терміналів, але, ймовірно, він буде працювати для більшості xterm- подібних емуляторів терміналів. В ідеалі вам слід дослідити значення в змінних smcupта rmcupзмінних запису terminfo для вашого терміналу і консервативно відредагувати їх, щоб запобігти небажаній поведінці. На вищезв'язаній сторінці обговорення / рішення є файл «попередньо приготований» файл терміна, який ви можете використовувати замість того, щоб зламати свій власний (але чим у цьому цікаво?).


10

Вам потрібно встановити , $MANPAGERщоб /usr/bin/less -isX, замінивши шлях , де lessзнаходиться як потрібно. Важливою частиною є -X; the -is- це типовий набір, переданий менше.


9

Якщо припустити, що ваш пейджер є less, встановіть змінну оточення LESSна "X". Наприклад, моя:

LESS="-iMFXRj4a"

Ви можете встановити це у своєму ~/.bashrcфайлі

export LESS="-X"

і включіть будь-які інші варіанти, які у вас є, або додайте ті, які вам подобаються.


4

Ще одна хитрість - менш елегантна, ніж інші відповіді - це:

man what | more

(Принаймні, це працює на MacOS X, який, як правило, досить подібний, щоб він був дійсним.)


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