Bashに関数を書いて確認しました。男性Vimのページ:
viman () { man "$@" | vim -R +":set ft=man" - ; }
これはうまくいきます。存在しないマニュアルページを渡すと、唯一の問題が発生します。マンページは存在しませんが、まだ空のvim
バッファで開くと印刷されます。
そのため、エラーコード(16
ここにあります)を確認し、ページがない場合は終了するように機能を変更しました。変更された関数は次のとおりです。
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
しかし今は効果がありません。
マニュアルページが存在しない場合はプログラムを終了し、そうでなければvim
。
答え1
これを試してみてください:vimが正常に起動した場合はman出力をキャプチャします。
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
答え2
戻りコードを確認するアイデアは気に入っていますが、man
パイプを通してテストすることはできません。 2回しか実行できませんman
。
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
man ... | vim ...
最初の呼び出しが成功した場合にのみ実行されますman
。
答え3
マンページを表示したいコマンドを呼び出す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
オプションを使用してVimがstdinがTTYではないと文句を言うのを防ぐことができます。
恥ずかしいプラグ:私が書いた小さなプラグインVimをマニュアルページとして使用すると便利です。
答え4
に基づいてこの回答バッファに何もない場合、vim が起動して終了します。欠点は、vim
起動時に画面が「点滅する」ことです。また、man
ページが見つからない場合は終了コードを設定しません。
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
man
これは、ページの存在中にページを2回ロードしないという点で、Jeff Schallerの答えが改善されたことです。また、vim
前の例のように不必要にロードされません。そしてそれするman
ページがないときに終了コードを設定します。
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
どちらの例も、「Vim:Reading from stdin ...」メッセージを避けるためにBashプロセスの置き換えを使用します。
ページを変数としてロードしません。