Hack #9: Insert mode補完 設定編
Posted at 2009/05/11ツイート
Insert modeの補完を使いこなすには、.vimrcで適切に設定することが不可欠です。ここではInsert mode補完における代表的な設定項目を紹介します。
'completeopt'
:- Insert mode補完の設定を行います。’,'区切りでmenuone, menu, preview, longestを指定できます。
- 初期値は”menu,preview”です。
-
- menu
- ポップアップメニューを使った補完を有効にします。
- menuone
- 補完候補が一つしかなくてもポップアップメニューを表示します。補完候補の情報を見るのに便利です。
- longest
- マッチする一番長いテキストのみ補完します。<C-l>を使うことで、補完する文字を増やすことができます。大文字・小文字の区別がどうなるかは、補完に依存します。
- preview
- 補完関数が対応していれば、プレビューウインドウに追加情報を表示します。
'completeopt'
にmenuかmenuoneがないと動作しません。この処理は一部の補完関数でしか有効にならず、しかも重いです。 - menu
- 設定例
set completeopt=menuone,preview
'complete'
:- <C-p>または<C-n>で呼び出されるキーワード補完のスキャン動作を, 区切りの文字列で指定します。たくさん指定すると、他の補完を呼び出さなくて良いので便利ですが、その分動作が遅くなります。
- 初期値は”.,w,b,u,t,i”です。
- 設定できる値は、
:help 'complete'
を参照してください。 - 設定例
set complete=.,w,b,t
'infercase'
:- このオプションがonで、オプション
'ignorecase'
もonのとき、補完候補となる文字列の大文字・小文字はカーソル前の文字列によって変化します。もしカーソル前の文字列がすべて大文字の場合、補完候補をすべて大文字にします。逆にすべて小文字ならば小文字に変換されます。つまり、”Ho” と入力して “hoge” がマッチしたとき、結果は”Hoge” になります。大文字小文字が混在している場合、補完候補も大文字小文字が混在するように変換されます。英文を補完するとき、大文字小文字を無視して補完するときに便利です。 - 初期値はoffです。
'pumheight'
:- ポップアップメニューの最大高さを制御します。補完候補の数がこれを超えた場合、ポップアップメニューにはスクロールバーが表示されます。0を指定すると、表示できる最大値まで画面を占有します。ポップアップメニューがあまり画面を占有しなくなるのと、描画領域が減るため、若干補完が高速になるという効果があります。
- 初期値は0です。
- 設定例
set pumheight=20
'previewheight'
:- プレビューウインドウの最大高さを制御します。この値があまりに大きいと、プレビューウインドウが画面を占有するため、適切な値に設定した方がよいでしょう。
- 初期値は12です。
- 設定例
set previewheight=5
'showfulltag'
:- このオプションをonにすると、タグ補完の時にタグがマッチしたパターンを表示します。これは普通変数や関数の宣言部分となるので、Visual StudioでいうIntellisenseのように使うことができます。このオプションは
'completeopt'
に”longest”が含まれているときは、上手く動作しません。 - 初期値はoffです。
'iskeyword'
:- キーワード補完などでキーワードとみなす文字の種類を定義します。set iskeyword+=で文字を付け加えることによって、他の記号類もキーワードに含めることができます。
- 初期値はプラットフォームやファイルタイプによって異なります。典型的には、Windowsならば”@,48-57,_,128-167,224-235″、UnixやLinuxならば”@,48-57,_,192-255″という値となります。
'completefunc'
:- ユーザ定義補完を行うためにVimが呼び出す関数名を文字列形式でセットします。補完関数に求められる仕様については[Hack #14: Insert mode補完 自作編]で詳しく解説します。
- 初期値は空です。
'omnifunc'
:- オムニ補完を行うためにVimが呼び出す関数名を文字列形式でセットします。補完関数の仕様は
'completefunc'
と変わりません。 - 初期値はファイルタイプやインストールしているプラグインによって異なります。
- key mappingの設定例:
- ここでは、key mappingの設定例をInsert mode補完に絞って紹介します。
inoremap <C-j> <Down>
- これは<C-j>を補完候補移動に割り当てるkey mappingです。正常に動作しますが、ポップアップメニューが開かれていないときにも<Down>へのkey mappingが有効であるため、別の機能を割り当てることができません。それを回避するために、<expr>と
pumvisible()
を利用します。 - <expr>はkey mappingをコマンドを表す文字列で置き換えます。例えば、先ほどのkey mappingは次のものと等価です。
inoremap <C-j> "\<Down>"
- 文字列の中でspecial key mappingを利用するには、<の前に\を付けてエスケープしなければならないことに注意してください。
- pumvisible()はポップアップメニューが開いているときに、0でない値を返します。この関数と三項演算子を組み合わせることで、次のように記述できます。
inoremap <expr> <C-j> pumvisible() ? "\<Down>" : "\<C-x>\<C-o>"
- これを実行すると、<C-j>はポップアップメニューが開いているときに補完候補移動として動作し、開いていないときにはオムニ補完を起動します。
- いちいちpumvisible()を用いて条件分岐をしなければならないのは非常に不便ですが、残念ながらVimにはPopupmenu modeというものは存在しないので、仕方がありません。
- ポップアップメニューの見た目を変更する:
- ポップアップメニューの強調色はcolorschemeによって設定されています。しかし、その色づかいは見にくいものが多いため、.vimrcで設定した方がよいでしょう。次に紹介するのがポップアップメニュー用の強調色です。
-
- Pmenu
- ポップアップメニューのアイテムの色です。
- PmenuSel
- ポップアップメニューの現在選択しているアイテムの色です。
- PmenuSbar
- ポップアップメニューのスクロールバーの色です。
- PmenuThumb
- スクロールバーの現在位置を表す色です。
- Pmenu
- 設定例
hi Pmenu ctermbg=8
hi PmenuSel ctermbg=1
hi PmenuSbar ctermbg=0
もどる
blog comments powered by Disqus