Ft_sql

Nvim :help 頁面,由 產生原始碼,使用 tree-sitter-vimdoc 解析器。


作者:David Fishburn
這是一個用於處理 SQL 檔案的檔案類型外掛程式。
結構化查詢語言 (SQL) 是一個標準,它指定了允許使用者與關聯式資料庫互動的語句。Vim 包含用於導覽、縮排和語法突顯的功能。
1. 導覽 sql-navigation 1.1 Matchit sql-matchit 1.2 文字物件移動 sql-object-motions 1.3 預定義物件移動 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. OMNI SQL 完成 sql-completion 4.1 靜態模式 sql-completion-static 4.2 動態模式 sql-completion-dynamic 4.3 教學 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 ftplugin 提供了許多選項來協助檔案導覽。

1.1 Matchit sql-matchit

matchit 外掛程式 (https://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

1.2 文字物件移動 sql-object-motions

Vim 有許多預定義的按鍵用於處理文字 object-motions。這個檔案類型外掛程式嘗試將這些按鍵轉換為對 SQL 語言有意義的對應。
存在以下 Normal 模式和 Visual 模式對應(當您編輯 SQL 檔案時)
]]                    move forward to the next 'begin'
[[                    move backwards to the previous 'begin'
][                    move forward to the next 'end'
[]                    move backwards to the previous 'end'

1.3 預定義物件移動 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'
已建立以下 Normal 模式和 Visual 模式對應,它們使用以上清單
]}                    move forward to the next 'create <object name>'
[{                    move backward to the previous 'create <object name>'
重複按下 ]} 將會循環瀏覽每個這些 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 (
    ...
);
預設情況下,ftplugin 僅搜尋 CREATE 語句。您也可以通過您的 init.vim 使用以下內容覆蓋此設定
let g:ftplugin_sql_statements = 'create,alter'
檔案類型外掛程式定義了三種註解類型
1.  --
2.  //
3.  /*
     *
     */
已建立以下 Normal 模式和 Visual 模式對應以處理註解
]"                    move forward to the beginning of a comment
["                    move forward to the end of a comment

1.4 巨集 sql-macros

Vim 用於尋找巨集定義的功能,'define',使用此正規表示式支援
\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

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),但是 SQL 有大量的供應商特定擴展。Oracle 支援 "CREATE OR REPLACE" 語法、在 CREATE TABLE 語句中指定的欄位預設值以及用於預存程序和觸發器的程序性語言。
預設的 Vim 發行版附帶了基於 Oracle PL/SQL 的語法突顯。預設的 SQL 縮排腳本適用於 Oracle 和 SQL Anywhere。預設的檔案類型外掛程式適用於所有供應商,並且應該保持供應商中立,但可擴展。
Vim 目前支援各種不同的供應商,目前這是通過語法腳本來實現的。不幸的是,要在不同的語法規則之間切換,您必須建立:1. 新的檔案類型 2. 自訂自動命令 3. 手動步驟/命令
大多數人只使用一家供應商的資料庫產品,最好在您的 init.vim 中指定一個預設值。

2.1 SQLSetType sqlsettype SQLSetType

對於使用許多不同資料庫的人來說,最好能夠隨時在每個緩衝區的基礎上切換各種供應商的規則(縮排、語法)。ftplugin/sql.vim 檔案定義了此函數
SQLSetType
執行此函數時不帶任何參數將會將縮排和語法腳本設定回其預設值,請參閱 sql-type-default。您可以使用 <Tab> 鍵來完成可選參數。
輸入函數名稱和一個空格後,您可以使用完成來提供參數。此函數接受您要使用的 Vim 腳本的名稱。使用 cmdline-completion 功能,SQLSetType 函數將在 'runtimepath' 中搜尋所有名稱包含 "sql" 的 Vim 腳本。這消除了名稱拼寫的猜測。以下是一些範例
:SQLSetType
:SQLSetType sqloracle
:SQLSetType sqlanywhere
:SQLSetType sqlinformix
:SQLSetType mysql
最簡單的方法是使用 <Tab> 字元,它將首先完成命令名稱 (SQLSetType),在空格和另一個 <Tab> 後,顯示可用的 Vim 腳本名稱清單
:SQL<Tab><space><Tab>

