11634


vimで以下のようにコマンドを入力すると設定が一覧で確認できるのですが、出力される結果が多すぎて見辛いと思っています。出力結果は何かページャーの様な感じで表示されるのですが、内容をキーワードで検索したり、絞り込んだりできないでしょうか？もしくは出力結果を何か便利なページャーに差替えて表示することは可能でしょうか？

変数の確認

[code]

    :let
    ...
    ... 変数の一覧
    ...
    
[/code]

オプションの確認

[code]

    :set
    ...
    ... 変数の一覧
    ...
    
[/code]

マッピングの確認

[code]

    :map
    ...
    ... 変数の一覧
    ...
    
[/code]


CC BY-SA 3.0
2015-06-23T05:47:12.257
11631
2015-06-23T19:41:22.810
10150
question
vim
vimの設定確認で絞込や検索はできますか？


[capture.vim](https://github.com/tyru/capture.vim)
を使うと、コマンドの結果をバッファに出力することができます。  
インストールしたら、

[code]

    :Capture let
    :Capture set
    :Capture map
    
[/code]

などでそれぞれ結果がバッファに出力されます。

変数とマッピングについては、[unite.vim](https://github.com/Shougo/unite.vim)も使えます。  
変数の場合は、

[code]

    :Unite variable
    
[/code]

マッピングの場合は、

[code]

    :Unite mapping
    
[/code]

とすると一覧を表示でき、絞り込みもできます。


CC BY-SA 3.0
2015-06-23T05:57:53.933
11632
2015-06-23T05:57:53.933
2541
11631
answer


Vim標準セットでのコマンドラインの絞込み方法を`:set`の場合で説明します。

[code]

    :set <C-D>
    
[/code]

`:set`(後ろにスペースあり)と入力した後に`ctrl-d`を入力するとカーソルより前のパターンに一致するオプションを一覧表示します。(この場合は全オプションを一覧表示)  
一覧表示が画面に全部表示しきれない時は画面下に`\-- 継続 --`(または`\-- More
--`)と表示され、スペースキーを押すことで続きが見れますし、`q`でキャンセルすることが出来ます。

一覧表示をキャンセルしたあと、`a`を入力後に再度`ctrl-d`を入力してみてください。

[code]

    :set a
    all           arabic        allowrevins   ambiwidth     autoindent    autowrite
    aleph         arabicshape   altkeymap     autochdir     autoread      autowriteall
    :set a
    
[/code]

`a`から始まるオプションが一覧表示されました。ここまで絞り込めたらあとは`<Tab>`キーを押してオプション名を補完すれば楽に入力できます。

`ctrl-d`と`<Tab>`のパターンには`*`も使えますので、たとえば「オプション名に`time`が含まれるものを一覧表示/補完したい」場合は

[code]

    :set *time
    
[/code]

と入力した後に`ctrl-d`や`<Tab>`を押します。  
以下は`ctrl-d`を押した場合の表示です。

[code]

    :set *time
    matchtime    redrawtime   timeout      ttimeout     updatetime
    mousetime    runtimepath  timeoutlen   ttimeoutlen
    :set *time
    
[/code]

ちなみにパターンは`*time`ですがVimの内部で後ろに`*`を付加して`*time*`でマッチングしているので途中に`time`を含むオプション名も対象になっています。

詳細はヘルプを参照下さい。この2つを知っているだけでだいぶ捗ります。  
`:h c_ctrl-d`  
`:h c_<Tab>`

もちろん、`:let`と`:map`の場合でも同様のことがおこなえます。


CC BY-SA 3.0
2015-06-23T07:45:54.010
11634
2015-06-23T19:41:22.810
2015-06-23T19:41:22.810
2687
2687
11631
answer


redir を使うとコマンドの実行結果がリダイレクト出来ます。

[code]

    :redir > file
    :set
    :redir END
    
[/code]

これで `file` に出力されます。`>>` で追記になります。`:redir @a` でレジスタ @a に結果が格納されます。  
同様に`:redir => a` とすると変数 a に結果が出力されます。なので

[code]

    :redir => a
    :silent map
    :redir END
    
[/code]

とした後、新しいバッファ等で

[code]

     :put =a
    
[/code]

とする事でコマンドの実行結果が貼りつけられます。あとは絞り込むなり検索するなり自由にどうぞ。  
thinca さんが紹介してくれている capture コマンドもこの仕組みで動いています。


CC BY-SA 3.0
2015-06-23T08:21:26.490
11636
2015-06-23T08:21:26.490
440
11631
answer