Nvim :help
页面,生成自 源 使用 tree-sitter-vimdoc 解析器。
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
]] move forward to the next 'begin' [[ move backwards to the previous 'begin' ][ move forward to the next 'end' [] move backwards to the previous 'end'
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 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
\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
SQLSetType执行此函数而不带任何参数将把缩进和语法脚本设置回它们的默认值,请参见 sql-type-default。您可以使用
<Tab>
键来完成可选参数。:SQLSetType :SQLSetType sqloracle :SQLSetType sqlanywhere :SQLSetType sqlinformix :SQLSetType mysql最简单的方法是使用
<Tab>
字符,它将首先完成命令名称 (SQLSetType),在空格和另一个 <Tab>
之后,显示可用 Vim 脚本名称的列表:SQL<Tab><space><Tab>
SQLGetType这将回显
Current SQL dialect in use:sqlanywhere
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
Unix ~/.config/nvim/syntax/sqlite.vim ~/.config/nvim/indent/sqlite.vimSQLSetType 函数无需进行任何更改。当您发出 SQLSetType 命令时,它将自动拾取新的 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 语法文件。在撰写本文时,这包括针对 SQL 的不同方言的 10 个不同的语法文件(请参见上面的第 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, ...
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要在 INSERT 模式下启用弹出窗口,请使用以下键组合来访问各个组(其中
<C-C>
表示按住 CTRL 键的同时按下空格键):表列表 - <C-C>
t<C-X>
<C-O>
(默认映射假设为表)存储过程列表 - <C-C>
p 视图列表 - <C-C>
v 列列表 - <C-C>
c<Right>
,这将用该表的列列表替换当前突出显示的表。<Left>
,这将用表列表替换列列表。<Right>
和 <Left>
也可以通过您的 init.vim 选择。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
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”。BEGIN DECLARE customer_id <C-C>T <-- Choose a type from the list
<C-C>
t 以显示表列表。dbext 创建表列表时会有延迟。显示列表后,按<C-W>
。这将删除弹出窗口和列表变为活动状态时已选择的表名。<C-C>
t 以从您通过 dbext 插件连接的数据库中显示表列表。注意:所有 SQL 完成弹出窗口都支持在按键盘映射之前键入前缀。这会将弹出窗口的内容限制为仅以这些字符开头的项目。<C-C>
c 触发。<Right>
在弹出窗口处于活动状态时触发列列表。<C-C>
t 以显示表列表。<Right>
,这将用突出显示的表的列列表替换表列表(在相同的短暂延迟之后)。<Left>
,这将再次用表列表替换列列表。这使您可以非常快地向下钻取到表和列列表。<Right>
。您会注意到没有延迟,因为列列表已缓存。如果您更改了缓存表的模式,您可以按<C-C>
R,这将清除 SQL 完成缓存。<Right>
和 <Left>
旨在在完成窗口处于活动状态时工作。如果完成弹出窗口未处于活动状态,则将执行正常的<Right>
或 <Left>
。One column at a time:
<C-C>
t 以显示表列表。 2. 从列表中选择一个表。 3. 按<Right>
以显示列列表。 4. 从列表中选择列,然后按回车键。 5. 输入“,” 并按<C-C>
c。生成列列表通常需要将光标放在表名上。插件使用此名称来确定要检索哪个表的列列表。在此步骤中,因为我们是在没有将光标放在表名上的情况下按<C-C>
c,所以显示的列列表将是前一个表的。选择另一个列,然后继续。 6. 根据需要重复步骤 5。All columns for a table:
<C-C>
t 以显示表列表。 2. 突出显示您需要列列表的表。 3. 按<Enter>
从列表中选择该表。 4. 按<C-C>
l 以请求该表的全部列的逗号分隔列表。 5. 基于步骤 3 中选择的表名,插件尝试确定一个合理的表别名。然后系统会提示您接受或更改别名。按确定。 6. 表名将替换为该表的列列表,将替换为逗号分隔的列列表,每个列前面都有别名。 7. 步骤 3 和 4 可以用按<C-C>
L 替换,该映射中嵌入<C-Y>
以选择列表中当前突出显示的表。select * from customer c, contact cn, department as dp, employee e, site_options so where c.在 INSERT 模式下键入最后一个“c.”(它是“customer”表的别名)之后,您可以按
<C-C>
c 或<C-X>
<C-O>
。这将弹出客户表列列表。它是通过回顾 select 语句的开头并找到在 FROM 子句中指定的表的列表来实现的。在本例中,它注意到在字符串“customer c”中,“c”是客户表的别名。可选的“AS”关键字也受支持,“customer AS c”。<C-C>
p 将显示存储在数据库中的存储过程列表。<C-C>
v 将显示数据库中的视图列表。omni_sql_no_default_maps
<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
MY_TABLE_NAME --> MTN my_table_name --> mtn My_table_NAME --> MtN
MyTableName --> MTN
mytablename --> m MYTABLENAME --> M omni_sql_ignorecase
omni_sql_include_owner
omni_sql_precache_syntax_groups
<C-C>a
<C-C>k
<C-C>f
<C-C>o
<C-C>T
<C-C>s
<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
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 键。1. :e test.pl 2. :set filetype=sql 3. :set ft=perl
<C-X>
<C-O>
将显示包含 Perl 语法项目的 omni 弹出窗口。<C-C>
开头,因此这些映射将在使用时切换 'omnifunc'。因此,你可以使用 <C-X>
<C-O>
继续使用 Perl 的完成(使用语法完成插件)和 <C-C>
来使用 SQL 完成功能。