Hack #203: 定義されているマッピングを調べる
Posted at 2011/02/27ツイート
定義されているマッピングを調べたくなった時はないでしょうか。
- このプラグインが作ったバッファではどんなマッピングが定義されているのか
- 変なマッピングが定義されていないか
- Vimプラグインの作者と会話していてマッピングを調べるように言われた
- 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
を参照してください。
もどる
blog comments powered by Disqus