jump to navigation

autocomplpop.vimでリアルタイムにキーワード補完

2007-11-16 18:00 Posted by
nase
in : プログラミング
landscape1.jpg

Vimの挿入モードで入力中、補完候補を自動的にポップアップ表示してくれるプラグインです。

これは便利っ!

autocomplpop.vimで出来ること

元々Vimには挿入モードで<C-n>(Ctrlを押しながらn)すると、開いているバッファやインクルードされるファイルなどからキーワードを補完してくれる機能が備わっています。(どこから補完するかはcompleteオプションの設定によります)

ただ、この機能は補完の都度<C-n>を押す必要があるものでした。

autocomplpop.vimを使うと、このキーワード補完候補の一覧をリアルタイムに(入力に応じて絞り込みながら)ポップアップ表示してくれるようになります。

autocomplpop.vim
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»

1. VIM 대박 플러그인 (자동완성) - 2008-6-16

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

2. sasata299's blog - 2009-2-6

vim環境を晒してみる…

いきなりですが、僕はvi派です。emacsは・・使ったことない(^^;)

ということで、そろそろ.vimrcを晒しておくかと思ったんですが、よく考えたらすでにここ (more…)

3. hiroakit blog : Ubuntu と Vim - 2009-8-14

[…] ナレッジエース: autocomplpop.vimでリアルタイムにキーワード補完 […]

4. Vimはじめての設定 « とらぶろぐ - 2009-12-21

[…] プラグインの追加(リアルタイムキーワード補完) →autocomplpop.vimでリアルタイムにキーワード補完を参考にautocomplpop.vimをインストール […]

5. Vimでautocomplpopを使って快適にリアルタイム補完 | takulab - 2010-7-31

[…] autocomplpop.vimでリアルタイムにキーワード補完 – ナレッジエース 関連エントリーUNIXコマンド履歴 – UNIXリファレンス RubyRuby講座 その01 ~インストールからHello World~ データベースNoSQL Cassandraを使ってみる ~インストール編~ データベースNoSQL Cassandraを使ってみる ~Rubyでアクセス編~ WordPressAdsenseに英語広告が表示される際の解決策 カテゴリー: Vim タグ: コメント (2) トラックバック (0) コメントをどうぞ トラックバックURL […]

6. Vimでのオートコンプリート設定覚書 | Mach3.laBlog - 2010-11-19

[…] autocomplpop.vimでリアルタイムにキーワード補完 – ナレッジエース […]

7. CubicLouve - dotfilesの設定 vol.1 + vim のskelが便利すぎる!! - 2012-2-29

[…] とする。 encodingの設定は、意外と役に立つ場面が多いですね(自画自賛)。思った以上によかった設定ですね。 【参考にしたサイト】 autocomplpop.vimを入れてやったこと-vimプラグイン autocomplpop.vimのON/OFFをトグルする autocomplpop.vim autocomplpop.vimでリアルタイムにキーワード補完 vimしか使えない […]


*Comments and trackbacks will appear after it is approved by the administrator.