Jak mogę nadal wyświetlać tekst „człowiek” po odejściu z człowieka?

16

Zwykle używam tcsh lub bash i często chcę używać „man” do przeglądania opcji polecenia. Obecnie, kiedy wychodzę z man lub Ctrl-C, tekst man znika i widzę bufor przewijania, który był tam przed wykonaniem polecenia „man”. Chciałbym nadal widzieć tekst „man”, który wyświetlałem jako odniesienie, podczas gdy wpisuję polecenie w wierszu polecenia bez otwierania drugiego okna. Jak to zrobić?

Sol
źródło

Odpowiedzi:

17

Takie zachowanie wynika z funkcji „alternatywnego ekranu” zawartej w niektórych terminalach (sprzętowych) i większości emulatorów terminali (programowych). To, co się dzieje, polega na tym, że niektóre programy obsługujące terminale przełączają się na alternatywny „ekran”, aby wykonać swoją pracę, i wracają do normalnego „ekranu”, gdy zostaną zwolnione (zakończone, zawieszone itp.). To skutecznie usuwa końcowe wyniki takich programów.

Wyszukiwarka internetowa dla „terminfo zapobiegać altscreen” dostarczyła stronę omawiającą „problem” alternatywnego ekranu i kilka rozwiązań .

Jak opisano na tej połączonej stronie, niektóre programy można skonfigurować, aby uniknąć korzystania z alternatywnego ekranu. -XOpcja dla mniej jest pośrednim sposobem osiągnięcia tego celu. Vim może być skonfigurowany podobnie poprzez rozbrojenie zmiennych t_tii t_te.


Rozwiązaniem o szerszym zakresie jest edycja wpisu terminfo dla terminala, aby nie zawierał on alternatywnych sekwencji sterowania ekranem. Wpisy terminfo tworzą bazę danych, która informuje programy, które sekwencje kontrolne mają wysłać do terminala w celu uzyskania określonych efektów (przesunięcie kursora, wyczyszczenie ekranu, usunięcie części bieżącej linii itp.). Poprzez edycję wpisu terminfo używanego przez twój terminal możesz ustawić „zaniedbanie informowania” wszystkich programów korzystających z terminfo, że istnieją sekwencje kontrolne „alternatywnego ekranu”.

Z listy sekwencji kontrolnych dla xterm możemy zobaczyć, że interesujące sekwencje kontrolne (dla emulatorów terminalnych podobnych do xterm ) są

  • włączyć alternatywny ekran: ESC [ ? 47 h(podobnie dla 1047 i 1049), i
  • przywróć normalny ekran: ESC [ ? 47 l(podobnie dla 1047 i 1049).

Te kody są najprawdopodobniej obecne w zmiennych terminfo smcupi rmcup. Szybki i brudny sposób na wycięcie tych zmiennych dla bieżącego TERM może wyglądać następująco:

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

Ta metoda jest dość prymitywna i na pewno nie zadziała dla wszystkich terminali, ale prawdopodobnie zadziała dla większości emulatorów terminali podobnych do xterm . Idealnie powinieneś zbadać wartości we wpisach terminfo smcupi rmcupzmiennych terminala i konserwatywnie je edytować, aby zapobiec niepożądanemu zachowaniu. Powyższa strona dyskusji / rozwiązania ma „wstępnie przygotowany” plik terminfo, którego możesz użyć zamiast włamać się do własnego (ale co w tym jest fajnego?).

Chris Johnsen
źródło
10

Musisz ustawić $MANPAGERna /usr/bin/less -isX, zastępując ścieżkę, w której lessznajduje się w razie potrzeby. Ważną częścią jest -X; -isjest domyślnym przeszedł do mniej zestaw.

Ignacio Vazquez-Abrams
źródło
9

Zakładając, że masz pager less, ustaw zmienną środowiskową tak, LESSaby zawierała „X”. Na przykład mój to:

LESS="-iMFXRj4a"

Możesz to ustawić w swoim ~/.bashrcpliku

export LESS="-X"

i dołącz wszelkie inne opcje, które masz lub dodaj te, które Ci się podobają.

Wstrzymano do odwołania.
źródło
4

Kolejną sztuczką - mniej elegancką niż inne odpowiedzi - jest:

man what | more

(Przynajmniej działa to w systemie MacOS X, który zwykle jest wystarczająco podobny, aby był ważny.)

Jonathan Leffler
źródło
1

człowieku co więcej

To działa dobrze (Fedora).

Sumanta
źródło