2006-01-25 (%J) [長年日記]
■ [vim] Vim7で新規追加されたInsertモードの補完
Vim7でInsertモードの補完が3つ増えたので簡単にまとめ。
- ユーザ定義補完 (CTRL-X_CTRL-U)
- Omni completion (CTRL-X_CTRL-O)
- スペル補完 (CTRL-X_s)
'completefunc'に設定した関数を使って補完。
'omnifunc'に設定した関数を使って補完。'omnifunc'はftpluginファイルの中で、ファイルタイプにあった関数を設定。いまのとこ、C、CSS、HTML、XMLのみ。autoload/pycomplete.vimもあるので、Pythonもできるっぽいけど、ftpluginファイルには書いてないみたい。
あと、autoload/syntaxcomplete.vimはsyntaxファイルに設定されたキーワードから補完できるみたい。
で使えるけど、
ってしとけば、CTRL-X_CTRL-Uでsyntax補完、CTRL-X_CTRL-OでOmni補完ができるので、それもありかも。
set spellの場合、内部辞書による候補がでるみたい。
■ [vim] ついでに、Vim6までにあるInsertモードの補完
以外としらなかったのが多くてびっくり。詳細は、香り屋さんにある和訳されたinsert.txtを見るといいかも。Vim7ならこれらの補完でも候補のポップアップが出る。
いっぱいあるけど、常用する(できる)のは2,3個だと思う。自分は'complete'補完と辞書補完しか使ってなかった。言語用の辞書やtagsファイルを作っておいて、Complete関数を改良してCTRL-X_CTRL-O一つですませられるようになれば、一番楽だろうなぁ。
- 行全体の補完 (CTRL-X_CTRL-L)
- 現在のファイルのキーワードで補完 (CTRL-X_CTRL-N, CTRL-X_CTRL-P)
- 辞書補完 (CTRL-X_CTRL-K)
- シソーラス補完 (CTRL-X_CTRL-T)
- 編集中と外部参照しているファイルからの補完 (CTRL-X_CTRL-I)
- タグで補完 (CTRL-X_CTRL-])
- ファイル名で補完 (CTRL-X_CTRL-F)
- 定義もしくはマクロ (CTRL-X_CTRL-D)
- Vimのコマンドから補完 (CTRL-X_CTRL-V)
- 'complete'で設定したバッファから補完 (CTRL-N, CTRL-P)
■ [vim] あと、Complete()メモ
Complete()はCTRL-X_CTRL-Oされた時に、2度呼ばれる。
1度目は、引数 findstart = 1, base = '' が渡され、入力中の単語の先頭位置を返す。
2度目は、引数 findstart = 0, base には1度目の返り値を元に入力中の単語が渡され、配列 (List) を返す事で候補のポップアップが表示される。
あとは、ccompleteの場合は '.' か '->' で文字列を配列にして、配列が1個だけならtagsファイルから候補を選択。
配列が1個以上なら、変数をgd (ローカル宣言の場所へジャンプ) か、:tag か gD (グローバル宣言の場所へジャンプ)で飛んで型を見て、構造体などのメンバの候補を選択する。
ちなみに、構造体のメンバの候補を表示するのは、ctagsで作ったファイルの行の最後に struct:構造体名 てのが入ってないと動かない。ctagsは、
(無名の構造体?)で定義したものは、struct:構造体名 というのを追加してくれないから、適当Perlスクリプトを書いてみた。久しぶりに書いて汚いので、使用は自己責任で :-)
いつも読んでるソースは、PHPかRubyなので、phpcompleteとかrubycompleteを作りたいけど、いつになるかどーか。まぁ、そのうち。
■ [vim] 色が違うよ!
Vim7を導入しようと思ったきっかけは、2nd lifeさんのこのエントリでした。
そこの画像の配色がきれいなので使わせてもらおーと思ったら、配色を変更する設定と画像が合ってないのかな?全然別のものに。syntax.txtによると0は黒、8がグレー、12が赤みたい。
自分は、普段はWindowsでgvimを使ってて、colorschemeはdesertなので、結局こんなかんじに。
ちなみに、colorscheme設定で上書きされちゃうようなので、colorscheme設定の後に書かないとダメ。
せっかくなので、トラックバック打ってみたりして。
(追記)
そうか、Termの配色を変えてるんだとトラバ送ってから気付いてみたりして。恥ずかしい…
