
Vimの挿入モードで入力中、補完候補を自動的にポップアップ表示してくれるプラグインです。
これは便利っ!
autocomplpop.vimで出来ること
元々Vimには挿入モードで<C-n>(Ctrlを押しながらn)すると、開いているバッファやインクルードされるファイルなどからキーワードを補完してくれる機能が備わっています。(どこから補完するかはcompleteオプションの設定によります)
ただ、この機能は補完の都度<C-n>を押す必要があるものでした。
autocomplpop.vimを使うと、このキーワード補完候補の一覧をリアルタイムに(入力に応じて絞り込みながら)ポップアップ表示してくれるようになります。
さらに使いやすくする設定
Tabキーで補完する
標準のままだと、表示された候補の選択は以下のようなお馴染みの操作になります。
- <C-n>:順方向に巡回
- <C-p>:逆方向に巡回
- <C-y>:決定
以下の記事からのリンク先で公開されているvimrcには、Tabキーでの補完を実現するための設定があったのでこれを拝借。
"<TAB>で補完
" {{{ Autocompletion using the TAB key
" This function determines, wether we are on the start of the line text (then tab indents) or
" if we want to try autocompletion
function! InsertTabWrapper()
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<TAB>"
else
if pumvisible()
return "\<C-N>"
else
return "\<C-N>\<C-P>"
end
endif
endfunction
" Remap the tab key to select action with InsertTabWrapper
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
" }}} Autocompletion using the TAB key
これでTabキーだけで順に候補を巡回できます。(2007-12-15追記:Tabキーだと普通にTabを入力したいときおかしなことになるので、私は<S-CR>にmapすることにしました)
動作の調整
こちらは細かな使い勝手を向上させる設定。
途中でEnterしたとき、勝手に補完しない
補完候補があるときでも、途中でそのまま改行したい場合があります。
上記記事を参考に修正してみたところ、Enterキーで勝手に補完されなくなり、どうやら上手く動いているよう。
if pumvisible()
" a command to restore to original text and select the first match
"return "\<C-p>\<Down>"
return "\<C-p>"
途中でEnterしたとき、ポップアップを消して改行する
デフォルトだと候補表示中にEnterキーを押してもポップアップが消えるだけですが、以下のようにvimrcに設定するとすぐ改行できるようになります。(上記リンク先記事参照)
inoremap <expr> <CR> pumvisible() ? \<C-Y>\<CR>" : "\<CR>"
このようなちょっとした違いで、使い勝手の印象は大きく変わりますね。
Rubyのクラス・メソッド名を自動補完
completeオプションを見ての通り、キーワード補完は自前の辞書ファイルを使うことができます。
例えば以下のように設定されている方がいました。
ただ、肝心のRubyの辞書がちょっと探してみてもなかなか見あたりません。
そこで以下のページを参考に辞書を作ってみました。
Windowsでも使えるよう、シェルいらずに直してあります。
ary = []
Dir.glob("C:/ruby/share/ri/1.8/system/*/*.yaml").each do |arg|
File.open(arg) do |io|
while text = io.gets do
if /^full_name/ =~ text
if m = /^full_name:\s"?(\w+)(?:#|::)(\w+[!?]?)/.match(text)
ary.concat(m.captures)
else
STDERR.print "Skipped: #{arg}: #{text}"
end
end
end
end
end
io = open("ruby.dict","w")
ary.uniq.sort.each do |line|
io.puts line
end
rubyのインストールパスを環境に合わせて修正してから適当な名前で保存してrubyで実行してください。
実行するとスキップ情報が標準出力に表示され、スクリプトと同じフォルダにruby.dictファイルが出来上がります。
PerlやPHPの辞書も、作り方の解説ページがありました。
拡張子が.rbのファイルでrubyの辞書が使えるよう、vimrcには以下のように設定しています。
augroup BufferAu
autocmd!
au BufNewFile,BufRead * let g:AutoComplPop_CompleteOption = '.,w,b,u,t'
au BufNewFile,BufRead *.rb let g:AutoComplPop_CompleteOption = '.,w,b,u,t,k~/vimfiles/dict/ruby.dict'
augroup END
以上、お試しあれ。
(*追記@2007-11-18:autocomplpop.vimの1.3以降では、わざわざ辞書を登録しなくても標準でRubyのオムニ補完に対応しています。詳しくは次の記事をご覧ください。)
おまけ
ちなみに、ポップアップの配色はvimrcに以下のように書けば変更できます。デフォルトの配色が気に入らなければ、さっさと変えちゃいましょう。
" ポップアップメニューのカラーを設定 hi Pmenu guibg=#666666 hi PmenuSel guibg=#8cd0d3 guifg=#666666 hi PmenuSbar guibg=#333333



Comments»
[…] autocomplpop.vimでリアルタイムにキーワード補完 […]