*ft_sql.txt* For Vim バージョン 8.1. Last change: 2013 May 15 by David Fishburn
これは SQL ファイルを編輯するためのファイルタイププラグインです。
Structured Query Language (SQL) はリレーショナルデータベースと對話するための文を規定した規格です。Vim には SQL 內を移動、インデント、構文ハイライトする機能が備はつてゐます。
1. 移動 | |sql-navigation| |
1.1 Matchit | |sql-matchit| |
1.2 オブジェクト單位の移動 | |sql-object-motions| |
1.3 SQL 獨自のオブジェクト單位移動 | |sql-predefined-objects| |
1.4 マクロ | |sql-macros| |
2. SQL の方言 | |sql-dialects| |
2.1 SQLSetType | |SQLSetType| |
2.2 SQLGetType | |SQLGetType| |
2.3 SQL 方言の既定値 | |sql-type-default| |
3. SQL 方言を追加する | |sql-adding-dialects| |
4. SQL オムニ補完 | |sql-completion| |
4.1 static モード | |sql-completion-static| |
4.2 dynamic モード | |sql-completion-dynamic| |
4.3 SQL 補完のチュートリアル | |sql-completion-tutorial| |
4.3.1 テーブル補完 | |sql-completion-tables| |
4.3.2 カラム補完 | |sql-completion-columns| |
4.3.3 プロシージャ補完 | |sql-completion-procedures| |
4.3.4 ビュー補完 | |sql-completion-views| |
4.4 補完のカスタマイズ | |sql-completion-customization| |
4.5 SQL 關聯のマップ | |sql-completion-maps| |
4.6 他のファイルタイプのファイル內で使ふには | |sql-completion-filetypes| |
SQL ファイルタイププラグインはファイル內の移動を支援するためのオプションを多數備へてゐます。
matchit プラグイン (http://www.vim.org/scripts/script.php?script_id=39) はたくさんの機能を備へてをり、異なる言語に對應するためにカスタマイズすることができます。matchit プラグインはローカル變數 b:match_words を定義することで設定します。樣々なキーワードの上で % キーを押すと、それに對應する位置へカーソルを移動します。例へばカーソルが "if" の上にあるとき % を押すと "else", "elseif", "end if" の閒を循環して移動します。
以下のキーワードがサポートされてゐます:
if elseif | elsif else [if] end if [while condition] loop leave break continue exit end loop for leave break continue exit end loop do statements doend case when when default end case merge when not matched when matched create[ or replace] procedure|function|event returns
Vim には既定でテキストオブジェクトを操作するキーがたくさん定義されてゐます |object-motions|。このファイルタイププラグインはこれらのキーの一部を SQL 用に再定義します。
SQL ファイルを編輯するとき、以下のノーマルモード |Normal| とビジュアルモード |Visual| のマップが定義されます:
]] | 次の ’begin’ へ移動する |
[[ | 前の ’begin’ へ移動する |
][ | 次の ’end’ へ移動する |
[] | 前の ’end’ へ移動する |
ほとんどのリレーショナルデータベースはテーブル、インデックス、トリガー、ストアドプロシージャなど樣々な標準的な機能を備へてゐます。また、ベンダーごとに樣々な獨自オブジェクトがあります。次のマップたちはこれらのオブジェクト閒を移動するために作られてゐます。お使ひのデータベースによつてオブジェクトのリストを調整できるやうでなればなりません。このファイルタイププラグインは標準オブジェクトのほとんどと、多くの追加的なオブジェクトを定義してゐます。これを可能な限りフレキシブルにするために、|vimrc| でオブジェクトのリストを上書きできるやうになつてゐます。次のやうにします:
let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' . \ ',schema,service,publication,database,datatype,domain' . \ ',index,subscription,synchronization,view,variable'
上記のリストを對象として、以下のノーマルモード |Normal| とビジュアルモード |Visual| のマップが定義されてゐます:
]} | 次の ’create <オブジェクト名>’ へ移動する |
[{ | 前の ’create <オブジェクト名>’ へ移動する |
繰り返し ]} を押すとこれらの create 文の閒を循環して移動します:
create table t1 ( ... ); create procedure p1 begin ... end; create index i1 on t1 (c1);
g:ftplugin_sql_objects の既定値は以下の通りです:
let g:ftplugin_sql_objects = 'function,procedure,event,' . \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' . \ 'table,trigger' . \ ',schema,service,publication,database,datatype,domain' . \ ',index,subscription,synchronization,view,variable'
上記の設定は以下の場合にも對應してゐます:
create table t1 ( ... ); create existing table t2 ( ... ); create global temporary table t3 ( ... );
既定では CREATE 文だけを檢索します。|vimrc| に以下を書くと、他の文も對象にすることができます:
let g:ftplugin_sql_statements = 'create,alter'
このファイルタイププラグインは以下の 3 種類のコメントを定義してゐます:
1. -- 2. // 3. /* * */
コメントを對象として、以下のノーマルモード |Normal| とビジュアルモード |Visual| でのマップが定義されてゐます:
]" | 次のコメントの開始位置へ移動 |
[" | 前のコメントの終了位置へ移動 |
|'define'| に以下の正規表現を設定することにより、マクロ定義を見つけるための Vim の機能に對應してゐます:
\c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>
この正規表現は以下のやうなコードに對應してゐます:
CREATE VARIABLE myVar1 INTEGER; CREATE PROCEDURE sp_test( IN myVar2 INTEGER, OUT myVar3 CHAR(30), INOUT myVar4 NUMERIC(20,0) ) BEGIN DECLARE myVar5 INTEGER; SELECT c1, c2, c3 INTO myVar2, myVar3, myVar4 FROM T1 WHERE c4 = myVar1; END;
以下の行の "myVar1" の上にカーソルを置いて、:
WHERE c4 = myVar1; ^
以下のキーのどれかを押してみてください:
[d [D [CTRL-D
すべてのリレーショナルデータベースは SQL に對應してゐます。SQL の一部分はベンダー閒で移植可能です (例: CREATE TABLE, CREATE INDEX) が、ベンダー固有の擴張が大量にあります。Oracle は "CREATE OR REPLACE" 構文、CREATE TABLE 文でのカラム既定値の指定、プロシージャ言語 (ストアドプロシージャとトリガー) を備へてゐます。
標準の Vim ディストリビューションには Oracle の PL/SQL に基づいた構文ハイライトが附屬してゐます。SQL インデントスクリプトは Oracle と SQL Anywhere 用に動作します。ファイルタイププラグインはすべてのベンダー用に動作し、ベンダー中立を保ちつつも擴張可能であるべきです。
現在樣々なベンダーに對應してゐます。これは構文スクリプトを通して實現してゐます。殘念なことに、複數の構文ルールを切り替へるには以下のどれかを作成しなければなりません:
大多數の人は 1 つのベンダーのデータベース製品しか扱はないため、|vimrc| で既定値を設定しておくとよいでせう。
複數のデータベースを扱つてゐる人々にとつては、バッファごとまたは任意のタイミングでベンダーのルール(インデント、構文)を切り替へられるとよいでせう。ftplugin/sql.vim では次のコマンドが定義されてゐます:
SQLSetType
このコマンドを引數なしで實行すると、インデントと構文スクリプトが既定値に戾ります。既定値は |sql-type-default| を參照してください。Vi 互換モードをオフにしてゐると (|'compatible'|)、<Tab>
キーで引數を補完できます。
コマンド名とスペースをタイプした後、引數を指定するために補完を利用できます。このコマンドは source したい Vim scriptの名前を受け取ります。|cmdline-completion| 機能により、SQLSetType コマンドは |'runtimepath'| から名前に ’sql’ を含む Vim script を檢索します。これは名前のスペルから推測を取り出します。以下が例です:
:SQLSetType :SQLSetType sqloracle :SQLSetType sqlanywhere :SQLSetType sqlinformix :SQLSetType mysql
もつとも簡單な方法は、<Tab>
を使つてまずコマンド名 (SQLSetType) を補完し、スペースに續いてもう一度 <Tab>
を押すと利用可能な Vim script の名前のリストが表示されます:
:SQL<Tab><space><Tab>
現在、どの SQL の方言が使はれてゐるかを調べるには、コマンド SQLGetType を使ひます。ftplugin/sql.vim で次のコマンドが定義されてゐます:
SQLGetType
このコマンドを使ふと、以下のやうな文字列がエコー表示されます:
Current SQL dialect in use:sqlanywhere
すでに述べたやうに、Vim の既定の構文ルールは Oracle (PL/SQL) に基づいてゐます。これを上書きするには、次のうちどれかを |vimrc| に書きます:
let g:sql_type_default = 'sqlanywhere' let g:sql_type_default = 'sqlinformix' let g:sql_type_default = 'mysql'
次を |vimrc| に書くと:
let g:sql_type_default = 'sqlinformix'
次囘 SQL ファイルを編輯するときには以下のスクリプトが自動的に讀み込まれます:
ftplugin/sql.vim syntax/sqlinformix.vim indent/sql.vim
Note”
indent/sqlinformix.sql は讀み込まれてゐないことに注意してください。Informix 用のインデントファイルは存在しないため、既定のインデントファイルが讀み込まれてゐます。
Vim の標準ディストリビューションにスクリプトが含まれてゐない SQL 方言を扱ふときは、對應するスクリプトが投稿されてゐないか http://www.vim.org をチェックしてみてください。もしなければ既存のスクリプトをコピーしてカスタマイズしませう。詳しくは |filetype-plugins| を參照してください。
スクリプトを識別しやすくするために、ファイル名の先頭に "sql" といふ接頭辭をつけてください。例へば SQLite データベース用のカスタマイズを作りたい場合は、以下のファイルを作成します:
~/.vim/syntax/sqlite.vim
~/.vim/indent/sqlite.vim
$VIM/vimfiles/syntax/sqlite.vim
$VIM/vimfiles/indent/sqlite.vim
SQLSetType コマンドには變更を加へる必要はありません。SQLSetType コマンドを實行すると自動的に新しい SQL ファイルが選ばれ、讀み込まれます。
Vim 7 にはプラグイン開發者が任意の言語用のコード補完を作るためのインターフェイスと函數が備はつてゐます。Vim 7 には SQL 言語用のコード補完が含まれてゐます。
SQL 補完プラグインには static と dynamic といふ2つのモードがあります。static モードは 現在の構文强調ルールから生成されたデータをもとにポップアップを表示します。dynamic モードはデータベースから直接抽出したデータをもとにポップアップを表示します。このデータにはテーブルのリスト、カラムのリスト、プロシージャ名などが含まれます。
static ポップアップはファイルタイプが SQL のファイルを編輯してゐるときに、使用中の構文ルールで定義された項目を含んで表示されます。プラグインは、表示される項目のリストを絞り込むための樣々なマップを用意してゐます。
既定の static マップは次の通りです:
imap <buffer> <C-C>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O> imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O> imap <buffer> <C-C>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O> imap <buffer> <C-C>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O> imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O> imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
"<C-C>" のキーは環境によつては動作しないかもしれません。そこで、以下の行を |.vimrc| に書くことで "<C-C>" を他のキーに變更できます:
let g:ftplugin_sql_omni_key = '<C-C>'
static マップ (構文强調グループに基づいてゐる) は以下の形式で定義されてゐます:
imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O> imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O>
このコマンドは次のやうに分解できます:
- 插入モードでのマップを作成する
- このバッファに對してのみ
- マップするキー
- コマンドを 1 個實行し、插入モードに戾る
- 他の補完プラグインと組み合はせて使へるやうにするために、いくつかの管理維持する函數を實行します。
どの項目を補完して欲しいかを SQL 補完プラグインに指示します。
この場合は構文强調グループ ’sqlKeyword’ の項目を表示するやう指定してゐます。
選擇可能な構文强調グループ名のリストは、SQL ファイルを編輯中に次のコマンドで表示できます。
:syntax list
- 構文强調グループ sqlKeyword の項目を表示します。
- Vim 7.4 からは、正規表現を使つて構文强調グループを選擇できます。
- :let コマンドを實行します。
- 標準のオムニ補完のキーストロークを實行します。sqlcomplete#Map 函數の引數に ’sqlKeyword’ を渡してあるので、SQL 補完プラグインは構文强調グループsqlKeyword の項目をポップアップするやうになつてゐます。プラグインは Vim が再起動するまでこの結果をキャッシュします。構文のリストは syntaxcomplete プラグインを使つて抽出されます。
’syntax’ キーワードを使ふのは特別な場合です。これは syntaxcomplete プラグインにすべての構文アイテムを抽出するやう指示します。そのためこれは Vim のどの SQL 構文ファイルに對しても有效です。これを書いてゐる時點でこれは SQL 方言用の 10 個の構文ファイルを含んでゐます (上のセクション 3 |sql-dialects| を參照)。
構文ファイルから抽出される項目の例を以下に示します:
- 全構文强調グループの中身
- Select, Insert, Update, Delete, Create, Alter, ...
- Min, Max, Trim, Round, Date, ...
- Index, Database, Having, Group, With
- Isolation_level, On_error, Qualify_owners, Fire_triggers, ...
- Integer, Char, Varchar, Date, DateTime, Timestamp, ...
dynamic モードではデータベースから直接抽出したデータを元にポップアップを表示します。dynamic 機能を有效にするためには dbext.vim をインストールしなければなりません(http://vim.sourceforge.net/script.php?script_id=356)。
dynamic モードは SQL 補完プラグインのいくつかの機能から使はれてゐます。dbext プラグインをインストールしたら dbext-tutorial の設定と使ひ方を讀んでください。dbext を使ふと SQL 補完プラグインがテーブル、プロシージャ、ビュー、カラムのリストを表示できるやうになります。
- 全スキーマ所有者の全テーブル
- 全スキーマ所有者の全ストアドプロシージャ
- 全スキーマ所有者の全ビュー
- 選擇したテーブル內のカラム
これらのリストをポップアップを表示するには、插入モードで以下のキーを使ひます (ここで <C-C> は CTRL
キーを押しながら C
キーを押すといふ意味です):
- <C-C>t
- <C-X><C-O> (既定のマップはテーブルリスト)
- <C-C>p
- <C-C>v
- <C-C>c
- テーブルリストのポップアップウィンドウを表示中に <Right>
を押すと現在選擇されてゐるテーブルのカラムリストの表示に切り替はります。
- カラムリストのポップアップウィンドウを表示中に <Left>
を押すとテーブルリスト表示に切り替はります。
- これを使へばテーブルリストとカラムリストの表示を素早く切り替へることができます。
- <Right>
と <Left>
のキーも |.vimrc| により變更できます
let g:ftplugin_sql_omni_key_right = '<Right>' let g:ftplugin_sql_omni_key_left = '<Left>'
SQL 補完プラグインはポップアップウィンドウに表示されるリストをキャッシュしておきます。これによつてリストの再表示がとても高速になります。データベースに新しいテーブルやカラムが追加されたときはプラグインのキャッシュをクリアする必要が出てくるかもしれません。キャッシュをクリアするための既定のマップは次の通りです:
imap <buffer> <C-C>R <C-\><C-O>:call sqlcomplete#Map('ResetCache')<CR><C-X><C-O>
このチュートリアルは SQL 補完プラグインの主な機能を一通り紹介することを意圖して次のことが書かれてゐます:
まづ、新規バッファを作成しませう:
:e tutorial.sql
各種のリストを表示するには、單に插入モードで次をタイプします:
<C-C>s (SQL 文を表示する)
そしてリストの中を "select" まで下に移動していきます。探してゐる項目をよく知つてゐる場合、例へばそれが "s" といふ文字で始まることを知つてゐる場合は、その文字を續けてタイプできます。"se" とタイプしてから (引用符はタイプしません):
<C-Space>t
を押してみてください。 "select" が選擇されたところで <Enter> を押すとその項目を確定します。次に
* fr<C-C>a (すべての構文アイテムを表示する)
とタイプしてみてください。"from" が候補に現れるでせう。
ストアドプロシージャを書くときには型リストが便利です。型リストはそのデータベースがサポートしてゐるすべての型を含んでゐます。ただしこれはお使ひの構文ファイルに依存します。SQL Anywhere 構文ファイル(sqlanywhere.vim)は以下のやうな場合に對應してゐます:
BEGIN DECLARE customer_id <C-C>T <-- リストから型を選ぶ
dynamic な機能を使ふにはまづ dbext.vim (http://vim.sourceforge.net/script.php?script_id=356) をインストールしなければなりません。このプラグインにはチュートリアルが附屬してゐます。SQL 補完プラグインの觀點からすると、dbext の主な機能はデータベースへの接續です。dbext の接續プロファイルは接續情報を定義するためのもつとも效果的なメカニズムです。一度接續が確立されてゐれば、SQL 補完プラグインはポップアップを表示する際にバックグラウンドで dbext の機能を利用します。
dbext.vim を正しく設定したら、テストするためにコマンド :DBListTable を實行します。テーブルのリストが表示されれば dbext.vim が正常に動作してゐます。表示されない場合は dbext.txt を讀んで調べてください。
既に dbext のチュートリアルをやつてゐれば、<C-C>t でテーブルのリストを表示できることをご存知でせう。dbext がテーブルリストを作成する閒、少々時閒がかかります。リストが表示されたら <C-W> を押してください。するとポップアップウィンドウと既に選擇されたテーブル名の兩方が消えます。
dbext により接續したデータベース內のテーブルのリストを表示するには <C-c>t を押します。
Note:
SQL 補完ポップアップはすべてキーマップの前のプリフィックスに對應してゐます。プリフィックスを指定すると、ポップアップウィンドウの內容がその文字列で始まるものだけに制限されます。
SQL 補完プラグインは特定のテーブルのカラムのリストを表示することもできます。このカラム補完は <C-C>c で起動できます。
Note:
以下の例ではポップアップウィンドウの表示中に<Right>
でカラムリストを表示してゐます。
カラム補完を使用してゐる樣子の例:
<Right>
を押すとテーブルのリストが消え、途中まで 入力されたテーブルに含まれるカラムのリスト表示に切り替はります (すこし時閒がかかります)。
<Left>
を押すとカラムリストからテーブルリストに切り替はります。これによつてテーブルリストとカラムリストをとても素早く切り替へられます。
<Right>
を押すと、今度はカラムリストがキャッシュされてゐるため時閒がかからないことに氣づくでせう。キャッシュしてゐるテーブルのスキーマが變更されたときは <C-C>R を押します。すると SQL 補完のキャッシュがクリアされます。
Note:
<Right>
と<Left>
は補完ウィンドウがアクティブな狀態で動作するやう設計されてゐます。補完のポップアップウィンドウがアクティブでない場合はノーマルモードでの<Right>
と<Left>
の動作になります。
SQL 文を動的に組み立てる方法を見てゐきませう。select 文にはカラムのリストが必要です。SQL 補完プラグインを使つてカラムのリストを組み立てる方法は 2 通りあります。 一度に 1 カラムを插入する方法:
テーブルの全カラムを插入する方法:
<Enter>
を押してテーブルを選擇します。
select 文を書くための特別な機能があります。次の文を書く場合を考へてください:
select * from customer c, contact cn, department as dp, employee e, site_options so where c.
插入モードで "customer" テーブルのエイリアスである最後の "c." を入力した後、<C-C>c または <C-X><C-O> を押してみてください。すると customer テーブルのカラムのリストがポップアップ表示します。これは、select 文の開始位置を見て FROM 句で指定されたテーブルのリストを探してゐます。この場合は文字列 "customer c" ("c" は customer テーブルのエイリアス) が發見されます。省略可能なキーワード "AS" にも對應してゐます。例: "customer AS c"
テーブルリストと同樣に、<C-C>p でデータベースに登錄されてゐるストアドプロシージャのリストを表示できます。
テーブルリストと同樣に、<C-C>v でデータベースに登錄されてゐるビューのリストを表示できます。
|vimrc| でオプションをセットすることによつて SQL 補完プラグインをカスタマイズできます:
n | エイリアスを使はない |
d | 既定のエイリアス (自動的に決定されたもの) を使ふ |
a | エイリアス名を問ひ合はせる |
エイリアスは以下の規則によつて決定されます:
MY_TABLE_NAME --> MTN my_table_name --> mtn My_table_NAME --> MtN
MyTableName --> MTN
mytablename --> m MYTABLENAME --> M
既定の SQL 關聯のマップはこのドキュメントの他の節で詳しく說明しました。ここでは簡潔な說明つきのマップのリストを示します。
以下は Vim の構文强調ルールを使つて補完リストを作成するマップです。
SQL 構文アイテムを全て表示します。
’sqlKeyword’ と定義された構文アイテムを全て表示します。
’sqlFunction’ と定義された構文アイテムを全て表示します。
’sqlOption’ と定義された構文アイテムを全て表示します。
’sqlType’ と定義された構文アイテムを全て表示します。
’sqlStatement’ と定義された構文アイテムを全て表示します。
以下は dbext.vim プラグインを使用して補完リストを作成するマップです。
テーブルのリストを表示します。
プロシージャのリストを表示します。
ビューのリストを表示します。
指定テーブルのカラムのリストを表示します。
指定テーブルのカラムのリストをコンマ區切りで表示します。
指定テーブルのカラムのリストをコンマ區切りで表示します。補完ウィンドウがアクティブなときだけ使用できます。
<Right>
現在補完リストでカーソルが指してゐるテーブルのカラムリストを表示します。ほとんどの Unix システムでは <Right>
を認識できないため、このマップは Windows でのみ定義されます。同じ機能を Unix でも利用するには他のキーを選んで自分の vimrc で同じマップを定義してください。
<Left>
テーブルのリストを表示します。ほとんどの Unix システムでは <Left>
を認識できないため、このマップは Windows でのみ定義されます。同じ機能を Unix でも利用するには他のキーを選んで自分の vimrc で同じマップを定義してください。
キャッシュされた項目を全て削除し、項目のリストを再生成するやう强制します。
好みに應じてマップを作成できます。一般的に、これらのマップは構文强調グループを定義します。
デフォルトで作成されるマップが好みでなかつたり、そのキーがお使ひのプラットフォームでは動作しない場合、次の變數を |vimrc| で定義してください:
let g:omni_sql_no_default_maps = 1
ftplugin/sql.vim を直接編輯することはやめてください。このファイルを變更しても、將來アップデートしたときその變更は上書きされてしまひます。Vim は、ディストリビューションに含まれてゐるファイルを變更することなくカスタマイズを行ふために after といふディレクトリ構造を備へてゐます。マップをカスタマイズするには after/ftplugin/sql.vim を作成します (|after-directory| を參照)。そしてその中で ftplugin/sql.vim に書かれてゐるのと同じマップを、好みのキーストロークに對して定義します。<C-C> が選ばれたのは、それが Windows、*nix のどちらでも動作するからです。Windows では <C-Space> や ALT
キーを使ふこともできます。
SQL を他のファイルタイプのファイル內で使ふ機會はよくあります。例へば Perl, Java, PHP, Javascript はどれもデータベースと對話できます。編輯中の言語の補完機能に加へて SQL 補完も使ひたいといふ狀況はよくあります。
そんな場合は、以下のステップによつて簡單に實現できます (Perl の例です):
Perl ファイルの編輯を始めます。自動的にファイルタイプが "perl" になります。デフォルトで、ファイルタイプ・ファイルの ftplugin/perl.vim が讀み込まれます。|ft-syntax-omni| に書かれてゐるコマンドによつて構文補完プラグインを使つてゐる場合は、オプション |'omnifunc'| が "syntax#Complete" にセットされます。<C-X><C-O> を押すと Perl の構文アイテムを含むオムニポップアップが表示されます。
手動でファイルタイプを ’sql’ にセットすると、やはり對應するファイルタイプ・ファイルの ftplugin/sql.vim が讀み込まれます。このファイルは、SQL 補完用に多數のバッファ固有のマップを定義します (|sql-completion-maps| を參照)。かうしてマップが作成され、SQL 補完プラグインが初期化されます。全ての SQL 構文アイテムが準備的にキャッシュされます。SQL ファイルタイプ・スクリプトは 2 種類の補完プラグインを使はうとしてゐることを檢出します。<C-C> で始まる SQL 用のマップが呼び出されると、その實行中だけ |'omnifunc'| を切り替へます。そのため、<C-X><C-O> は (構文補完プラグインによる) Perl 用の補完のために使用し、<C-C> は SQL 補完機能のために使用できます。
ファイルタイプを Perl に戾すと、"perl" に關聯する全ての構文要素が元通りになります。