web-dev-qa-db-ja.com

一時ファイルを使用せずにvimでmanページを読む方法は何ですか

Vimでmanページを読めるようになりたいです。何らかの理由で、vimは配管を介してプログラムの出力を読み取ることができないようです(つまり、 '(man ls)| vi'は機能していないようです、理由を説明できる誰かにボーナスポイントがあります)。このあたりで、私は次の小さなスクリプトを使用しています。

tempo = `mktemp`
man $1 > $tempo ; vi $tempo

このスクリプトは一時ファイルを使用していますが、これは問題なく機能すると思いますが、一時ファイルを作成せずにvimでmanページを読み取る良い方法があるかどうか疑問に思いました。

22
MYV

どういうわけか、vimはパイピングを通してプログラムの出力を読み取ることができないようです[…]

マンページによると、標準入力から読み取るには、-のファイルを指定する必要があります。そう:

man ls | vi -

それがうまくいかない場合は、プロセス置換を使用してみてください。

vi <(man $1)

これは一種の疑似ファイルを作成し、それをviに渡します。

32
ruakh

Vimのランタイムファイルには、マニュアルページビューア:Manが含まれています。

この行をvimrcに入れてください:

runtime! ftplugin/man.vim

これで、:Manを実行することで、Vim内で構文が強調表示されたマニュアルページを読むことができます。例えば:

:Man 3 printf

さらに良いことに、バッファ内のWordにカーソルを置き、<Leader>K\K)を押すだけで、そのWordのマニュアルページを表示できます。

完全な使用方法とインストール手順については、 :h find-manpage を参照してください。

37
glts

私のシステム(Mac OS X)では、上記の左側の制御文字が出力に含まれていることがわかりました。代わりに私は使用しました:

export MANPAGER="col -b | vim -MR - "

次に、例えば.

man vim

Vimオプションは、バッファーの変更をオフにし、読み取り専用にします。これにより、「:q」で終了しようとするとvimが文句を言うのをやめます(もちろん:q!を使用できますが、オプションを設定することもできます)。

これは一般的な使用にも便利です-私は以下を持っています。 -cコマンドは、完全を期すために、バッファーに名前を付けます。

alias vimpager="vim -MR -c 'file [stdin]' -"
11
Rory Hunter

サンプルコードが間違っています。

   tempo=`mktemp`
   man $1 > $tempo; vi $tempo

しかし、あなたは本当に必要なだけです

   man $1 | vi -
4

これが私がしたことです、私はこれで私の.bashrcで関数を作りました

vman() { vim <(man $1); }

したがって、vmanを呼び出すと、これは自動的にvimをstdinで呼び出し、男性自体がうまく機能します。

4
nacholibre

C関数でshift-kを押して、マニュアルページを印刷することもできます。

2
albttx

デフォルトでは、vimは入力ファイルではなくvimscript(= vimコマンド)をstdinから読み取ります。そのため、man出力をvimに直接パイプすることはできません。他の人が言っているように、vimをstdinから読み取らせるにはvim -を使用する必要があります。

ただし、vimscriptのパイピングも役立ちます。

vim test.txt <<EOF
:%s/[aiueo]/X/g
:wq! output.txt
EOF

上記では、vimを使用してtest.txtを開き、すべての母音をXに置き換え、結果をoutput.txtに書き込んで、終了します(元のファイルへの変更は無視します)。ヒアドキュメントを使用しますが、もちろんvimコマンドをファイルに入れてvim test.txt < myscriptまたはcat myscript | vim test.txtを使用して同じ結果を得ることができます。

彼らがこのようにした理由は、複数の入力ファイルを開くことができるが、1つのスクリプトしか実行できないためだと思います。デフォルトで入力がstdinから読み取られた場合、その方法では1つのバッファーしか読み取ることができませんでした。

2

私は他の答えを組み合わせました、私は使用しています

vman() {
    export MANPAGER="col -b" # for FreeBSD/MacOS

    # Make it read-only
    eval 'man $@ | vim -MR +"set filetype=man" -'

    unset MANPAGER
}

使用法:

vman ls
1
Green Bird

私が使用したより良い解決策があります、それはこのようなものです:

/bin/sh -c "unset PAGER;col -b -x | vim -R -c 'set ft=man nomod nolist' -c 'map q :q<CR>' -c 'map <SPACE> <C-D>' -c 'map b <C-U>' -c 'nmap K :Man <C-R>=expand(\"<cword>\")<CR><CR>' -"

あなたがそれを楽しむことを願っています。

1
guitarpoet

情報ページにはいつでもinfoコマンドを使用して、info {cmd} | vimを実行できます。

0
andrewgazelka