辞めた後、人から読んでいたコンテンツをどのように保持できますか?


24

したがってman whateverwhateverコマンドに関する使用法やその他の情報を取得するために使用します。情報の関連セクションが見つかったら、man画面に情報を残したままコマンドを終了します。したがって、上記の審判と次のコマンドを入力できます。ただし、manコマンドは画面全体を終了して、に似た古い画面を復元しvimます。これを達成する方法はありますか?



すべての提案は良好ですが、2番目のウィンドウを開いてマニュアルページを表示することもできます。また、おそらく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でスマートユニコードターミナル(Linuxコンソールではない)およびman 2.7.5で問題なく動作します

3
@musiKk:ページャーを終了した後にmanページをスクロールバックできるようにしたい場合は、通常のランダムアクセスではなく、manページを(行またはページで)前方にスクロールするように制限する必要があります。
ピーターコーデス

1
それとも、使用することができますLESS=-X変更することを避けるために、PAGER(それが男で働くけれども、私は、そのようなスペースを持つすべてのプログラムで動作しない100%の信頼それを行う。)
Random832

11

ページャーとして実行する時間が少ない場合(非常に一般的です)、ページャーの変更に対処する必要はなく、I / Oリダイレクトを実行するだけです。

man <whatever you want to man> | cat -

これにより、端末にコピーが印刷されるので、必要なときにスクロールアップできます。


1
このアプローチの問題の1つは、長いマニュアルページでは、目的の部分までスクロールバックすることが難しく、その部分と現在のコマンドラインの両方が表示されないことです。
jlliagre

この問題を解決する他の提案はありません。単一のコンソールウィンドウに固有のものです。しかし、それであなたはいつでもあなたのコマンドを書いて、少し上にスクロールし、あなたの書いた半分のコマンドまでスクロールダウンすることができます。
ブレンネンスミス

私の提案は間違いなくこの問題を克服します。目的のマニュアルページが画面に表示されているときに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
うんしかし、この休憩他のプログラム(必ずしもポケベルや呪いが、readlineのような編集者など)

1
@cat既存のものをチェックしたわけではありませんが、この回避策を使用した後、他のプログラムの問題に気付いたことはありません。奇妙に振る舞うプログラムの例はありますか?また、彼らが失敗した場合、それは彼らの側の問題だと思う。端末エミュレータは、そこにあるすべてのterminfo機能をサポートすることを想定していません。サポートするものをアドバタイズするだけで、それを処理するのはアプリケーション次第です。
jlliagre

3

出力をcatコマンドにパイプすることができます

man man|cat

または、デフォルトのページャーの代わりに使用します。この例のように、それ自体でmanを呼び出します。

PAGER=cat man man

2

ページャーを変更せずに、ほとんどの環境で機能するパイプを使用したソリューション:

の例 man ls

  • 全体を残す 画面にマニュアルページman ls | cat
  • ページ分割されたman出力を読み取ります。 qのman ls | more
  • パターンでmanコンテンツをフィルターし、画面内で一致する行を保持します。man ls | grep somestring

-3

2016年です。2つ目のターミナル、タブ、またはウィンドウを開くか、オンラインで男を読んでください。


そして、これは明らかに実用的なソリューションです。
Braiam

1
@Braiam端末が携帯電話の画面上にある場合、実用的ではありません。
ナサニエルキャピタル

@NathaneilCapital tmuxを学ぶ時が来たようですね。
マイケルハンプトン

-3

私のサーバー(FreeBSD)でもXとxfceをインストールします。次に、端末エミュレーターに大きなバッファー(10000行など)を割り当てて、そのうちの1つでmanページを完全にスクロールアウトし、別の端末インスタンスを使用してコマンドを組み立てます。御Works走。

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