Vimでmanpages
を表示する関数をbashで作成しました
viman () { man "$@" | vim -R +":set ft=man" - ; }
これは正常に動作します。存在しないmanpage
をそれに渡すと、唯一の問題が発生します。 manpage
が存在しないと表示されますが、空のバッファでvim
を開きます。
それで、エラーコードをチェックするように関数を変更しました(これは16
here)、manpage
が存在しない場合は終了します。 modefied関数は次のようになります-
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
しかし、今は何もしません!!
manpage
が存在しない場合はプログラムを終了します。それ以外の場合はmanpage
をvim
で開きます
これを試してください:man出力をキャプチャし、成功した場合はvimを起動してください
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
man
戻りコードをチェックするアイデアが気に入っています。ただし、テストにパイプすることはできません。 man
を2回実行するだけです。
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
これはman ... | vim ...
man
の最初の呼び出しが成功した場合のみ。
マンページを表示するために必要なコマンドをMANPAGER
に呼び出すために使用できるman
という環境変数があります。これの利点は、man
を直接呼び出すことであり、マンページが存在しない場合はページャーをまったく実行しません。
したがって、ラッパースクリプト、たとえば~/bin/vimman
:
#! /bin/sh
vim -R +":set ft=man" -
これをシェルの初期化ファイルのどこかに入れます:
export MANPAGER="$HOME/bin/vimman"
そして、直接実行できますman foo
をVimのマンページに追加。
(使用されているman
コマンドに応じて、次のこともできます。
export MANPAGER='vim -R +":set ft=man" -'
ラッパースクリプトの代わりに直接。)
新しい十分なVimがある場合は、--not-a-term
stdinがTTYでないことについてVimが文句を言うのを止めるオプション。
恥知らずなプラグイン:Vimをマンページャーとして使用しやすくするために、 小さなプラグイン と書きました。
この答え に基づいて、これはvimを開始し、バッファーに何もない場合は終了します。欠点は、それがvim
を開始するため、画面が「点滅」することです。また、man
ページが見つからない場合は、終了コードを設定しません。
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
これは、存在する場合にman
ページを2回ロードしないという点で、Jeff Schallerの回答を改善したものです。また、前の例のようにvim
を不必要にロードしません。そして、doesman
ページがないときに終了コードを設定します。
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
どちらの例も、「Vim:Reading from stdin ...」メッセージを回避するためにBashプロセスの置換を使用しています。
どちらもページを変数にロードしません。