Vimでのオートコンプリート設定覚書
この記事は賞味期限切れです。(更新から1年が経過しています)
エディタは長らくNotepad++を愛用していたのですが、
スクリプトを書くときはやはりViの方が速い…という事できちんと導入しておくことに。
gVimでオートコンプリートさせる設定のまとめです。
autocmplpop.vimを導入
AutoComplPop – Automatically opens popup menu for completions : vim online
デフォルトのままのVimでは、
…が、ちょっとまどろっこしい。
これを自動的にポップアップしてくれるようにしてくれるのが
このAutoComplPopというプラグインです。
導入方法はディレクトリにコピーするだけなので割愛。
尚、当方のUbuntu環境ではl9.vimも必要とされました。
うまく動かなかったら一緒に導入してやりましょう。
L9 – Vim-script library : vim online
導入後の設定
以下が、導入後の設定を極めて分かりやすく紹介してくれている記事。
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!
コメント