vim-users.jp

Hack #203: 定義されているマッピングを調べる

Posted at 2011/02/27
このエントリーをはてなブックマークに追加

定義されているマッピングを調べたくなった時はないでしょうか。

  1. このプラグインが作ったバッファではどんなマッピングが定義されているのか
  2. 変なマッピングが定義されていないか
  3. Vimプラグインの作者と会話していてマッピングを調べるように言われた
  4. etc.

様々なケースで必要になってきます。(大半の人にとっては1のケースでしょうが)
どうやって調べればいいでしょうか。

:AllMaps

:AllMapsを使います。
次のコードを.vimrcに貼り付けましょう。

command!
\   -nargs=* -complete=mapping
\   AllMaps
\   map <args> | map! <args> | lmap <args>

kana氏の.vimrcに定義されていた:Allmapにインスパイアされたのでそちらも興味があれば参照してください。

使い方

" 全てのマッピングを表示
:AllMaps
" 冒頭で言った1のケースのように現在のバッファで定義されたマッピングのみ表示
:AllMaps <buffer>
" どのスクリプトで定義されたかの情報も含め表示
:verbose AllMaps <buffer>

短くシンプルながらも他のExコマンドと組み合わせることで効果を無限大に発揮できるExコマンドです。

:Capture

また作者が作った:CaptureというExコマンドがあります。
引数に指定したExコマンドを実行し、
コマンドラインへの出力をバッファに表示するというものです。
出力から検索したい場合などに便利です。
(筆者のブログの記事も参照してください)

command!
\   -nargs=+ -complete=command
\   Capture
\   call s:cmd_capture(<q-args>)

function! s:cmd_capture(q_args) "{{{
    redir => output
    silent execute a:q_args
    redir END
    let output = substitute(output, '^\n\+', '', '')

    belowright new

    silent file `=printf('[Capture: %s]', a:q_args)`
    setlocal buftype=nofile bufhidden=unload noswapfile nobuflisted
    call setline(1, split(output, '\n'))
endfunction "}}}

このExコマンドを使えば次のようにしてバッファに出力を書き込むことができます。

" 全てのマッピングをバッファに書き込む (/コマンドで検索できる)
:Capture AllMaps <buffer>

もう少し:Captureについて (vimshell)

vimshellではコマンドラインでの入力で先頭に:をつけるとVimスクリプトのExコマンドだと解釈してくれます。
これはvexeという内部コマンドを使っているので興味があればそちらも参照してください。
(以下$がvimshellのプロンプトだとします)

$ cd    # ホームディレクトリに移動
$ ls    # /bin/lsを実行 (実際にはlsは内部コマンドで、それが/bin/lsを呼び出しているようです)
bin git
$ :ls   # :lsを実行。バッファリストを表示
1  a   "~/memo/todo.txt"      line 0
3  a   "~/.vimrc"             line 0

とても便利でクールですね。

unite.vimで:Capture

unite.vimのunite-outputというsource(:help unite-sources)を使えば
Vimスクリプトの出力をuniteバッファに取り込み、絞り込むことができます。
詳しくは:help unite-source-outputを参照してください。

tyru

もどる
blog comments powered by Disqus