ft_sql.txt For Vim バージョン 8.2. Last change: 2019 Dec 07
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
==============================================================================
1. 移動 sql-navigation
SQL ファイルタイププラグインはファイル内の移動を支援するためのオプションを多数
備えています。
1.1 Matchit sql-matchit
-----------
matchit プラグイン(http://www.vim.org/scripts/script.php?script_id=39)はたくさ
んの機能を備えており、異なる言語に対応するためにカスタマイズすることができます。
matchit プラグインはローカル変数 b:match_words を定義することで設定します。様
々なキーワードの上で % キーを押すと、それに対応する位置へカーソルを移動します。
例えばカーソルが "if" の上にあるとき % を押すと "else", "elseif", "end if" の
間を循環して移動します。
以下のキーワードがサポートされています:
1.2 オブジェクト単位で移動 sql-object-motions
-----------------------
Vim には既定でテキストオブジェクトを操作するキーがたくさん定義されています
object-motions。このファイルタイププラグインはこれらのキーの一部を SQL 用に
再定義します。
SQL ファイルを編集するとき、以下のノーマルモードNormalとビジュアルモード
Visualのマップが定義されます:
1.3 SQL 独自のオブジェクト単位移動 sql-predefined-objects
-----------------------------
ほとんどのリレーショナルデータベースはテーブル、インデックス、トリガー、ストア
ドプロシージャなど様々な標準的な機能を備えています。また、ベンダーごとに様々な
独自オブジェクトがあります。次のマップたちはこれらのオブジェクト間を移動するた
めに作られています。お使いのデータベースによってオブジェクトのリストを調整でき
るようでなればなりません。このファイルタイププラグインは標準オブジェクトのほと
んどと、多くの追加的なオブジェクトを定義しています。これを可能な限りフレキシブ
ルにするために、vimrc でオブジェクトのリストを上書きできるようになっています。
次のようにします:
上記のリストを対象として、以下のノーマルモードNormalとビジュアルモード
Visualのマップが定義されています:
繰り返し ]} を押すとこれらの create 文の間を循環して移動します:
g:ftplugin_sql_objects の既定値は以下の通りです:
上記の設定は以下の場合にも対応しています:
既定では CREATE 文だけを検索します。vimrc に以下を書くと、他の文も対象にする
ことができます:
このファイルタイププラグインは以下の3種類のコメントを定義しています:
コメントを対象として、以下のノーマルモードNormalとビジュアルモードVisualで
のマップが定義されています:
1.4 マクロ sql-macros
----------
'define' に以下の正規表現を設定することにより、マクロ定義を見つけるための
Vim の機能に対応しています:
この正規表現は以下のようなコードに対応しています:
以下の行の "myVar1" の上にカーソルを置いて、:
以下のキーのどれかを押してみてください:
==============================================================================
2. SQL の方言 sql-dialects sql-types
sybase TSQL Transact-SQL
sqlanywhere
oracle plsql sqlj
sqlserver
mysql postgresql psql
informix
すべてのリレーショナルデータベースは SQL に対応しています。SQL の一部分はベン
ダー間で移植可能です(例: CREATE TABLE, CREATE INDEX)が、ベンダー固有の拡張が大
量にあります。Oracle は "CREATE OR REPLACE" 構文、CREATE TABLE 文でのカラム既
定値の指定、プロシージャ言語(ストアドプロシージャとトリガー)を備えています。
標準の Vim ディストリビューションには Oracle の PL/SQL に基づいた構文ハイライ
トが付属しています。SQL インデントスクリプトは Oracle と SQL Anywhere 用に動作
します。ファイルタイププラグインはすべてのベンダー用に動作し、ベンダー中立を保
ちつつも拡張可能であるべきです。
現在様々なベンダーに対応しています。これは構文スクリプトを通して実現しています。
残念なことに、複数の構文ルールを切り替えるには以下のどれかを作成しなければなり
ません:
1. 新しいファイルタイプ
2. 独自の自動コマンド
3. コマンド手動実行
大多数の人は1つのベンダーのデータベース製品しか扱わないため、vimrc で既定値
を設定しておくとよいでしょう。
2.1 SQLSetType sqlsettype SQLSetType
--------------
複数のデータベースを扱っている人々にとっては、バッファごとまたは任意のタイミン
グでベンダーのルール(インデント、構文)を切り替えられるとよいでしょう。
ftplugin/sql.vim では次のコマンドが定義されています:
このコマンドを引数なしで実行すると、インデントと構文スクリプトが既定値に戻りま
す。既定値は sql-type-default を参照してください。Vi 互換モードをオフにして
いると ('compatible')、<Tab> キーで引数を補完できます。
コマンド名とスペースをタイプした後、引数を指定するために補完を利用できます。こ
のコマンドは source したい Vim scriptの名前を受け取ります。
cmdline-completion 機能により、SQLSetType コマンドは 'runtimepath' から名
前に 'sql' を含む Vim script を検索します。これは名前のスペルから推測を取り出
します。以下が例です:
もっとも簡単な方法は、<Tab> を使ってまずコマンド名(SQLSetType)を補完し、スペー
スに続いてもう一度 <Tab> を押すと利用可能な Vim script の名前のリストが表示さ
れます:
2.2 SQLGetType sqlgettype SQLGetType
--------------
現在、どのSQL の方言が使われているかを調べるには、コマンド SQLGetType を使いま
す。ftplugin/sql.vim で次のコマンドが定義されています:
このコマンドを使うと、以下のような文字列がエコー表示されます:
2.3 SQL 方言の既定値 sql-type-default
-----------------------
すでに述べたように、Vim の既定の構文ルールは Oracle (PL/SQL) に基づいています。
これを上書きするには、次のうちどれかを vimrc に書きます:
次を vimrc に書くと:
次回 SQL ファイルを編集するときには以下のスクリプトが自動的に読み込まれます:
indent/sqlinformix.sql は読み込まれていないことに注意してください。Informix 用
のインデントファイルは存在しないため、既定のインデントファイルが読み込まれてい
ます。
==============================================================================
3. SQL 方言を追加する sql-adding-dialects
Vim の標準ディストリビューションにスクリプトが含まれていない SQL 方言を扱うと
きは、対応するスクリプトが投稿されていないか http://www.vim.org をチェックして
みてください。もしなければ既存のスクリプトをコピーしてカスタマイズしましょう。
詳しくは filetype-plugins を参照してください。
スクリプトを識別しやすくするために、ファイル名の先頭に "sql" という接頭辞をつ
けてください。例えば SQLite データベース用のカスタマイズを作りたい場合は、以下
のファイルを作成します:
SQLSetType コマンドには変更を加える必要はありません。SQLSetType コマンドを実行
すると自動的に新しい SQL ファイルが選ばれ、読み込まれます。
==============================================================================
4. SQL オムニ補完 sql-completion
omni-sql-completion
Vim 7 にはプラグイン開発者が任意の言語用のコード補完を作るためのインターフェイ
スと関数が備わっています。Vim 7 には SQL 言語用のコード補完が含まれています。
SQL 補完プラグインには static と dynamic という2つのモードがあります。static
モードは 現在の構文強調ルールから生成されたデータをもとにポップアップを表示し
ます。dynamic モードはデータベースから直接抽出したデータをもとにポップアップを
表示します。このデータにはテーブルのリスト、カラムのリスト、プロシージャ名など
が含まれます。
4.1 static モード sql-completion-static
---------------
static ポップアップはファイルタイプが SQL のファイルを編集しているときに、使用
中の構文ルールで定義された項目を含んで表示されます。プラグインは、表示される項
目のリストを絞り込むための様々なマップを用意しています。
既定の static マップは次の通りです:
"<C-C>" のキーは環境によっては動作しないかもしれません。そこで、以下の行を
.vimrc に書くことで "<C-C>" を他のキーに変更できます:
static マップ(構文強調グループに基づいている)は以下の形式で定義されています:
このコマンドは次のように分解できます:
'syntax' キーワードを使うのは特別な場合です。これは syntaxcomplete プラグイン
にすべての構文アイテムを抽出するよう指示します。そのためこれは Vim のどの SQL
構文ファイルに対しても有効です。これを書いている時点でこれは SQL 方言用の10
個の構文ファイルを含んでいます(上の セクション3 sql-dialects を参照)。
構文ファイルから抽出される項目の例を以下に示します:
4.2 dynamic モード sql-completion-dynamic
----------------
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 により変更で
きます
SQL 補完プラグインはポップアップウィンドウに表示されるリストをキャッシュしてお
きます。これによってリストの再表示がとても高速になります。データベースに新しい
テーブルやカラムが追加されたときはプラグインのキャッシュをクリアする必要が出て
くるかもしれません。キャッシュをクリアするための既定のマップは次の通りです:
4.3 SQL 補完のチュートリアル sql-completion-tutorial
----------------
このチュートリアルは SQL 補完プラグインの主な機能を一通り紹介することを意図し
て次のことが書かれています:
まず、新規バッファを作成しましょう:
static な機能
---------------
各種のリストを表示するには、単に挿入モードで次をタイプします:
<C-C>s (SQL 文を表示する)
そしてリストの中を "select" まで下に移動していきます。探している項目をよく知っ
ている場合、例えばそれが "s" という文字で始まることを知っている場合は、その文
字を続けてタイプできます。"se" とタイプしてから(引用符はタイプしません):
<C-Space>t
を押してみてください。
"select" が選択されたところで <Enter> を押すとその項目を確定します。次に
* fr<C-C>a (すべての構文アイテムを表示する)
とタイプしてみてください。"from" が候補に現れるでしょう。
ストアドプロシージャを書くときには型リストが便利です。型リストはそのデータベー
スがサポートしているすべての型を含んでいます。ただしこれはお使いの構文ファイル
に依存します。SQL Anywhere 構文ファイル(sqlanywhere.vim)は以下のような場合に対
応しています :
dynamic な機能
----------------
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> でカラムリストを
表示しています。
カラム補完を使用している様子の例:
- もう一度 <C-C>t を押すとテーブルのリストが表示されます。
- 補完ウィンドウにリストが表示されているとき <Right> を押すとテーブルのリ
ストが消え、途中まで 入力されたテーブルに含まれるカラムのリスト表示に切
り替わります(すこし時間がかかります)。
- <Left> を押すとカラムリストからテーブルリストに切り替わります。これに
よってテーブルリストとカラムリストをとても素早く切り替えられます。
- 同じテーブルに対してもう一度 <Right> を押すと、今度はカラムリストが
キャッシュされているため時間がかからないことに気づくでしょう。キャッシュ
しているテーブルのスキーマが変更されたときは <C-C>R を押します。すると
SQL 補完のキャッシュがクリアされます。
- NOTE: <Right> と <Left> は補完ウィンドウがアクティブな状態で動作するよ
う設計されています。補完のポップアップウィンドウがアクティブでない場合
はノーマルモードでの <Right> と <Left> の動作になります。
SQL 文を動的に組み立てる方法を見ていきましょう。select 文にはカラムのリストが
必要です。SQL 補完プラグインを使ってカラムのリストを組み立てる方法は 2 通りあ
ります。
2. リストからテーブルを選択します。
3. <Right> を押してカラムリストを表示します。
4. リストからカラムを選択してエンターを押します。
5. "," を入力して <C-C>c を押します。通常、カラムリストを生成するには
カーソルをテーブル名の上に置かねばなりません。プラグインはその名前
を使ってどのテーブルからカラム リストを抽出するか決定します。このス
テップではカーソルをテーブル名の上に置かずに <C-C>c を押したため、
表示されるカラムリストは前に使ったテーブルが対象となります。そして
カラムを選択して続けます。
6. ステップ 5 を必要なだけ繰り返します。
2. カラムリストを表示したいテーブルにカーソルを合わせます。
3. <Enter> を押してテーブルを選択します。
4. <C-C>l を押してそのテーブル内の全カラムのコンマ区切りのリストを表示
させます。
5. ステップ 3 で選んだテーブル名に基づいてプラグインは妥当なテーブルエ
イリアスを決定します。ここでそのエイリアスを受け入れるかどうかプロ
ンプトが表示されます。OK を押してください。
6. するとテーブル名が消え、代わりにそのテーブルのカラムリスト(各カラム
名の前にエイリアスがつき、コンマ区切りになったもの)が挿入されます。
7. <C-C>L を押すとステップ 3 と 4 を同時に実行できます。これは、リス
トの中で現在選ばれているテーブルで決定するためにマップの中に <C-Y>
を埋め込んでいます。
select 文を書くための特別な機能があります。次の文を書く場合を考えてください:
挿入モードで "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 でデータベースに登録されているビューのリストを
表示できます。
4.4 補完のカスタマイズ sql-completion-customization
----------------------------
vimrc でオプションをセットすることによって SQL 補完プラグインをカスタマイズ
できます:
- この変数が定義されている場合はオムニ補完用のマップが作られません。よ
り詳しくは sql-completion-maps を参照。
- この設定はコンマ区切りのカラムリストを生成するときに参照されます。
既定ではカラムリストを生成するマップは <C-C>l です。カラムリストを
生成するときに各カラムの前にエイリアスがつきます。例えば:
e.emp_id, e.emp_name。このオプションには 3 種類の値を設定できます:
エイリアスは以下の規則によって決定されます:
1. テーブル名が '_' を含んでいれば、それを区切り文字に使いま
す:
れば、それを区切り文字に使います:
なければテーブル名の最初の文字を使います:
- 有効な値は 0 または 1。
- 数文字を入力してから補完を開始すると、リストの要素がその文字列で始ま
るものだけにフィルタされます。このオプションが 0 の場合は、そのフィ
ルタが大文字・小文字を区別します。
- 有効な値は 0 または 1。
- テーブル、プロシージャ、ビューのリストを補完するとき、dbext.vim 3.00
以上を使っていればオブジェクトのリストにその所有者名がつきます。
これらのオブジェクトを補完するとき omni_sql_include_owner が有効に
なっていればその所有者名も置き換えられます。
['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement']
- sqlcomplete は他のプラグインと組み合わせて使うことができます。その方
法の概略は sql-completion-filetypes で説明されています。一時的に
ファイルタイプが SQL に変更されたとき、SQL 補完プラグインはこのオプ
ションで指定されたリスト内の構文グループをキャッシュします。
4.5 SQL 関連のマップ sql-completion-maps
------------
既定の SQL 関連のマップはこのドキュメントの他の節で詳しく説明しました。ここで
は簡潔な説明つきのマップのリストを示します。
static モードのマップ
-----------
以下は Vim の構文強調ルールを使って補完リストを作成するマップです。
dynamic モードのマップ
------------
以下は dbext.vim プラグインを使用して補完リストを作成するマップです。
補完ウィンドウがアクティブなときだけ使用できます。
す。ほとんどの Unix システムでは <Right> を認識できないため、このマッ
プは Windows でのみ定義されます。同じ機能を Unix でも利用するには他
のキーを選んで自分の vimrc で同じマップを定義してください。
認識できないため、このマップは Windows でのみ定義されます。同じ機能
を Unix でも利用するには他のキーを選んで自分の vimrc で同じマップを
定義してください。
ます。
マップのカスタマイズ
--------------------
好みに応じてマップを作成できます。一般的に、これらのマップは構文強調グループを
定義します。
デフォルトで作成されるマップが好みでなかったり、そのキーがお使いのプラット
フォームでは動作しない場合、次の変数を vimrc で定義してください:
ftplugin/sql.vimを直接編集しないでください! このファイルを変更しても、将来アッ
プデートしたときその変更は上書きされてしまいます。Vim は、ディストリビューショ
ンに含まれているファイルを変更することなくカスタマイズを行うために after とい
うディレクトリ構造を備えています。マップをカスタマイズするには
after/ftplugin/sql.vim を作成します(after-directoryを参照)。そしてその中で
ftplugin/sql.vim に書かれているのと同じマップを、好みのキーストロークに対して
定義します。<C-C> が選ばれたのは、それが Windows、*nix のどちらでも動作するか
らです。Windows では <C-Space> やALT キーを使うこともできます。
4.6 他のファイルタイプのファイル内で使うには sql-completion-filetypes
------------------------------
SQL を他のファイルタイプのファイル内で使う機会はよくあります。例えば Perl,
Java, PHP, Javascript はどれもデータベースと対話できます。編集中の言語の補完機
能に加えて SQL 補完も使いたいという状況はよくあります。
そんな場合は、以下のステップによって簡単に実現できます(Perlの例です):
ステップ 1
------
Perl ファイルの編集を始めます。自動的にファイルタイプが "perl" になります。デ
フォルトで、ファイルタイプ・ファイルの ftplugin/perl.vim が読み込まれます。
ft-syntax-omni に書かれているコマンドによって構文補完プラグインを使っている
場合は、オプション 'omnifunc' が "syntax#Complete" にセットされます。
<C-X><C-O> を押すと Perl の構文アイテムを含むオムニポップアップが表示されます。
ステップ 2
------
手動でファイルタイプを 'sql' にセットすると、やはり対応するファイルタイプ・
ファイルの ftplugin/sql.vim が読み込まれます。このファイルは、SQL 補完用に多数
のバッファ固有のマップを定義します(sql-completion-maps を参照)。こうしてマッ
プが作成され、SQL 補完プラグインが初期化されます。全ての SQL 構文アイテムが準
備的にキャッシュされます。SQL ファイルタイプ・スクリプトは2種類の補完プラグイ
ンを使おうとしていることを検出します。<C-C> で始まる SQL 用のマップが呼び出さ
れると、その実行中だけ 'omnifunc' を切り替えます。そのため、<C-X><C-O> は (構
文補完プラグインによる) Perl 用の補完のために使用し、<C-C> は SQL 補完機能のた
めに使用できます。
ステップ 3
------
ファイルタイプを Perl に戻すと、"perl" に関連する全ての構文要素が元通りになり
ます。
vim:tw=78:ts=8:noet:ft=help:norl:
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
==============================================================================
1. 移動 sql-navigation
SQL ファイルタイププラグインはファイル内の移動を支援するためのオプションを多数
備えています。
1.1 Matchit sql-matchit
-----------
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
elseif | elsif
else [if]
end if
[while condition] loop
leave
break
continue
exit
end loop
leave
break
continue
exit
end loop
for
leave
break
continue
exit
end loop
leave
break
continue
exit
end loop
do
statements
doend
statements
doend
case
when
when
default
end case
when
when
default
end case
merge
when not matched
when matched
when not matched
when matched
create[ or replace] procedure|function|event
returns
returns
1.2 オブジェクト単位で移動 sql-object-motions
-----------------------
Vim には既定でテキストオブジェクトを操作するキーがたくさん定義されています
object-motions。このファイルタイププラグインはこれらのキーの一部を SQL 用に
再定義します。
SQL ファイルを編集するとき、以下のノーマルモードNormalとビジュアルモード
Visualのマップが定義されます:
]] 次の 'begin' へ移動する
[[ 前の 'begin' へ移動する
][ 次の 'end' へ移動する
[] 前の 'end' へ移動する
[[ 前の 'begin' へ移動する
][ 次の 'end' へ移動する
[] 前の 'end' へ移動する
1.3 SQL 独自のオブジェクト単位移動 sql-predefined-objects
-----------------------------
ほとんどのリレーショナルデータベースはテーブル、インデックス、トリガー、ストア
ドプロシージャなど様々な標準的な機能を備えています。また、ベンダーごとに様々な
独自オブジェクトがあります。次のマップたちはこれらのオブジェクト間を移動するた
めに作られています。お使いのデータベースによってオブジェクトのリストを調整でき
るようでなればなりません。このファイルタイププラグインは標準オブジェクトのほと
んどと、多くの追加的なオブジェクトを定義しています。これを可能な限りフレキシブ
ルにするために、vimrc でオブジェクトのリストを上書きできるようになっています。
次のようにします:
let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' .
\ ',schema,service,publication,database,datatype,domain' .
\ ',index,subscription,synchronization,view,variable'
\ ',schema,service,publication,database,datatype,domain' .
\ ',index,subscription,synchronization,view,variable'
上記のリストを対象として、以下のノーマルモードNormalとビジュアルモード
Visualのマップが定義されています:
]} 次の 'create <オブジェクト名>' へ移動する
[{ 前の 'create <オブジェクト名>' へ移動する
[{ 前の 'create <オブジェクト名>' へ移動する
繰り返し ]} を押すとこれらの create 文の間を循環して移動します:
create table t1 (
...
);
...
);
create procedure p1
begin
...
end;
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'
\ '\\(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 existing table t2 (
...
);
create global temporary table t3 (
...
);
既定では CREATE 文だけを検索します。vimrc に以下を書くと、他の文も対象にする
ことができます:
let g:ftplugin_sql_statements = 'create,alter'
このファイルタイププラグインは以下の3種類のコメントを定義しています:
1. --
2. //
3. /*
*
*/
2. //
3. /*
*
*/
コメントを対象として、以下のノーマルモードNormalとビジュアルモードVisualで
のマップが定義されています:
]" 次のコメントの開始位置へ移動
[" 前のコメントの終了位置へ移動
[" 前のコメントの終了位置へ移動
1.4 マクロ sql-macros
----------
'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;
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;
INTO myVar2, myVar3, myVar4
FROM T1
WHERE c4 = myVar1;
END;
以下の行の "myVar1" の上にカーソルを置いて、:
WHERE c4 = myVar1;
^
^
以下のキーのどれかを押してみてください:
[d
[D
[CTRL-D
[D
[CTRL-D
==============================================================================
2. SQL の方言 sql-dialects sql-types
sybase TSQL Transact-SQL
sqlanywhere
oracle plsql sqlj
sqlserver
mysql postgresql psql
informix
すべてのリレーショナルデータベースは SQL に対応しています。SQL の一部分はベン
ダー間で移植可能です(例: CREATE TABLE, CREATE INDEX)が、ベンダー固有の拡張が大
量にあります。Oracle は "CREATE OR REPLACE" 構文、CREATE TABLE 文でのカラム既
定値の指定、プロシージャ言語(ストアドプロシージャとトリガー)を備えています。
標準の Vim ディストリビューションには Oracle の PL/SQL に基づいた構文ハイライ
トが付属しています。SQL インデントスクリプトは Oracle と SQL Anywhere 用に動作
します。ファイルタイププラグインはすべてのベンダー用に動作し、ベンダー中立を保
ちつつも拡張可能であるべきです。
現在様々なベンダーに対応しています。これは構文スクリプトを通して実現しています。
残念なことに、複数の構文ルールを切り替えるには以下のどれかを作成しなければなり
ません:
1. 新しいファイルタイプ
2. 独自の自動コマンド
3. コマンド手動実行
大多数の人は1つのベンダーのデータベース製品しか扱わないため、vimrc で既定値
を設定しておくとよいでしょう。
2.1 SQLSetType sqlsettype SQLSetType
--------------
複数のデータベースを扱っている人々にとっては、バッファごとまたは任意のタイミン
グでベンダーのルール(インデント、構文)を切り替えられるとよいでしょう。
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
:SQLSetType sqloracle
:SQLSetType sqlanywhere
:SQLSetType sqlinformix
:SQLSetType mysql
もっとも簡単な方法は、<Tab> を使ってまずコマンド名(SQLSetType)を補完し、スペー
スに続いてもう一度 <Tab> を押すと利用可能な Vim script の名前のリストが表示さ
れます:
:SQL<Tab><space><Tab>
2.2 SQLGetType sqlgettype SQLGetType
--------------
現在、どのSQL の方言が使われているかを調べるには、コマンド SQLGetType を使いま
す。ftplugin/sql.vim で次のコマンドが定義されています:
SQLGetType
このコマンドを使うと、以下のような文字列がエコー表示されます:
Current SQL dialect in use:sqlanywhere
2.3 SQL 方言の既定値 sql-type-default
-----------------------
すでに述べたように、Vim の既定の構文ルールは Oracle (PL/SQL) に基づいています。
これを上書きするには、次のうちどれかを vimrc に書きます:
let g:sql_type_default = 'sqlanywhere'
let g:sql_type_default = 'sqlinformix'
let g:sql_type_default = 'mysql'
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
syntax/sqlinformix.vim
indent/sql.vim
indent/sqlinformix.sql は読み込まれていないことに注意してください。Informix 用
のインデントファイルは存在しないため、既定のインデントファイルが読み込まれてい
ます。
==============================================================================
3. SQL 方言を追加する sql-adding-dialects
Vim の標準ディストリビューションにスクリプトが含まれていない SQL 方言を扱うと
きは、対応するスクリプトが投稿されていないか http://www.vim.org をチェックして
みてください。もしなければ既存のスクリプトをコピーしてカスタマイズしましょう。
詳しくは filetype-plugins を参照してください。
スクリプトを識別しやすくするために、ファイル名の先頭に "sql" という接頭辞をつ
けてください。例えば SQLite データベース用のカスタマイズを作りたい場合は、以下
のファイルを作成します:
Unix
~/.vim/syntax/sqlite.vim
~/.vim/indent/sqlite.vim
Windows
$VIM/vimfiles/syntax/sqlite.vim
$VIM/vimfiles/indent/sqlite.vim
~/.vim/syntax/sqlite.vim
~/.vim/indent/sqlite.vim
Windows
$VIM/vimfiles/syntax/sqlite.vim
$VIM/vimfiles/indent/sqlite.vim
SQLSetType コマンドには変更を加える必要はありません。SQLSetType コマンドを実行
すると自動的に新しい SQL ファイルが選ばれ、読み込まれます。
==============================================================================
4. SQL オムニ補完 sql-completion
omni-sql-completion
Vim 7 にはプラグイン開発者が任意の言語用のコード補完を作るためのインターフェイ
スと関数が備わっています。Vim 7 には SQL 言語用のコード補完が含まれています。
SQL 補完プラグインには static と dynamic という2つのモードがあります。static
モードは 現在の構文強調ルールから生成されたデータをもとにポップアップを表示し
ます。dynamic モードはデータベースから直接抽出したデータをもとにポップアップを
表示します。このデータにはテーブルのリスト、カラムのリスト、プロシージャ名など
が含まれます。
4.1 static モード sql-completion-static
---------------
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>
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>
imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O>
このコマンドは次のように分解できます:
imap - 挿入モードでのマップを作成する
<buffer> - このバッファに対してのみ
<C-C>k - マップするキー
<C-\><C-O> - コマンドを1個実行し、挿入モードに戻る
:call sqlcomplete#Map( - 他の補完プラグインと組み合わせて使えるようにする
ために、いくつかのな関数を実行します。
どの項目を補完して欲しいかを SQL 補完プラグインに
指示します。
この場合は構文強調グループ 'sqlKeyword' の項目を
表示するよう指定しています。
選択可能な構文強調グループ名のリストは、SQL ファ
イルを編集中に次のコマンドで表示できます。
:syntax list
'sqlKeyword' - 構文強調グループ sqlKeyword の項目を表示します。
'sqlKeyword\w*' - Vim 7.4 からは、正規表現を使って構文強調グループ
を選択できます。
)<CR> - :let コマンドを実行します。
<C-X><C-O> - 標準のオムニ補完のキーストロークを実行します。
sqlcomplete#Map 関数の引数に 'sqlKeyword' を渡して
あるので、SQL 補完プラグインは構文強調グループ
sqlKeyword の項目をポップアップするようになってい
ます。プラグインは Vim が再起動するまでこの結果を
キャッシュします。構文のリストはsyntaxcomplete プ
ラグインを使って抽出されます。
<buffer> - このバッファに対してのみ
<C-C>k - マップするキー
<C-\><C-O> - コマンドを1個実行し、挿入モードに戻る
:call sqlcomplete#Map( - 他の補完プラグインと組み合わせて使えるようにする
ために、いくつかのな関数を実行します。
どの項目を補完して欲しいかを SQL 補完プラグインに
指示します。
この場合は構文強調グループ 'sqlKeyword' の項目を
表示するよう指定しています。
選択可能な構文強調グループ名のリストは、SQL ファ
イルを編集中に次のコマンドで表示できます。
:syntax list
'sqlKeyword' - 構文強調グループ sqlKeyword の項目を表示します。
'sqlKeyword\w*' - Vim 7.4 からは、正規表現を使って構文強調グループ
を選択できます。
)<CR> - :let コマンドを実行します。
<C-X><C-O> - 標準のオムニ補完のキーストロークを実行します。
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, ...
- 全構文強調グループの中身
文
- 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, ...
4.2 dynamic モード sql-completion-dynamic
----------------
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>'
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>
4.3 SQL 補完のチュートリアル sql-completion-tutorial
----------------
このチュートリアルは SQL 補完プラグインの主な機能を一通り紹介することを意図し
て次のことが書かれています:
a) プラグインに慣れる
b) 主な機能を紹介する
c) カスタマイズする方法を示す
d) 「ベストな使い方」をデモする(一番簡単な設定方法)
b) 主な機能を紹介する
c) カスタマイズする方法を示す
d) 「ベストな使い方」をデモする(一番簡単な設定方法)
まず、新規バッファを作成しましょう:
:e tutorial.sql
static な機能
---------------
各種のリストを表示するには、単に挿入モードで次をタイプします:
<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 <-- リストから型を選ぶ
DECLARE customer_id <C-C>T <-- リストから型を選ぶ
dynamic な機能
----------------
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> を押してください。するとポップアップウィンドウ
と既に選択されたテーブル名の両方が消えます。
4.3.1 テーブル補完 *sql-completion-tables*
dbext により接続したデータベース内のテーブルのリストを表示するには <C-C>t を押
します。
NOTE: SQL 補完ポップアップはすべてキーマップの前のプリフィックスに対応していま
す。プリフィックスを指定すると、ポップアップウィンドウの内容がその文字列で始ま
るものだけに制限されます。
4.3.2 カラム補完 *sql-completion-columns*
SQL 補完プラグインは特定のテーブルのカラムのリストを表示することもできます。
このカラム補完は <C-C>c で起動できます。
NOTE: 以下の例ではポップアップウィンドウの表示中に <Right> でカラムリストを
表示しています。
カラム補完を使用している様子の例:
- もう一度 <C-C>t を押すとテーブルのリストが表示されます。
- 補完ウィンドウにリストが表示されているとき <Right> を押すとテーブルのリ
ストが消え、途中まで 入力されたテーブルに含まれるカラムのリスト表示に切
り替わります(すこし時間がかかります)。
- <Left> を押すとカラムリストからテーブルリストに切り替わります。これに
よってテーブルリストとカラムリストをとても素早く切り替えられます。
- 同じテーブルに対してもう一度 <Right> を押すと、今度はカラムリストが
キャッシュされているため時間がかからないことに気づくでしょう。キャッシュ
しているテーブルのスキーマが変更されたときは <C-C>R を押します。すると
SQL 補完のキャッシュがクリアされます。
- NOTE: <Right> と <Left> は補完ウィンドウがアクティブな状態で動作するよ
う設計されています。補完のポップアップウィンドウがアクティブでない場合
はノーマルモードでの <Right> と <Left> の動作になります。
SQL 文を動的に組み立てる方法を見ていきましょう。select 文にはカラムのリストが
必要です。SQL 補完プラグインを使ってカラムのリストを組み立てる方法は 2 通りあ
ります。
一度に 1 カラムを挿入する方法:
1. SELECT を入力した後に <C-C>t を押してテーブルリストを表示します。2. リストからテーブルを選択します。
3. <Right> を押してカラムリストを表示します。
4. リストからカラムを選択してエンターを押します。
5. "," を入力して <C-C>c を押します。通常、カラムリストを生成するには
カーソルをテーブル名の上に置かねばなりません。プラグインはその名前
を使ってどのテーブルからカラム リストを抽出するか決定します。このス
テップではカーソルをテーブル名の上に置かずに <C-C>c を押したため、
表示されるカラムリストは前に使ったテーブルが対象となります。そして
カラムを選択して続けます。
6. ステップ 5 を必要なだけ繰り返します。
テーブルの全カラムを挿入する方法:
1. SELECT と入力してから <C-C>t を押すとテーブルのリストが表示されます。2. カラムリストを表示したいテーブルにカーソルを合わせます。
3. <Enter> を押してテーブルを選択します。
4. <C-C>l を押してそのテーブル内の全カラムのコンマ区切りのリストを表示
させます。
5. ステップ 3 で選んだテーブル名に基づいてプラグインは妥当なテーブルエ
イリアスを決定します。ここでそのエイリアスを受け入れるかどうかプロ
ンプトが表示されます。OK を押してください。
6. するとテーブル名が消え、代わりにそのテーブルのカラムリスト(各カラム
名の前にエイリアスがつき、コンマ区切りになったもの)が挿入されます。
7. <C-C>L を押すとステップ 3 と 4 を同時に実行できます。これは、リス
トの中で現在選ばれているテーブルで決定するためにマップの中に <C-Y>
を埋め込んでいます。
select 文を書くための特別な機能があります。次の文を書く場合を考えてください:
select *
from customer c,
contact cn,
department as dp,
employee e,
site_options so
where c.
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"
4.3.3 プロシージャ補完: *sql-completion-procedures*
テーブルリストと同様に、<C-C>p でデータベースに登録されているストアドプロシー
ジャのリストを表示できます。
4.3.4 ビュー補完: *sql-completion-views*
テーブルリストと同様に、<C-C>v でデータベースに登録されているビューのリストを
表示できます。
4.4 補完のカスタマイズ sql-completion-customization
----------------------------
vimrc でオプションをセットすることによって SQL 補完プラグインをカスタマイズ
できます:
omni_sql_no_default_maps
- 既定値: この変数は定義されていない- この変数が定義されている場合はオムニ補完用のマップが作られません。よ
り詳しくは sql-completion-maps を参照。
omni_sql_use_tbl_alias
- 既定値: a- この設定はコンマ区切りのカラムリストを生成するときに参照されます。
既定ではカラムリストを生成するマップは <C-C>l です。カラムリストを
生成するときに各カラムの前にエイリアスがつきます。例えば:
e.emp_id, e.emp_name。このオプションには 3 種類の値を設定できます:
n - エイリアスを使わない
d - 既定のエイリアス(自動的に決定されたもの)を使う
a - エイリアス名を問い合わせる
d - 既定のエイリアス(自動的に決定されたもの)を使う
a - エイリアス名を問い合わせる
エイリアスは以下の規則によって決定されます:
1. テーブル名が '_' を含んでいれば、それを区切り文字に使いま
す:
MY_TABLE_NAME --> MTN
my_table_name --> mtn
My_table_NAME --> MtN
2. テーブル名が '_' を含んでいないが大文字・小文字が混在していmy_table_name --> mtn
My_table_NAME --> MtN
れば、それを区切り文字に使います:
MyTableName --> MTN
3. テーブル名が '_' を含んでいなく、大文字・小文字も混在していなければテーブル名の最初の文字を使います:
mytablename --> m
MYTABLENAME --> M
MYTABLENAME --> M
omni_sql_ignorecase
- 既定値: 'ignorecase' の現在値- 有効な値は 0 または 1。
- 数文字を入力してから補完を開始すると、リストの要素がその文字列で始ま
るものだけにフィルタされます。このオプションが 0 の場合は、そのフィ
ルタが大文字・小文字を区別します。
omni_sql_include_owner
- 既定値: dbext.vim 3.00 がインストールされていなければ 0- 有効な値は 0 または 1。
- テーブル、プロシージャ、ビューのリストを補完するとき、dbext.vim 3.00
以上を使っていればオブジェクトのリストにその所有者名がつきます。
これらのオブジェクトを補完するとき omni_sql_include_owner が有効に
なっていればその所有者名も置き換えられます。
omni_sql_precache_syntax_groups
- 既定値:['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement']
- sqlcomplete は他のプラグインと組み合わせて使うことができます。その方
法の概略は sql-completion-filetypes で説明されています。一時的に
ファイルタイプが SQL に変更されたとき、SQL 補完プラグインはこのオプ
ションで指定されたリスト内の構文グループをキャッシュします。
4.5 SQL 関連のマップ sql-completion-maps
------------
既定の SQL 関連のマップはこのドキュメントの他の節で詳しく説明しました。ここで
は簡潔な説明つきのマップのリストを示します。
static モードのマップ
-----------
以下は Vim の構文強調ルールを使って補完リストを作成するマップです。
<C-C>a
- SQL 構文アイテムを全て表示します。 <C-C>k
- 'sqlKeyword' と定義された構文アイテムを全て表示します。 <C-C>f
- 'sqlFunction' と定義された構文アイテムを全て表示します。 <C-C>o
- 'sqlOption' と定義された構文アイテムを全て表示します。 <C-C>T
- 'sqlType' と定義された構文アイテムを全て表示します。 <C-C>s
- 'sqlStatement' と定義された構文アイテムを全て表示します。dynamic モードのマップ
------------
以下は dbext.vim プラグインを使用して補完リストを作成するマップです。
<C-C>t
- テーブルのリストを表示します。 <C-C>p
- プロシージャのリストを表示します。 <C-C>v
- ビューのリストを表示します。 <C-C>c
- 指定テーブルのカラムのリストを表示します。 <C-C>l
- 指定テーブルのカラムのリストをコンマ区切りで表示します。 <C-C>L
- 指定テーブルのカラムのリストをコンマ区切りで表示します。補完ウィンドウがアクティブなときだけ使用できます。
<Right>
- 現在補完リストでカーソルが指しているテーブルのカラムリストを表示します。ほとんどの Unix システムでは <Right> を認識できないため、このマッ
プは Windows でのみ定義されます。同じ機能を Unix でも利用するには他
のキーを選んで自分の vimrc で同じマップを定義してください。
<Left>
- テーブルのリストを表示します。ほとんどの Unix システムでは <Left> を認識できないため、このマップは Windows でのみ定義されます。同じ機能
を Unix でも利用するには他のキーを選んで自分の vimrc で同じマップを
定義してください。
<C-C>R
- キャッシュされた項目を全て削除し、項目のリストを再生成するよう強制します。
マップのカスタマイズ
--------------------
好みに応じてマップを作成できます。一般的に、これらのマップは構文強調グループを
定義します。
デフォルトで作成されるマップが好みでなかったり、そのキーがお使いのプラット
フォームでは動作しない場合、次の変数を 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 キーを使うこともできます。
4.6 他のファイルタイプのファイル内で使うには sql-completion-filetypes
------------------------------
SQL を他のファイルタイプのファイル内で使う機会はよくあります。例えば Perl,
Java, PHP, Javascript はどれもデータベースと対話できます。編集中の言語の補完機
能に加えて SQL 補完も使いたいという状況はよくあります。
そんな場合は、以下のステップによって簡単に実現できます(Perlの例です):
1. :e test.pl
2. :set filetype=sql
3. :set ft=perl
2. :set filetype=sql
3. :set ft=perl
ステップ 1
------
Perl ファイルの編集を始めます。自動的にファイルタイプが "perl" になります。デ
フォルトで、ファイルタイプ・ファイルの ftplugin/perl.vim が読み込まれます。
ft-syntax-omni に書かれているコマンドによって構文補完プラグインを使っている
場合は、オプション 'omnifunc' が "syntax#Complete" にセットされます。
<C-X><C-O> を押すと Perl の構文アイテムを含むオムニポップアップが表示されます。
ステップ 2
------
手動でファイルタイプを 'sql' にセットすると、やはり対応するファイルタイプ・
ファイルの ftplugin/sql.vim が読み込まれます。このファイルは、SQL 補完用に多数
のバッファ固有のマップを定義します(sql-completion-maps を参照)。こうしてマッ
プが作成され、SQL 補完プラグインが初期化されます。全ての SQL 構文アイテムが準
備的にキャッシュされます。SQL ファイルタイプ・スクリプトは2種類の補完プラグイ
ンを使おうとしていることを検出します。<C-C> で始まる SQL 用のマップが呼び出さ
れると、その実行中だけ 'omnifunc' を切り替えます。そのため、<C-X><C-O> は (構
文補完プラグインによる) Perl 用の補完のために使用し、<C-C> は SQL 補完機能のた
めに使用できます。
ステップ 3
------
ファイルタイプを Perl に戻すと、"perl" に関連する全ての構文要素が元通りになり
ます。
vim:tw=78:ts=8:noet:ft=help:norl: