web-dev-qa-db-ja.com

vimでのmanページの表示

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が存在しない場合はプログラムを終了します。それ以外の場合はmanpagevimで開きます

7
Ritajit Kundu

これを試してください:man出力をキャプチャし、成功した場合はvimを起動してください

viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
7
glenn jackman

man戻りコードをチェックするアイデアが気に入っています。ただし、テストにパイプすることはできません。 manを2回実行するだけです。

viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }

これはman ... | vim ...manの最初の呼び出しが成功した場合のみ。

3
Jeff Schaller

マンページを表示するために必要なコマンドを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をマンページャーとして使用しやすくするために、 小さなプラグイン と書きました。

2
muru

この答え に基づいて、これは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プロセスの置換を使用しています。

どちらもページを変数にロードしません。