Mach3.laBlog

Vimでのオートコンプリート設定覚書

この記事は賞味期限切れです。(更新から1年が経過しています)

エディタは長らくNotepad++を愛用していたのですが、
スクリプトを書くときはやはりViの方が速い…という事できちんと導入しておくことに。
gVimでオートコンプリートさせる設定のまとめです。

Vimでのオートコンプリート設定覚書

autocmplpop.vimを導入

AutoComplPop – Automatically opens popup menu for completions : vim online

デフォルトのままのVimでは、の後に、
, とする事で入力候補をポップアップで表示させる事が出来ます
…が、ちょっとまどろっこしい。

これを自動的にポップアップしてくれるようにしてくれるのが
このAutoComplPopというプラグインです。
導入方法はディレクトリにコピーするだけなので割愛。

尚、当方のUbuntu環境ではl9.vimも必要とされました。
うまく動かなかったら一緒に導入してやりましょう。

L9 – Vim-script library : vim online

導入後の設定

以下が、導入後の設定を極めて分かりやすく紹介してくれている記事。

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

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

以下、リンク先の記事より拝借・抜粋させて頂きます。

ポップアップ中でもEnterキーで候補決定しない様に設定

候補を無視して改行を入力したい場合もあるので、
ポップアップ中のEnterキーで決定しないようにします。
修正箇所は、autoload/acp.vimの192行目付近。

if pumvisible()
    " a command to restore to original text and select the first match
    return "\<C-p>"
endif

これだとEnterでポップアップが消えるだけで、その時はまだ改行は挿入されません。
私はこっちのほうが使いやすいのですが、改行を挿入したい場合はvimrcに下記を追記。

inoremap <expr> <CR> pumvisible() ? "\<C-y>\<CR>" : "\<CR>"

他にもTabで候補を巡回する為の設定等も掲載されていましたが、
私は無い方が使いやすかったので、割愛致します。詳しくはリンク先で!

『オプション ‘omnifunc’ は設定されていません』

…なんていうエラーが吐かれた場合の対処について。

当方の環境では挿入モードで「<」を入力中に上記のエラーが吐かれました。
omnifuncというのはオムニ補完、つまり入力補完のポップアップの事らしく、
これを設定してあげれば黙るかな?というわけで設定してみました。

setlocal omnifunc=syntaxcomplete#Complete

無事静かになってくれました。
参考:Ubuntu日本語フォーラム / vim autocomplpop エラーについて

ついでなのでPHPの辞書を突っ込んでおこう

異常に関数の多いPHPこそ入力補完が役に立ちますね。
辞書ファイルはただ改行で候補を連ねるだけなので、簡単に作成出来ます。

参考:Vim で PHP 関数の辞書を作成する方法についてのメモ

上記リンクより抜粋。多謝!
こちらのコードを走らせる事で辞書ファイルを生成出来ます。

<?php
$keywords = array(
    'if', 'else', 'elseif', 'endif', 'while', 'endwhile', 'do', 'as', 'for', 'endfor', 'foreach', 'endforeach',
    'break', 'continue', 'switch', 'endswitch', 'case', 'default', 'declare', 'enddeclare',
    'try', 'catch', 'return', 'exit', 'const', 'class', 'function',
    'require', 'include', 'require_once', 'include_once',
    'abstract', 'final', 'interface', 'private', 'protected', 'public', 'static',
    '__LINE__', '__FILE__', '__DIR__', '__FUNCTION__', '__CLASS__', '__METHOD__', '__NAMESPACE__'
);
$functions  = function_exists( 'get_defined_functions'   ) ? get_defined_functions()   : array();
$constants  = function_exists( 'get_defined_constants'   ) ? get_defined_constants()   : array();
$interfaces = function_exists( 'get_declared_interfaces' ) ? get_declared_interfaces() : array();
$classes    = function_exists( 'get_declared_classes'   ) ? get_declared_classes()  : array();

$arrays = array_merge(
    $keywords,
    $functions['internal'],
//  array_keys( $constants ),   // 定数を補完したい場合はこの行を有効にする
    $interfaces,
    $classes
);
sort( $arrays );
$arrays = array_unique( $arrays );
echo implode( "\n", $arrays );

生成した辞書ファイルをvimrcで登録しておけば完了です。

autocmd FileType php :set dictionary=~/.vim/dict/php.dict

Windowsの場合は下記のような感じ。
“$VIM”はgVim.exeがインストールされているパスです。

autocmd FileType php :set dictionary=$VIM/vimfiles/dict/php.dict

辞書は必要に応じて追加していきましょう。
ActionScriptなんかも欲しいなぁ…


ひとまずこんな感じで、Win/Linux共にまともに動いてくれています。
オムニ補完はバッファの中身のみならず、
辞書を設定しておけば辞書内からも候補を表示してくれる優れもの。
Linxではパスの入力もこれでかなり楽になりますね。

ノートでのコーディングがとても快適になりました!すごいやVim!

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

Tweets that mention Vimでのオートコンプリート設定覚書 | Mach3.laBlog -- Topsy.comd41d8cd98f00b204e9800998ecf8427e