殆どのIDEは入力補完機能を提供しています。優れたエディタであるVimは勿論補完機能を設けています。しかも、Vimはプログラム・ソースだけではなく、ファイル名、字引、バッファによる色々な形の補完をサポートしています。
Vimの補完を大きく分けて、OMNI補完とその他補完になります。
1.Onmi補完
Onmi補完は幾つかのプログラミング言語を対応しています、例えばC,C++,XML/HTML,CSS,JAVASCRIPT,PHP,RUBYなどを挙げます。詳しいリストは「:help compl-omni-filetypes」で参照します。ここで、主にCとC++に関する補完を紹介します。
Vimは補完を行う時、ファイル・タイプによって補完関数が異なります。即ち、Onmi補完を利用するには、ファイル・タイプ認識機能を有効にしなければ成りません。以下の一行をvimrcに追加し、タイプ認識を有効にします。
filetype plugin indent on
1.1 Cの補完
CとC++ソースのOnmi補完は、Exuberant ctagsが作ったタグファイルを利用します。Exuberant ctagsの詳細について、シリーズの 4.tagファイルとtaglistプラグイン(その1) を参照します。
Vim 7.1のソースを例として、vim71/src にて、コマンドから「ctags -R」を実行し、タグファイルを生成します。
VimMain()関数にて、「gui」を入力し、「CTRL-X CTRL-O」を押すと、Vimの状態欄に「Omni Completeion」が表示されます。これは補完を行っていることを表します。また、マッチしたタグがプルダウンに表示され、矢印キーで選択し、Enterを押せばソースに挿入できます。

デフォルトでは、補完時、Vimはプルダウンで候補を表示し、画面上部にプレビュー・ウィンドを一つ開いて候補の詳細を表示します。私は「completeopt」オプションを設定し、プレビュー・ウィンドを表示しないようにしています。
set completeopt=longest,menu
1.2 C++の補完
C++の補完をサポートするには、OmniCppCompleteプラグインが必要です。http://www.vim.org/scripts/script.php?script_id=1520 からダウンロードし、$HOME/.vim に解凍します。vimrcにて、Vi互換モードを無効にし、ファイル・タイプ認識を有効にします。
set nocp
filetype plugin on
続いて、下記コマンドでC++ソースのタグ・ファイルを生成します(ソース・ファイルは src フォルダにあるとする)。
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src
最後、Vimのtagオプションを正しく設定すれば、C++の補完が利用できるようになります。
1.3 キー・バインド
以下は私のvimrcの中の補完に関するキー・バインドです。pumvisible()関数を使ってプルダウンが表示しているかどうかを判断し、その結果によってキー・バインドを変えます。
"mapping
inoremap <expr> <C-J> pumvisible()?"\<PageDown>\<C-N>\<C-P>":"\<C-X><C-O>"
inoremap <expr> <C-K> pumvisible()?"\<PageUp>\<C-P>\<C-N>":"\<C-K>" |
以上は全て挿入モードのバインドです。意味は下記の通りです。
| |
プルダウン有り |
プルダウン無し |
| CTRL-J |
プルダウンの次ページへ |
CTRL-X CTRL-O |
| CTRL-K |
プルダウンの前ページへ |
CTRL-K |
2.その他の補完
Omni補完以外、よく使うのはCTRL-NとCTRL-P補完です。これらは開いたバッファと編集中のファイルのヘッダ・ファイルから、カーソル前の文字から始まる単語を探して補完します。Omni補完とは違う、CTRL-NとCTRL-Pはローカル変数も補完できます。
CTRL-Nは下を検索するとは違う、CTRL-Pは上を検索して補完を行います。
CTRL-NとCTRL-Pを使う時、検索場所は「complete」オプションで設定します。例えば、大きいプロジェクトの場合、ヘッダ・ファイルを探せば時間が掛かります。そこで、complete オプションから、「i」を外した場合、CTRL-NとCTRL-Pはヘッダ・ファイルから探さなくなり、補完の速度は大幅に速くなります。詳しくは「:help ’complete’」。
他にも色々な補完があります、例えば、「CTRL-X CTRL-F」は作業フォルダのファイルとフォルダを補完できます。以下のイメージです。

全ての補完方式について、「:help ins-completion」で確認できます。
3.SuperTabプラグイン
SuperTabプラグインは、前回使った補完方式を記録して、次回は<TAB>キーを押すだけで前回と同じタイプの補完を重複できます。例えば、前回はCTRL-X CTRL-Fでファイル名補完を行った場合、他の補完方式を行うまで、TABでファイル名の補完ができます。
SuperTabは http://www.vim.org/scripts/script.php?script_id=1643 からダウンロードします。ダウンロードしたファイルを$HOME/.vim/pluginに配置すればインストールは完了です。
SuperTabを設定できます。
g:SuperTabRetainCompletionType:初期値は「1」です。意味は、他の補完方式を行うまで、前回の補完方式を保持します。「2」にする時は、ESCで通常モードに戻るまで、前回の補完方式を保持します。
g:SuperTabDefaultCompletionType:デフォルトの補完方式を設定します。初期値はCTRL-Pです。
私は特に設定していませんが、自分の習慣と合せて、下記のようにvimrcに設定できます。
let g:SuperTabRetainCompletionType = 2
let g:SuperTabDefaultCompletionType = "<C-X><C-O>" |
SuperTabを利用することで、シェルのようにTABで補完でき、凄く便利になりました。
== 関連ヘルプ ==
:help ins-completion
:help compl-omni
:help ’omnifunc’
:help i_CTRL-X_CTRL-O
:help ins-completion-menu
:help popupmenu-keys
:help ’completeopt’
:help compl-omni-filetypes
:help omnicppcomplete.txt
:help compl-generic
:help ’complete’
:help ins-completion |
|