vim-users.jp

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がないと動作しません。この処理は一部の補完関数でしか有効にならず、しかも重いです。
  • 設定例
    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
      スクロールバーの現在位置を表す色です。
  • 設定例
    hi Pmenu ctermbg=8
    hi PmenuSel ctermbg=1
    hi PmenuSbar ctermbg=0
    Shougo

    もどる
    blog comments powered by Disqus