男を辞めた後でも、どのようにして「男」テキストを表示できますか?


16

通常、tcshまたはbashを使用しますが、多くの場合、コマンドのオプションを確認するために「man」を使用します。現在、manまたはctrl-Cを終了すると、manテキストが消え、「man」コマンドを実行する前にそこにあったスクロールバックバッファーが表示されます。2つ目のウィンドウを開かずにコマンドプロンプトでコマンドを入力しているときに、参照として表示している「man」テキストを引き続き表示したいのですが、どうすればよいですか?

回答:


17

この動作は、一部の(ハードウェア)ターミナルおよびほとんどの(ソフトウェア)ターミナルエミュレータに含まれる「代替画面」機能に起因しています。何が起こるかというと、一部の端末対応プログラムは、作業を行うために代替の「画面」に切り替わり、終了(終了、中断など)すると通常の「画面」に戻ります。これにより、そのようなプログラムの最終出力が効果的に消去されます。

「terminfo prevent altscreen」のWeb検索では、代替画面の「問題」といくつかの解決策を説明するページが提供されまし

リンクされたページで説明されているように、一部のプログラムは、代替画面を使用しないように構成できます。less-Xオプションは、これを行う間接的な方法です。Vimは、変数と変数を設定解除することで同様に設定できます。t_tit_te


より広い範囲の解決策は、端末のterminfoエントリを編集して、代替画面制御シーケンスが含まれないようにすることです。terminfoエントリは、特定の効果(カーソルの移動、画面のクリア、現在の行の一部の消去など)を作成するために端末に送信するシーケンスをプログラムに伝えるデータベースを形成します。端末が使用するterminfoエントリを編集することにより、「代替画面」制御シーケンスが存在することをすべてのterminfo使用プログラムに「無視」するように手配できます。

以下からの制御シーケンスのリストのxterm、我々は(のための関心の制御シーケンスことがわかりますxtermの端末エミュレータ様)があります

  • 代替画面を有効にする:(ESC [ ? 47 h同様に1047と1049)、および
  • 通常画面の復元:ESC [ ? 47 l(1047および1049の場合も同様)。

これらのコードは、terminfo変数smcupおよびrmcup。現在のTERMでこれらの変数を削除するための迅速で汚い方法は、次のようになります。

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

この方法は非常に粗雑で、すべての端末で確実に機能するわけではありませんが、ほとんどのxtermのような端末エミュレーターでおそらく機能します。理想的には、端末のterminfoエントリのsmcuprmcup変数の値を調査し、望ましくない動作を防ぐために控えめに編集する必要があります。上記のリンクされたディスカッション/ソリューションページには、自分でハッキングする代わりに使用できる「事前に作成された」terminfoファイルがあります(しかし、それで楽しいのは何ですか?)。


10

あなたは、設定する必要があります$MANPAGERへの/usr/bin/less -isXパス交換、less必要に応じて発見されました。重要な部分は-X;です。これ-isは、lessに渡されるデフォルトセットです。


9

ページャーがlessであると仮定して、環境変数LESSに「X」を含めるように設定します。たとえば、私のものは:

LESS="-iMFXRj4a"

これを~/.bashrcファイルに設定できます

export LESS="-X"

他のオプションを含めたり、好きなオプションを追加したりできます。


4

別のトリック-他の答えよりもエレガントではありません-は:

man what | more

(少なくとも、これはMacOS Xで機能します。通常、MacOS Xは有効であるために十分に似ています。)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.