2.2 SQLGetType sqlgettype SQLGetType

您可以隨時通過呼叫 SQLGetType 命令來確定您正在使用的 SQL 方言。ftplugin/sql.vim 檔案定義了此函數
SQLGetType
這將會回顯
Current SQL dialect in use:sqlanywhere

2.3 SQL 方言預設值 sql-type-default

如前所述,Vim 的預設語法規則基於 Oracle (PL/SQL)。您可以通過在您的 init.vim 中放置以下其中一個來覆蓋此預設值
let g:sql_type_default = 'sqlanywhere'
let g:sql_type_default = 'sqlinformix'
let g:sql_type_default = 'mysql'
如果您在您的 init.vim 中新增了以下內容
let g:sql_type_default = 'sqlinformix'
下次編輯 SQL 檔案時,Vim 將會自動載入以下腳本
ftplugin/sql.vim
syntax/sqlinformix.vim
indent/sql.vim
請注意,未載入 indent/sqlinformix.sql。Informix 沒有縮排檔案,如果指定的檔案不存在,Vim 會載入預設檔案。

3. 新增 SQL 方言 sql-adding-dialects

如果您開始使用預設 Vim 發行版中沒有任何自訂項可用的 SQL 方言,您可以檢查 https://www.vim.org 以查看目前是否存在任何自訂項。如果沒有,您可以從複製現有的腳本開始。請閱讀 filetype-plugins 以了解更多詳細資訊。
為了幫助識別這些腳本,請嘗試建立以 "sql" 為字首的檔案。如果您決定要為 SQLite 資料庫建立自訂項,您可以建立以下任何檔案
Unix
    ~/.config/nvim/syntax/sqlite.vim
    ~/.config/nvim/indent/sqlite.vim
SQLSetType 函數不需要任何變更。當您發出 SQLSetType 命令時,它將自動拾取新的 SQL 檔案並載入它們。
Vim 7 包括一個程式碼完成介面和函數,允許外掛程式開發人員為任何語言建置程式碼完成功能。Vim 7 包括 SQL 語言的程式碼完成功能。
SQL 完成外掛程式有兩種模式,靜態和動態。靜態模式使用從目前的語法突顯規則產生的資料來填充彈出視窗。動態模式使用直接從資料庫擷取的資料來填充彈出視窗。這包括表格清單、欄位清單、程序名稱等等。

4.1 靜態模式 sql-completion-static

建立的靜態彈出視窗包含在編輯檔案類型為 SQL 的檔案時,由作用中的語法規則定義的項目。此外掛程式(預設情況下)定義了各種對應,以協助使用者精簡要顯示的項目清單。預設的靜態對應是
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>
可以使用以下方式在您的 init.vim 中選擇使用者使用 "<C-C>",因為它可能無法在所有平台上正常運作
let g:ftplugin_sql_omni_key = '<C-C>'
靜態對應(基於語法突顯群組)遵循以下格式
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                   - Create an insert map
<buffer>                   - Only for this buffer
<C-C>k                   - Your choice of key map
<C-\><C-O>                   - Execute one command, return to Insert mode
:call sqlcomplete#Map( - Allows the SQL completion plugin to perform some
                         housekeeping functions to allow it to be used in
                         conjunction with other completion plugins.
                         Indicate which item you want the SQL completion
                         plugin to complete.
                         In this case we are asking the plugin to display
                         items from the syntax highlight group
                         'sqlKeyword'.
                         You can view a list of highlight group names to
                         choose from by executing the
                             :syntax list
                         command while editing a SQL file.
'sqlKeyword'           - Display the items for the sqlKeyword highlight
                         group
'sqlKeyword\w*'           - A second option available with Vim 7.4 which
                         uses a regular expression to determine which
                         syntax groups to use
)<CR>                   - Execute the :let command
<C-X><C-O>                   - Trigger the standard omni completion key stroke.
                         Passing in 'sqlKeyword' instructs the SQL
                         completion plugin to populate the popup with
                         items from the sqlKeyword highlight group.  The
                         plugin will also cache this result until Vim is
                         restarted.  The syntax list is retrieved using
                         the syntaxcomplete plugin.
使用 'syntax' 關鍵字是一種特殊情況。這指示 syntaxcomplete 外掛程式擷取所有語法項目。因此,這將有效地適用於任何 Vim 的 SQL 語法檔案。在撰寫本文時,這包括 10 個適用於不同 SQL 方言的語法檔案(請參閱上文第 3 節,sql-dialects)。
以下是一些從語法檔案中提取的項目範例
All
    - Contains the contents of all syntax highlight groups
Statements
    - Select, Insert, Update, Delete, Create, Alter, ...
Functions
    - Min, Max, Trim, Round, Date, ...
Keywords
    - Index, Database, Having, Group, With
Options
    - Isolation_level, On_error, Qualify_owners, Fire_triggers, ...
Types
    - Integer, Char, Varchar, Date, DateTime, Timestamp, ...

4.2 動態模式 sql-completion-dynamic

動態模式使用直接來自資料庫的資料來填充彈出視窗。為了啟用動態功能,您必須安裝 dbext.vim 外掛程式,(https://vim.sourceforge.net/script.php?script_id=356)。
動態模式由 SQL 自動完成外掛程式的多個功能使用。安裝 dbext 外掛程式後,請參閱 dbext 教學以取得額外的設定和使用資訊。dbext 外掛程式允許 SQL 自動完成外掛程式顯示表格、程序、檢視和欄位的清單。
Table List
    - All tables for all schema owners
Procedure List
    - All stored procedures for all schema owners
View List
    - All stored procedures for all schema owners
Column List
    - For the selected table, the columns that are part of the table
若要在「插入」模式下啟用彈出視窗,請針對每個群組使用以下按鍵組合(其中 <C-C> 表示在按下空白鍵的同時按住 CTRL 鍵):表格清單 - <C-C>t
<C-X><C-O> (預設映射假設為表格) 預存程序清單 - <C-C>p 檢視清單 - <C-C>v 欄位清單 - <C-C>c
向下鑽研/向上返回 - 在檢視顯示表格清單的彈出視窗時,您可以按下 <Right>,這會將目前反白的表格替換為該表格的欄位清單。
在檢視顯示欄位清單的彈出視窗時,您可以按下 <Left>,這會將欄位清單替換為表格清單。
這讓您可以快速向下鑽研到表格以檢視其欄位,然後再返回。
也可以透過您的 init.vim 選擇 <Right><Left>
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>
------------------------------------------------------------------------------ 4.3 SQL 教學 sql-completion-tutorial
本教學旨在引導您了解 SQL 自動完成外掛程式的常用功能,以便
a) You gain familiarity with the plugin
b) You are introduced to some of the more common features
c) Show how to customize it to your preferences
d) Demonstrate "Best of Use" of the plugin (easiest way to configure).
首先,建立一個新的緩衝區
: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 <-- Choose a type from the list
動態功能
若要利用動態功能,您必須先安裝 dbext.vim 外掛程式 (https://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
按下 <C-C>t 以顯示您已透過 dbext 外掛程式連線之資料庫中的表格清單。注意:所有 SQL 自動完成彈出視窗都支援在按下按鍵映射之前輸入字首。這會將彈出視窗的內容限制為僅以這些字元開頭的項目。
4.3.2 欄位自動完成:sql-completion-columns
SQL 自動完成外掛程式也可以顯示特定表格的欄位清單。欄位自動完成是透過 <C-C>c 觸發的。
注意:以下範例使用 <Right> 在彈出視窗處於作用中時觸發欄位清單。
使用欄位自動完成的範例
再次按下 <C-C>t 以顯示表格清單。
當清單顯示在自動完成視窗中時,按下 <Right>,這會將表格清單替換為反白顯示表格的欄位清單(在經過相同的短暫延遲後)。
如果您按下 <Left>,這會再次將欄位清單替換為表格清單。這讓您可以快速鑽研表格和欄位清單。
在相同的表格反白顯示時再次按下 <Right>。您會注意到沒有延遲,因為欄位清單已快取。如果您變更快取表格的結構描述,您可以按下 <C-C>R,這會清除 SQL 自動完成快取。
注意:<Right><Left> 設計為在自動完成視窗處於作用中時運作。如果自動完成彈出視窗未處於作用中,則會執行一般的 <Right><Left>
讓我們看看如何動態建立 SQL 陳述式。SELECT 陳述式需要欄位清單。有兩種方式可以使用 SQL 自動完成外掛程式建立欄位清單。
One column at a time:
1. 在輸入 SELECT 之後,按下 <C-C>t 以顯示表格清單。2. 從清單中選擇一個表格。3. 按下 <Right> 以顯示欄位清單。4. 從清單中選擇欄位,然後按下 Enter。5. 輸入 "," 並按下 <C-C>c。產生欄位清單通常需要在表格名稱上放置游標。外掛程式會使用此名稱來判斷要擷取哪個表格的欄位清單。在此步驟中,由於我們在游標不在表格名稱上時按下 <C-C>c,因此顯示的欄位清單將是上一個表格的欄位清單。選擇不同的欄位並繼續。6. 根據需要經常重複步驟 5。
All columns for a table:
1. 在輸入 SELECT 之後,按下 <C-C>t 以顯示表格清單。2. 反白顯示您需要欄位清單的表格。3. 按下 <Enter> 以從清單中選擇表格。4. 按下 <C-C>l 以要求此表格的所有欄位的逗號分隔清單。5. 根據步驟 3 中選擇的表格名稱,外掛程式會嘗試決定合理的表格別名。然後,系統會提示您接受或變更別名。按下「確定」。6. 表格名稱會替換為表格的欄位清單,並以逗號分隔的欄位清單替換,且每個欄位都預先加上別名。7. 步驟 3 和 4 可以透過按下 <C-C>L 來取代,該映射中嵌入了 <C-Y> 以選擇清單中目前反白顯示的表格。
撰寫 SELECT 陳述式時有一個特殊規定。請考慮以下陳述式
select *
  from customer c,
       contact cn,
       department as dp,
       employee e,
       site_options so
 where c.
在輸入模式中,在輸入最後的 "c." (這是 "customer" 表格的別名) 之後,您可以按下 <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

可以透過在您的 init.vim 中設定的各種選項來自訂 SQL 自動完成外掛程式
omni_sql_no_default_maps
預設值:未定義此變數
如果定義了此變數,則不會為 OMNI 自動完成建立映射。請參閱 sql-completion-maps 以取得進一步討論。> omni_sql_use_tbl_alias
預設值:a
此設定僅在產生逗號分隔的欄位清單時使用。預設情況下,映射為 <C-C>l。產生欄位清單時,可以在每個欄位的開頭加上別名,例如:e.emp_id、e.emp_name。此選項有三個設定
n - do not use an alias
d - use the default (calculated) alias
a - ask to confirm the alias name
別名是按照以下幾個規則判斷的:1. 如果表格名稱有 "_",則使用它作為分隔符號
MY_TABLE_NAME --> MTN
my_table_name --> mtn
My_table_NAME --> MtN
2. 如果表格名稱不包含 "_",但確實使用混合大小寫,則大小寫會用作分隔符號
MyTableName --> MTN
3. 如果表格名稱不包含 "_",且不使用混合大小寫,則會使用表格的第一個字母
               mytablename --> m
               MYTABLENAME --> M
omni_sql_ignorecase
預設值:ignorecase 的目前設定
有效設定為 0 或 1。
在起始自動完成之前輸入幾個字母時,清單會經過篩選,僅顯示以字元清單開頭的項目。將此選項設定為 0 時,清單會使用區分大小寫的方式進行篩選。
omni_sql_include_owner
預設值:0,除非已安裝 dbext.vim 3.00
有效設定為 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 時,sqlcompletion 外掛程式會快取此選項中指定的清單中所列的語法群組。

4.5 SQL 對應 sql-completion-maps

預設的 SQL 對應已在本文件的其他章節中詳細說明。以下是這些對應的列表,並簡要說明每個對應。
靜態對應
這些對應使用 Vim 的語法高亮規則來填充補全清單。
<C-C>a
顯示所有 SQL 語法項目。
<C-C>k
顯示所有定義為「sqlKeyword」的 SQL 語法項目。
<C-C>f
顯示所有定義為「sqlFunction」的 SQL 語法項目。
<C-C>o
顯示所有定義為「sqlOption」的 SQL 語法項目。
<C-C>T
顯示所有定義為「sqlType」的 SQL 語法項目。
<C-C>s
顯示所有定義為「sqlStatement」的 SQL 語法項目。 動態對應 ~
這些對應使用 dbext.vim 外掛程式來填充補全清單。
<C-C>t
顯示表格清單。
<C-C>p
顯示程序清單。
<C-C>v
顯示檢視清單。
<C-C>c
顯示特定表格的欄位清單。
<C-C>l
顯示特定表格的逗號分隔欄位清單。
<C-C>L
顯示特定表格的逗號分隔欄位清單。這只應在補全視窗處於活動狀態時使用。
<Right>
顯示目前在補全視窗中反白的表格的欄位清單。<Right> 在大多數 Unix 系統上無法識別,因此此對應僅在 Windows 平台上建立。如果您希望在 Unix 上使用相同的功能,請選擇不同的按鍵並在您的 vimrc 中建立相同的對應。
<Left>
顯示表格清單。<Left> 在大多數 Unix 系統上無法識別,因此此對應僅在 Windows 平台上建立。如果您希望在 Unix 上使用相同的功能,請選擇不同的按鍵並在您的 vimrc 中建立相同的對應。
<C-C>R
此對應會移除所有快取的項目,並強制 SQL 補全重新產生項目清單。
自訂對應
您可以建立任意數量的其他按鍵對應。一般而言,這些對應將指定不同的語法高亮群組。
如果您不希望建立預設對應,或者按鍵選擇在您的平台上無法運作 (通常在 unix 上是這樣),您可以在您的 init.vim 中定義以下變數
let g:omni_sql_no_default_maps = 1
不要直接編輯 ftplugin/sql.vim!如果您變更此檔案,您的變更將在未來的更新中被覆寫。Vim 有一個特殊的目錄結構,允許您在不變更 Vim 發行版中包含的檔案的情況下進行自訂。如果您想要自訂對應,請建立一個 after/ftplugin/sql.vim (請參閱 after-directory) 並將 ftplugin/sql.vim 中的相同對應放入其中,並使用您自己的按鍵。選擇 <C-C> 是因為它可以在 Windows 和 unix 平台上運作。在 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
步驟 1
首先編輯 Perl 檔案。Vim 會自動將檔案類型設定為「perl」。預設情況下,Vim 會執行適當的檔案類型檔案 ftplugin/perl.vim。如果您按照 ft-syntax-omni 中的指示使用語法補全外掛程式,則 'omnifunc' 選項已設定為「syntax#Complete」。按下 <C-X><C-O> 會顯示包含 Perl 語法項目的 omni 快顯視窗。
步驟 2
手動將檔案類型設定為「sql」也會觸發適當的檔案類型檔案 ftplugin/sql.vim。此檔案將定義許多 SQL 補全的緩衝區特定對應,請參閱 sql-completion-maps。現在已建立這些對應,並且 SQL 補全外掛程式已初始化。所有 SQL 語法項目都已快取以進行準備。SQL 檔案類型指令碼會偵測到我們正在嘗試使用兩個不同的補全外掛程式。由於 SQL 對應以 <C-C> 開頭,因此這些對應在使用時將切換 'omnifunc'。因此,您可以使用 <C-X><C-O> 繼續使用 Perl 的補全(使用語法補全外掛程式),並使用 <C-C> 使用 SQL 補全功能。
步驟 3
將檔案類型設定回 Perl 會將所有與「perl」相關的常用項目設定回原狀。
主要
命令索引
快速參考