web-dev-qa-db-ja.com

画面をクリアせずに「少なく」終了する方法はありますか?

比較的頻繁に、私はlessを終了したいと思っていますが、画面に表示されているものをそのままにして、後で参照します。これを行う方法はありますか?回避策は?

(私の現在の回避策は、終了してからmoreを使用することです。そのため、それよりも優れた回避策があれば歓迎します。理想は、おそらくlessに入ったら、おそらくシェル設定またはスクリプト。)

私のデスクトップはOSXですが、RHELおよびUbuntuサーバーを使用しています。

74
Steve Bennett

これは実際には、使用しているターミナルエミュレータの機能です(xterm、gnome-terminal、konsole、screen)。代替画面、つまりaltscreenは、lessvimなどのプログラムが呼び出されたときに起動されます。このaltscreenには履歴バッファーがなく、プログラムを終了するとすぐに終了し、元の画面に戻って前のウィンドウのコンテンツ履歴と配置を復元します。

引数「-X」を渡すことで、lessがaltscreenで起動しないようにすることができます。

less -X /path/to/some/file

「-X」を環境変数として渡すこともできます。したがって、bashを使用している場合は、これを~/.bashrcに配置します。

export LESS="-X"

ただし、これにより、termcap(端末機能)の初期化と非初期化が無効になるため、lessを使用すると他のビューが表示されなくなる場合があります。

別のオプションは、screenを使用し、altscreen offでオプション~/.screenrcを設定することです。 lessは画面をクリアせず、色の書式を維持する必要があります。おそらくtmuxも同じオプションを持つでしょう。

この ブログエントリ は問題を説明し、さまざまな成功を収めてgnome-terminalに固有のいくつかの異なるソリューションを提供します。

72
George M

これを覚えているのは、less -SEXです。これは、出力を画面にダンプする必要があるが、行を折り返したくない場合に使用します。たとえば、docker ps | less -SEXは、次のようになります。

  • -S
    • 折り返すのではなくスクロール
    • -Eをドロップすると、矢印キーを使用してスクロールできます
  • -E
    • EOFに到達したら終了します
  • -X
    • 用語のスワッピング/ブランキングを防止
    • 「記憶」の部分は私がSとEが何をするか知っているので、これは他の部分でなければなりません。 (そして、このコマンドをメモリにコミットする理由は、ラップされた出力を(インタラクティブセッションに入らないで)ダンプしたいからです。

less -SEXを思い出せない場合は、あまり望みがありません。推測するたびに、Googleを再設定してください。

6
Bruno Bronosky

ジョージの解決策は私にはうまくいきませんでしたが、この解決策はうまくいきました(彼の回答にリンクされている ブログエントリ から)。

  1. $ infocmp -I xterm > ~/xterm-noclear.src

  2. 〜/ xterm-noclear.srcを編集します

    • 2行目の名前を「xterm」から「xterm-noclear」、または自分に合った名前に変更します(「xterm-debian」が存在する場合は変更します)。

    • 「smcup」と「rmcup」の指示を削除します(例:「smcup =\E [?1049h、」と「rmcup =\E [?1049l、」)

  3. $ mkdir ~/.terminfo

  4. $ tic ~/xterm-noclear.src(x/xterm-noclearが〜/ .terminfoディレクトリに表示されます)

  5. $ export TERM=xterm-noclear(lessの動作を確認し、問題がなければ、〜/ .profileにエクスポートディレクティブ行を追加します)

(私はこれらの指示を@jahの拒否されたジョージの回答の編集から直接コピーしました。)

4
prl