Manページに記載されているリンクをたどる方法はありますか?たとえば、以下はps
のmanページです。赤でマークされたリンクにアクセスするにはどうすればよいですか?
Manページは Unix First Edition にさかのぼります。 hypertext が発明されたが、まだ幼少期にあった。 Webは20年先にあり、マニュアルは実際に印刷された本であり、多くの場合、ページごとに1つのコマンドが含まれていました(そのため、ページと呼ばれていました)。
マニュアルページで使用されるフォーマットはそれ以降多少進化しましたが、ほとんどのページは実際にはハイパーテキスト用に設計されておらず、デフォルトのman
プログラムはそれをサポートしていません(これは、プレーンテキストビューアであり、ハックをサポートしています)いくつかの基本的なフォーマット)。ただし、一部のハイパーリンク、主に他のmanページへのリンクを再構築するmanページ表示プログラムがあり、従来はman(1)
の形式で記述されています。ここで、man
はmanページの名前であり、1
は セクション番号 です。
いくつかのオペレーティングシステムのマニュアルページを、いくつかのオンラインサイトで、man2html
または類似のツールによってHTMLに変換して閲覧できます。次に例を示します。
Manページがunixで確立されたドキュメント形式になってからしばらくして、Webが発明される前に、 [〜#〜] gnu [〜#〜] プロジェクトは info ドキュメント形式を導入し、テキスト端末用に設計された単純なマークアップにこだわる一方で、人よりも高度です。人と比較した情報の主な革新は、他のページへのハイパーリンクを含む複数ページのドキュメントを作成することでした。 Infoは依然としてGNUプロジェクトに推奨されるドキュメント形式ですが、ほとんどのInfoページは Texinfo ソース(または他の形式)から生成されます)HTMLを生成することもできます。プログラムのinfoドキュメントが存在する場合、それは多くの場合メインマニュアルですが、manページにはコマンドライン引数に関する基本的な情報しか含まれていません。
まず第一に、それはリンクではありません。下線です。マニュアルページは、端末が処理できる簡単なフォーマットが少し付いた単なるテキストドキュメントです。下線はハイライトに過ぎず、「リンク」は含まれていません。
通常のman
コマンドは、単なるテキストフォーマッタです。実際、man
コマンドはテキストも表示しません。man
は、manページファイルに格納されている情報をフォーマットするだけです。[1] そして、フォーマットされた出力を画面に表示する別のプログラム(通常はless
)にフォーマットされた出力を送信します。これらの表示プログラムにはリンクの概念はありません。
そのようなフォーマットを見て、そのようなハイライトがプルアップされてリンクを作成できる関連するmanページがあることを示す可能性があると推測される特別なドキュメントリーダーがいますが、私にはわかりませんどれがしますか。たぶんpinfo
?
ハイパーリンクを使用したフォーマットのようなWebが必要な場合は、リンクが追加されたほとんどすべてのUNIX manページをオンラインで見つけることができます。Googleにman [anything]
と入力してみてください。
あなたの例の場合、視覚的な強調表示は、簡単にプルアップできる独自のmanページを持つ別のプログラム名であることを示す手掛かりです。 man 1 top
をお試しください。 1は、参照するmanページのセクションを示します。セクションの説明については、この質問を参照してください。 manページの数字は何を意味していますか?
[1] テキストエディタでman
ページファイルを開くと、読みやすい形式になっていない未加工のman
ページが表示されます。未加工のman
ページは、troff
と呼ばれるマークアップ言語で記述されています。 troff
の詳細とman
ページの作成方法については、 https://liw.fi/manpages/ を参照してください。
これは非常に遅い応答ですが、w3mmanを使用してください。 w3mmanは、w3mによるシステムのマニュアルページャーです。
https://linux.die.net/man/1/w3mman
W3mパッケージをインストールして試してみてください。このパッケージは、ほとんどの主要なLinux/UNIXディストリビューションおよびCygwinのソフトウェアリポジトリに登録されていると思います。
私があなたのワークフローに従っているという意味で、あなたの質問をもう少し解釈してみましょう。あなたがおそらく望んでいるのは、あなたが読んでいる下線付きのコマンドに直接導くman
ページ内のキーの組み合わせです。したがって、他に何かをインストールしたり、別のコンソールを開いたりして、たとえば正確な構文を忘れたりする必要はありません。
この最も簡単な解決策は感嘆符であり(less
を使用してmanページを表示している場合)、下線付きのtop
に移動します。
!man top
または
!man 1 top
q
を複数回押して、すべて閉じる必要があります。これは、LESSSECURE=1
が環境変数として設定されている場合は機能しないことにも注意してください。これにより、less
がセキュアモードで実行され、!
を使用できなくなります。 「コマンドが利用できません」などのメッセージが表示されます。
w3mmanはリンクをたどるソリューションですが、すべての画面を使用するわけではありません(少なくともUbuntu 12.10では)。
私は使いたい:
$ Sudo su -
# apt-get install w3m man2html
# exit
$ alias man=' hman -P w3m'
最後のコマンドを〜/ .bash_aliasesまたは同様の起動スクリプトに追加して、すべてのセッションでそれを取得します。
-P w3mは、hmanへの最初のブラウザーが lynx または sensible-browser であるためです優先 w3m
hmanは、html2manにバンドルされているツールです。 this を参照
確認して終了するのが面倒な場合は、 this を使用してください。
彼らが言ったように、それはそれのために設計されていませんでした。
info man
を使用して、アイテムのSEE ALSOセクションに移動したらEnterキーを押します。
info-Infoドキュメントを読む
特にUbuntuの場合は、Yelpがあります。これはデフォルトでインストールされ、デフォルトではマニュアルページを表示できますが、そのための呼び出しはman
コマンドのそれとは異なります。エイリアスまたはシェル関数は、後者の点を回避できます(シェルによって異なります)。
Yelp 'man:exit'
私の知らない方法でセクションがデフォルトになります。注意:手動トピックのセクションリストを取得するには、whatis exit
のようにwhatis
を使用します。
Yelpに特定のセクション(2など)のマニュアルページを表示するよう要求するには、次のようにします。
Yelp 'man:exit(2)'
問題:Yelpにはバグがあり、コマンドラインから呼び出したときに複数のエラーが出力される準備ができています。また、エイリアスまたはカスタムShell関数は、すべてのエラーを/dev/null
にリダイレクトするのに役立ちます
ハック(のカップル)があります。
これを〜/ .bashrcまたは〜/ .zshrcに入れます
function man(){
for arg in "$@"; do
vim -c 'execute "normal! :let no_man_maps = 1\<cr>:runtime ftplugin/man.vim\<cr>:Man '"${arg}"'\<cr>:wincmd o\<cr>"'
done
}
スクリーンショット..
アスキーネマ..
https://asciinema.org/a/130131
今….
たとえば、man vim
と入力すると、このmanページがvimで開きます
man man vim
と入力すると、最初にman
のマニュアルが開き、vimを終了するとvim
のマニュアルが開きますあなたが押すと K (これは大文字のk
です)下部にある別のmanページ(SEE ALSOセクション)にいるときは、このマニュアルにジャンプします(残念ながらa less pager-これは、let no_man_maps = 1
があるためです。そうしないと、vimはq
を:q
に強制的に設定し、マクロを簡単に記録できなくなります。
ftplugin/man.vimをロードし、ftが(自動的に)man
に設定されているため、構文が非常に強調表示されます。
コピーして貼り付けたり、vimで自由に移動したり、バッファーや:w ~/usefulfile
を変更したりすることもできます。レコードマクロ、"+y
(+clipboard
がある場合)などを使用して、vimで通常行うすべてのことをクリップボードにヤンクできます。
lessよりもずっと良いと思います。
私が見つけた唯一のマイナーな後退(ポケットベルとしてlessを使用してもまだ存在する)は、1つのvimセッションで複数のマニュアルを開きたい場合です。私はこれを行う方法を本当に見ていません。
いくつかのメモ:
バッファを保存しようとすると、E382: Cannot write, 'buftype' option is set
が返されます
あなたはまだ:w /tmp/man.man
のように保存することができます
.man
拡張子を付けて保存すると、開くとファイルタイプがman
に設定されます.man
拡張子を付けて保存しない場合は、:set ft=man
を実行して、ftをman
に設定できます。manページを開くときに何かをする必要がある場合は、たとえばautocmd VimEnter *.~ echom 'hooray, we are using vim for man pages!'
を使用できます。
私が押すことができるように、私はvimrcに以下を入れました K 手動で開いてから、 G 前のマニュアルに戻るには:
augroup man
autocmd!
autocmd VimEnter *.~ nnoremap B :execute "normal! `Z"<cr>
autocmd VimEnter *.~ nnoremap <buffer> K :execute "normal! mZyiw:Man \<lt>c-r>\"\<lt>cr>"<cr>
augroup END
これを〜/ .bashrcまたは〜/ .zshrcに入れます
function man(){
declare -a args
for arg in "$@"; do
command man "$arg" > "/tmp/${arg}.man"
args+=("/tmp/${arg}.man")
done
vim "${args[@]}"
}
スクリーンショット..
アスキーネマ..
https://asciinema.org/a/9Q6Si90Pi46cDVUknxFxfIwsv
これはhack 1とlessフェイス(1つのバッファーで複数のマニュアルを表示できるようになりました)という問題を解決しますが、あまりエレガントではありません。
ノート:
[〜#〜]重要[〜#〜]必要な場合hack2を機能させるには、:let no_man_maps = 1
を~/.vimrc
に配置する必要があります。これは、vimが.../vim80/man.vim
をソースとし、q
が:q
に強制的に再マッピングされるためです。
より多くのクリーンアップが含まれます(今、すべてのマニュアルを/ tmp/*。manに保存します)
ただし、上記のように、1つのセッションで複数のmanページを表示できるようになりました。
あなたが押すなら K、まだ新しいvimセッションを開きますが、
autocmd VimEnter man.~ nnoremap <buffer> K :execute "normal! Byt(:silent !man \<c-r>\" > /tmp/\<c-r>\".man\<cr>:edit /tmp/\<c-r>\".man\<cr>"
などのクレイジーなものを実行できます(nested)$ BROWSER環境変数で定義されているブラウザーで開くために、--html
引数をman
に使用することができました。
BROWSER=google-chrome man ps --help
Fedoraを使用しています。これがディストリビューションで機能するかどうかわからない場合は、テストしてコメントで報告してください。