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でリアルタイムにキーワード補完 […]
vim環境を晒してみる…
いきなりですが、僕はvi派です。emacsは・・使ったことない(^^;)
ということで、そろそろ.vimrcを晒しておくかと思ったんですが、よく考えたらすでにここ (more…)
[…] ナレッジエース: autocomplpop.vimでリアルタイムにキーワード補完 […]
[…] プラグインの追加(リアルタイムキーワード補完) →autocomplpop.vimでリアルタイムにキーワード補完を参考にautocomplpop.vimをインストール […]
[…] autocomplpop.vimでリアルタイムにキーワード補完 – ナレッジエース 関連エントリーUNIXコマンド履歴 – UNIXリファレンス RubyRuby講座 その01 ~インストールからHello World~ データベースNoSQL Cassandraを使ってみる ~インストール編~ データベースNoSQL Cassandraを使ってみる ~Rubyでアクセス編~ WordPressAdsenseに英語広告が表示される際の解決策 カテゴリー: Vim タグ: コメント (2) トラックバック (0) コメントをどうぞ トラックバックURL […]
[…] autocomplpop.vimでリアルタイムにキーワード補完 – ナレッジエース […]
[…] とする。 encodingの設定は、意外と役に立つ場面が多いですね(自画自賛)。思った以上によかった設定ですね。 【参考にしたサイト】 autocomplpop.vimを入れてやったこと-vimプラグイン autocomplpop.vimのON/OFFをトグルする autocomplpop.vim autocomplpop.vimでリアルタイムにキーワード補完 vimしか使えない […]