ft_sql.txt (30335B)
1 *ft_sql.txt* Nvim 2 3 by David Fishburn 4 5 This is a filetype plugin to work with SQL files. 6 7 The Structured Query Language (SQL) is a standard which specifies statements 8 that allow a user to interact with a relational database. Vim includes 9 features for navigation, indentation and syntax highlighting. 10 11 Type |gO| to see the table of contents. 12 13 ============================================================================== 14 1. Navigation *sql-navigation* 15 16 The SQL ftplugin provides a number of options to assist with file 17 navigation. 18 19 20 ------------------------------------------------------------------------------ 21 1.1 Matchit *sql-matchit* 22 23 The matchit plugin (https://www.vim.org/scripts/script.php?script_id=39) 24 provides many additional features and can be customized for different 25 languages. The matchit plugin is configured by defining a local 26 buffer variable, b:match_words. Pressing the % key while on various 27 keywords will move the cursor to its match. For example, if the cursor 28 is on an "if", pressing % will cycle between the "else", "elseif" and 29 "end if" keywords. 30 31 The following keywords are supported: > 32 if 33 elseif | elsif 34 else [if] 35 end if 36 37 [while condition] loop 38 leave 39 break 40 continue 41 exit 42 end loop 43 44 for 45 leave 46 break 47 continue 48 exit 49 end loop 50 51 do 52 statements 53 doend 54 55 case 56 when 57 when 58 default 59 end case 60 61 merge 62 when not matched 63 when matched 64 65 create[ or replace] procedure|function|event 66 returns 67 68 69 ------------------------------------------------------------------------------ 70 1.2 Text Object Motions *sql-object-motions* 71 72 Vim has a number of predefined keys for working with text |object-motions|. 73 This filetype plugin attempts to translate these keys to maps which make sense 74 for the SQL language. 75 76 The following |Normal| mode and |Visual| mode maps exist (when you edit a SQL 77 file): > 78 ]] move forward to the next 'begin' 79 [[ move backwards to the previous 'begin' 80 ][ move forward to the next 'end' 81 [] move backwards to the previous 'end' 82 83 84 ------------------------------------------------------------------------------ 85 1.3 Predefined Object Motions *sql-predefined-objects* 86 87 Most relational databases support various standard features, tables, indices, 88 triggers and stored procedures. Each vendor also has a variety of proprietary 89 objects. The next set of maps have been created to help move between these 90 objects. Depends on which database vendor you are using, the list of objects 91 must be configurable. The filetype plugin attempts to define many of the 92 standard objects, plus many additional ones. In order to make this as 93 flexible as possible, you can override the list of objects from within your 94 |vimrc| with the following: > 95 let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' .. 96 \ ',schema,service,publication,database,datatype,domain' .. 97 \ ',index,subscription,synchronization,view,variable' 98 99 The following |Normal| mode and |Visual| mode maps have been created which use 100 the above list: > 101 ]} move forward to the next 'create <object name>' 102 [{ move backward to the previous 'create <object name>' 103 104 Repeatedly pressing ]} will cycle through each of these create statements: > 105 create table t1 ( 106 ... 107 ); 108 109 create procedure p1 110 begin 111 ... 112 end; 113 114 create index i1 on t1 (c1); 115 116 The default setting for g:ftplugin_sql_objects is: > 117 let g:ftplugin_sql_objects = 'function,procedure,event,' .. 118 \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .. 119 \ 'table,trigger' .. 120 \ ',schema,service,publication,database,datatype,domain' .. 121 \ ',index,subscription,synchronization,view,variable' 122 123 The above will also handle these cases: > 124 create table t1 ( 125 ... 126 ); 127 create existing table t2 ( 128 ... 129 ); 130 create global temporary table t3 ( 131 ... 132 ); 133 134 By default, the ftplugin only searches for CREATE statements. You can also 135 override this via your |init.vim| with the following: > 136 let g:ftplugin_sql_statements = 'create,alter' 137 138 The filetype plugin defines three types of comments: > 139 1. -- 140 2. // 141 3. /* 142 * 143 */ 144 145 The following |Normal| mode and |Visual| mode maps have been created to work 146 with comments: > 147 ]" move forward to the beginning of a comment 148 [" move forward to the end of a comment 149 150 151 152 ------------------------------------------------------------------------------ 153 1.4 Macros *sql-macros* 154 155 Vim's feature to find macro definitions, 'define', is supported using this 156 regular expression: > 157 \c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\> 158 159 This addresses the following code: > 160 CREATE VARIABLE myVar1 INTEGER; 161 162 CREATE PROCEDURE sp_test( 163 IN myVar2 INTEGER, 164 OUT myVar3 CHAR(30), 165 INOUT myVar4 NUMERIC(20,0) 166 ) 167 BEGIN 168 DECLARE myVar5 INTEGER; 169 170 SELECT c1, c2, c3 171 INTO myVar2, myVar3, myVar4 172 FROM T1 173 WHERE c4 = myVar1; 174 END; 175 176 Place your cursor on "myVar1" on this line: > 177 WHERE c4 = myVar1; 178 ^ 179 180 Press any of the following keys: > 181 [d 182 [D 183 [CTRL-D 184 185 186 ============================================================================== 187 2. SQL Dialects *sql-dialects* *sql-types* 188 *sybase* *TSQL* *Transact-SQL* 189 *sqlanywhere* 190 *oracle* *plsql* *sqlj* 191 *sqlserver* 192 *mysql* *postgresql* *psql* 193 *informix* 194 195 All relational databases support SQL. There is a portion of SQL that is 196 portable across vendors (ex. CREATE TABLE, CREATE INDEX), but there is a 197 great deal of vendor specific extensions to SQL. Oracle supports the 198 "CREATE OR REPLACE" syntax, column defaults specified in the CREATE TABLE 199 statement and the procedural language (for stored procedures and triggers). 200 201 The default Vim distribution ships with syntax highlighting based on Oracle's 202 PL/SQL. The default SQL indent script works for Oracle and SQL Anywhere. 203 The default filetype plugin works for all vendors and should remain vendor 204 neutral, but extendable. 205 206 Vim currently has support for a variety of different vendors, currently this 207 is via syntax scripts. Unfortunately, to flip between different syntax rules 208 you must either create: 209 1. New filetypes 210 2. Custom autocmds 211 3. Manual steps / commands 212 213 The majority of people work with only one vendor's database product, it would 214 be nice to specify a default in your |init.vim|. 215 216 217 ------------------------------------------------------------------------------ 218 2.1 SQLSetType *sqlsettype* *SQLSetType* 219 220 For the people that work with many different databases, it is nice to be 221 able to flip between the various vendors rules (indent, syntax) on a per 222 buffer basis, at any time. The ftplugin/sql.vim file defines this function: > 223 SQLSetType 224 225 Executing this function without any parameters will set the indent and syntax 226 scripts back to their defaults, see |sql-type-default|. You can use the <Tab> 227 key to complete the optional parameter. 228 229 After typing the function name and a space, you can use the completion to 230 supply a parameter. The function takes the name of the Vim script you want to 231 source. Using the |cmdline-completion| feature, the SQLSetType function will 232 search the 'runtimepath' for all Vim scripts with a name containing "sql". 233 This takes the guess work out of the spelling of the names. The following are 234 examples: > 235 :SQLSetType 236 :SQLSetType sqloracle 237 :SQLSetType sqlanywhere 238 :SQLSetType sqlinformix 239 :SQLSetType mysql 240 241 The easiest approach is to the use <Tab> character which will first complete 242 the command name (SQLSetType), after a space and another <Tab>, display a list 243 of available Vim script names: > 244 :SQL<Tab><space><Tab> 245 246 247 ------------------------------------------------------------------------------ 248 2.2 SQLGetType *sqlgettype* *SQLGetType* 249 250 At anytime you can determine which SQL dialect you are using by calling the 251 SQLGetType command. The ftplugin/sql.vim file defines this function: > 252 SQLGetType 253 254 This will echo: > 255 Current SQL dialect in use:sqlanywhere 256 257 258 ------------------------------------------------------------------------------ 259 2.3 SQL Dialect Default *sql-type-default* 260 261 As mentioned earlier, the default syntax rules for Vim is based on Oracle 262 (PL/SQL). You can override this default by placing one of the following in 263 your |init.vim|: > 264 let g:sql_type_default = 'sqlanywhere' 265 let g:sql_type_default = 'sqlinformix' 266 let g:sql_type_default = 'mysql' 267 268 If you added the following to your |init.vim|: > 269 let g:sql_type_default = 'sqlinformix' 270 271 The next time edit a SQL file the following scripts will be automatically 272 loaded by Vim: > 273 ftplugin/sql.vim 274 syntax/sqlinformix.vim 275 indent/sql.vim 276 < 277 Notice indent/sqlinformix.sql was not loaded. There is no indent file 278 for Informix, Vim loads the default files if the specified files does not 279 exist. 280 281 282 ============================================================================== 283 3. Adding new SQL Dialects *sql-adding-dialects* 284 285 If you begin working with a SQL dialect which does not have any customizations 286 available with the default Vim distribution you can check https://www.vim.org 287 to see if any customization currently exist. If not, you can begin by cloning 288 an existing script. Read |filetype-plugins| for more details. 289 290 To help identify these scripts, try to create the files with a "sql" prefix. 291 If you decide you wish to create customizations for the SQLite database, you 292 can create any of the following: > 293 Unix 294 ~/.config/nvim/syntax/sqlite.vim 295 ~/.config/nvim/indent/sqlite.vim 296 297 No changes are necessary to the SQLSetType function. It will automatically 298 pick up the new SQL files and load them when you issue the SQLSetType command. 299 300 301 ============================================================================== 302 4. OMNI SQL Completion *sql-completion* 303 *omni-sql-completion* 304 305 Vim 7 includes a code completion interface and functions which allows plugin 306 developers to build in code completion for any language. Vim 7 includes 307 code completion for the SQL language. 308 309 There are two modes to the SQL completion plugin, static and dynamic. The 310 static mode populates the popups with the data generated from current syntax 311 highlight rules. The dynamic mode populates the popups with data retrieved 312 directly from a database. This includes, table lists, column lists, 313 procedures names and more. 314 315 ------------------------------------------------------------------------------ 316 4.1 Static Mode *sql-completion-static* 317 318 The static popups created contain items defined by the active syntax rules 319 while editing a file with a filetype of SQL. The plugin defines (by default) 320 various maps to help the user refine the list of items to be displayed. 321 The defaults static maps are: > 322 imap <buffer> <C-C>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O> 323 imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O> 324 imap <buffer> <C-C>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O> 325 imap <buffer> <C-C>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O> 326 imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O> 327 imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O> 328 329 The use of "<C-C>" can be user chosen by using the following in your |init.vim| 330 as it may not work properly on all platforms: > 331 let g:ftplugin_sql_omni_key = '<C-C>' 332 < 333 The static maps (which are based on the syntax highlight groups) follow this 334 format: > 335 imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O> 336 imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O> 337 338 This command breaks down as: > 339 imap - Create an insert map 340 <buffer> - Only for this buffer 341 <C-C>k - Your choice of key map 342 <C-\><C-O> - Execute one command, return to Insert mode 343 :call sqlcomplete#Map( - Allows the SQL completion plugin to perform some 344 housekeeping functions to allow it to be used in 345 conjunction with other completion plugins. 346 Indicate which item you want the SQL completion 347 plugin to complete. 348 In this case we are asking the plugin to display 349 items from the syntax highlight group 350 'sqlKeyword'. 351 You can view a list of highlight group names to 352 choose from by executing the 353 :syntax list 354 command while editing a SQL file. 355 'sqlKeyword' - Display the items for the sqlKeyword highlight 356 group 357 'sqlKeyword\w*' - A second option available with Vim 7.4 which 358 uses a regular expression to determine which 359 syntax groups to use 360 )<CR> - Execute the :let command 361 <C-X><C-O> - Trigger the standard omni completion key stroke. 362 Passing in 'sqlKeyword' instructs the SQL 363 completion plugin to populate the popup with 364 items from the sqlKeyword highlight group. The 365 plugin will also cache this result until Vim is 366 restarted. The syntax list is retrieved using 367 the syntaxcomplete plugin. 368 369 Using the 'syntax' keyword is a special case. This instructs the 370 syntaxcomplete plugin to retrieve all syntax items. So this will effectively 371 work for any of Vim's SQL syntax files. At the time of writing this includes 372 10 different syntax files for the different dialects of SQL (see section 3 373 above, |sql-dialects|). 374 375 Here are some examples of the entries which are pulled from the syntax files: > 376 All 377 - Contains the contents of all syntax highlight groups 378 Statements 379 - Select, Insert, Update, Delete, Create, Alter, ... 380 Functions 381 - Min, Max, Trim, Round, Date, ... 382 Keywords 383 - Index, Database, Having, Group, With 384 Options 385 - Isolation_level, On_error, Qualify_owners, Fire_triggers, ... 386 Types 387 - Integer, Char, Varchar, Date, DateTime, Timestamp, ... 388 389 390 ------------------------------------------------------------------------------ 391 4.2 Dynamic Mode *sql-completion-dynamic* 392 393 Dynamic mode populates the popups with data directly from a database. In 394 order for the dynamic feature to be enabled you must have the dbext.vim 395 plugin installed, (https://www.vim.org/scripts/script.php?script_id=356). 396 397 Dynamic mode is used by several features of the SQL completion plugin. 398 After installing the dbext plugin see the dbext-tutorial for additional 399 configuration and usage. The dbext plugin allows the SQL completion plugin 400 to display a list of tables, procedures, views and columns. > 401 Table List 402 - All tables for all schema owners 403 Procedure List 404 - All stored procedures for all schema owners 405 View List 406 - All stored procedures for all schema owners 407 Column List 408 - For the selected table, the columns that are part of the table 409 410 To enable the popup, while in INSERT mode, use the following key combinations 411 for each group (where <C-C> means hold the CTRL key down while pressing 412 the space bar): 413 Table List - <C-C>t 414 - <C-X><C-O> (the default map assumes tables) 415 Stored Procedure List - <C-C>p 416 View List - <C-C>v 417 Column List - <C-C>c 418 419 Drilling In / Out - When viewing a popup window displaying the list 420 of tables, you can press <Right>, this will 421 replace the table currently highlighted with 422 the column list for that table. 423 - When viewing a popup window displaying the list 424 of columns, you can press <Left>, this will 425 replace the column list with the list of tables. 426 - This allows you to quickly drill down into a 427 table to view its columns and back again. 428 - <Right> and <Left> can also be chosen via 429 your |init.vim| > 430 let g:ftplugin_sql_omni_key_right = '<Right>' 431 let g:ftplugin_sql_omni_key_left = '<Left>' 432 433 The SQL completion plugin caches various lists that are displayed in 434 the popup window. This makes the re-displaying of these lists very 435 fast. If new tables or columns are added to the database it may become 436 necessary to clear the plugins cache. The default map for this is: > 437 imap <buffer> <C-C>R <C-\><C-O>:call sqlcomplete#Map('ResetCache')<CR><C-X><C-O> 438 439 440 ------------------------------------------------------------------------------ 441 4.3 SQL Tutorial *sql-completion-tutorial* 442 443 This tutorial is designed to take you through the common features of the SQL 444 completion plugin so that: > 445 a) You gain familiarity with the plugin 446 b) You are introduced to some of the more common features 447 c) Show how to customize it to your preferences 448 d) Demonstrate "Best of Use" of the plugin (easiest way to configure). 449 450 First, create a new buffer: > 451 :e tutorial.sql 452 453 454 Static features ~ 455 456 To take you through the various lists, simply enter insert mode, hit: 457 <C-C>s (show SQL statements) 458 At this point, you can page down through the list until you find "select". 459 If you are familiar with the item you are looking for, for example you know 460 the statement begins with the letter "s". You can type ahead (without the 461 quotes) "se" then press: 462 <C-Space>t 463 Assuming "select" is highlighted in the popup list press <Enter> to choose 464 the entry. Now type: 465 * fr<C-C>a (show all syntax items) 466 choose "from" from the popup list. 467 468 When writing stored procedures using the "type" list is useful. It contains 469 a list of all the database supported types. This may or may not be true 470 depending on the syntax file you are using. The SQL Anywhere syntax file 471 (sqlanywhere.vim) has support for this: > 472 BEGIN 473 DECLARE customer_id <C-C>T <-- Choose a type from the list 474 475 476 Dynamic features ~ 477 478 To take advantage of the dynamic features you must first install the 479 dbext.vim plugin (https://www.vim.org/scripts/script.php?script_id=356). It 480 also comes with a tutorial. From the SQL completion plugin's perspective, 481 the main feature dbext provides is a connection to a database. dbext 482 connection profiles are the most efficient mechanism to define connection 483 information. Once connections have been setup, the SQL completion plugin 484 uses the features of dbext in the background to populate the popups. 485 486 What follows assumes dbext.vim has been correctly configured, a simple test 487 is to run the command, :DBListTable. If a list of tables is shown, you know 488 dbext.vim is working as expected. If not, please consult the dbext.txt 489 documentation. 490 491 Assuming you have followed the dbext-tutorial you can press <C-C>t to 492 display a list of tables. There is a delay while dbext is creating the table 493 list. After the list is displayed press <C-W>. This will remove both the 494 popup window and the table name already chosen when the list became active. 495 496 4.3.1 Table Completion: *sql-completion-tables* 497 498 Press <C-C>t to display a list of tables from within the database you 499 have connected via the dbext plugin. 500 NOTE: All of the SQL completion popups support typing a prefix before pressing 501 the key map. This will limit the contents of the popup window to just items 502 beginning with those characters. 503 504 4.3.2 Column Completion: *sql-completion-columns* 505 506 The SQL completion plugin can also display a list of columns for particular 507 tables. The column completion is triggered via <C-C>c. 508 509 NOTE: The following example uses <Right> to trigger a column list while 510 the popup window is active. 511 512 Example of using column completion: 513 - Press <C-C>t again to display the list of tables. 514 - When the list is displayed in the completion window, press <Right>, 515 this will replace the list of tables, with a list of columns for the 516 table highlighted (after the same short delay). 517 - If you press <Left>, this will again replace the column list with the 518 list of tables. This allows you to drill into tables and column lists 519 very quickly. 520 - Press <Right> again while the same table is highlighted. You will 521 notice there is no delay since the column list has been cached. If you 522 change the schema of a cached table you can press <C-C>R, which 523 clears the SQL completion cache. 524 - NOTE: <Right> and <Left> have been designed to work while the 525 completion window is active. If the completion popup window is 526 not active, a normal <Right> or <Left> will be executed. 527 528 Let's look at how we can build a SQL statement dynamically. A select statement 529 requires a list of columns. There are two ways to build a column list using 530 the SQL completion plugin. > 531 One column at a time: 532 < 1. After typing SELECT press <C-C>t to display a list of tables. 533 2. Choose a table from the list. 534 3. Press <Right> to display a list of columns. 535 4. Choose the column from the list and press enter. 536 5. Enter a "," and press <C-C>c. Generating a column list 537 generally requires having the cursor on a table name. The plugin 538 uses this name to determine what table to retrieve the column list. 539 In this step, since we are pressing <C-C>c without the cursor 540 on a table name the column list displayed will be for the previous 541 table. Choose a different column and move on. 542 6. Repeat step 5 as often as necessary. > 543 All columns for a table: 544 < 1. After typing SELECT press <C-C>t to display a list of tables. 545 2. Highlight the table you need the column list for. 546 3. Press <Enter> to choose the table from the list. 547 4. Press <C-C>l to request a comma-separated list of all columns 548 for this table. 549 5. Based on the table name chosen in step 3, the plugin attempts to 550 decide on a reasonable table alias. You are then prompted to 551 either accept of change the alias. Press OK. 552 6. The table name is replaced with the column list of the table is 553 replaced with the comma separate list of columns with the alias 554 prepended to each of the columns. 555 7. Step 3 and 4 can be replaced by pressing <C-C>L, which has 556 a <C-Y> embedded in the map to choose the currently highlighted 557 table in the list. 558 559 There is a special provision when writing select statements. Consider the 560 following statement: > 561 select * 562 from customer c, 563 contact cn, 564 department as dp, 565 employee e, 566 site_options so 567 where c. 568 569 In INSERT mode after typing the final "c." which is an alias for the 570 "customer" table, you can press either <C-C>c or <C-X><C-O>. This will 571 popup a list of columns for the customer table. It does this by looking back 572 to the beginning of the select statement and finding a list of the tables 573 specified in the FROM clause. In this case it notes that in the string 574 "customer c", "c" is an alias for the customer table. The optional "AS" 575 keyword is also supported, "customer AS c". 576 577 578 4.3.3 Procedure Completion: *sql-completion-procedures* 579 580 Similar to the table list, <C-C>p, will display a list of stored 581 procedures stored within the database. 582 583 4.3.4 View Completion: *sql-completion-views* 584 585 Similar to the table list, <C-C>v, will display a list of views in the 586 database. 587 588 589 ------------------------------------------------------------------------------ 590 4.4 Completion Customization *sql-completion-customization* 591 592 The SQL completion plugin can be customized through various options set in 593 your |init.vim|: > 594 omni_sql_no_default_maps 595 < - Default: This variable is not defined 596 - If this variable is defined, no maps are created for OMNI 597 completion. See |sql-completion-maps| for further discussion. 598 > 599 omni_sql_use_tbl_alias 600 < - Default: a 601 - This setting is only used when generating a comma-separated 602 column list. By default the map is <C-C>l. When generating 603 a column list, an alias can be prepended to the beginning of each 604 column, for example: e.emp_id, e.emp_name. This option has three 605 settings: > 606 n - do not use an alias 607 d - use the default (calculated) alias 608 a - ask to confirm the alias name 609 < 610 An alias is determined following a few rules: 611 1. If the table name has an '_', then use it as a separator: > 612 MY_TABLE_NAME --> MTN 613 my_table_name --> mtn 614 My_table_NAME --> MtN 615 < 2. If the table name does NOT contain an '_', but DOES use 616 mixed case then the case is used as a separator: > 617 MyTableName --> MTN 618 < 3. If the table name does NOT contain an '_', and does NOT 619 use mixed case then the first letter of the table is used: > 620 mytablename --> m 621 MYTABLENAME --> M 622 623 omni_sql_ignorecase 624 < - Default: Current setting for 'ignorecase' 625 - Valid settings are 0 or 1. 626 - When entering a few letters before initiating completion, the list 627 will be filtered to display only the entries which begin with the 628 list of characters. When this option is set to 0, the list will be 629 filtered using case sensitivity. > 630 631 omni_sql_include_owner 632 < - Default: 0, unless dbext.vim 3.00 has been installed 633 - Valid settings are 0 or 1. 634 - When completing tables, procedure or views and using dbext.vim 3.00 635 or higher the list of objects will also include the owner name. 636 When completing these objects and omni_sql_include_owner is enabled 637 the owner name will be replaced. > 638 639 omni_sql_precache_syntax_groups 640 < - Default: 641 ['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement'] 642 - sqlcomplete can be used in conjunction with other completion 643 plugins. This is outlined at |sql-completion-filetypes|. When the 644 filetype is changed temporarily to SQL, the sqlcompletion plugin 645 will cache the syntax groups listed in the List specified in this 646 option. 647 648 649 ------------------------------------------------------------------------------ 650 4.5 SQL Maps *sql-completion-maps* 651 652 The default SQL maps have been described in other sections of this document in 653 greater detail. Here is a list of the maps with a brief description of each. 654 655 Static Maps ~ 656 657 These are maps which use populate the completion list using Vim's syntax 658 highlighting rules. > 659 <C-C>a 660 < - Displays all SQL syntax items. > 661 <C-C>k 662 < - Displays all SQL syntax items defined as 'sqlKeyword'. > 663 <C-C>f 664 < - Displays all SQL syntax items defined as 'sqlFunction. > 665 <C-C>o 666 < - Displays all SQL syntax items defined as 'sqlOption'. > 667 <C-C>T 668 < - Displays all SQL syntax items defined as 'sqlType'. > 669 <C-C>s 670 < - Displays all SQL syntax items defined as 'sqlStatement'. > 671 672 Dynamic Maps ~ 673 674 These are maps which use populate the completion list using the dbext.vim 675 plugin. > 676 <C-C>t 677 < - Displays a list of tables. > 678 <C-C>p 679 < - Displays a list of procedures. > 680 <C-C>v 681 < - Displays a list of views. > 682 <C-C>c 683 < - Displays a list of columns for a specific table. > 684 <C-C>l 685 < - Displays a comma-separated list of columns for a specific table. > 686 <C-C>L 687 < - Displays a comma-separated list of columns for a specific table. 688 This should only be used when the completion window is active. > 689 <Right> 690 < - Displays a list of columns for the table currently highlighted in 691 the completion window. <Right> is not recognized on most Unix 692 systems, so this maps is only created on the Windows platform. 693 If you would like the same feature on Unix, choose a different key 694 and make the same map in your vimrc. > 695 <Left> 696 < - Displays the list of tables. 697 <Left> is not recognized on most Unix systems, so this maps is 698 only created on the Windows platform. If you would like the same 699 feature on Unix, choose a different key and make the same map in 700 your vimrc. > 701 <C-C>R 702 < - This maps removes all cached items and forces the SQL completion 703 to regenerate the list of items. 704 705 Customizing Maps ~ 706 707 You can create as many additional key maps as you like. Generally, the maps 708 will be specifying different syntax highlight groups. 709 710 If you do not wish the default maps created or the key choices do not work on 711 your platform (often a case on unix) you define the following variable in 712 your |init.vim|: > 713 let g:omni_sql_no_default_maps = 1 714 715 Do not edit ftplugin/sql.vim directly! If you change this file your changes 716 will be over written on future updates. Vim has a special directory structure 717 which allows you to make customizations without changing the files that are 718 included with the Vim distribution. If you wish to customize the maps 719 create an after/ftplugin/sql.vim (see |after-directory|) and place the same 720 maps from the ftplugin/sql.vim in it using your own key strokes. <C-C> was 721 chosen since it will work on both Windows and unix platforms. On the windows 722 platform you can also use <C-Space> or ALT keys. 723 724 725 ------------------------------------------------------------------------------ 726 4.6 Using with other filetypes *sql-completion-filetypes* 727 728 Many times SQL can be used with different filetypes. For example Perl, Java, 729 PHP, Javascript can all interact with a database. Often you need both the SQL 730 completion and the completion capabilities for the current language you are 731 editing. 732 733 This can be enabled easily with the following steps (assuming a Perl file): > 734 1. :e test.pl 735 2. :set filetype=sql 736 3. :set ft=perl 737 738 Step 1 ~ 739 740 Begins by editing a Perl file. Vim automatically sets the filetype to 741 "perl". By default, Vim runs the appropriate filetype file 742 ftplugin/perl.vim. If you are using the syntax completion plugin by following 743 the directions at |ft-syntax-omni| then the 'omnifunc' option has been set to 744 "syntax#Complete". Pressing <C-X><C-O> will display the omni popup containing 745 the syntax items for Perl. 746 747 Step 2 ~ 748 749 Manually setting the filetype to "sql" will also fire the appropriate filetype 750 files ftplugin/sql.vim. This file will define a number of buffer specific 751 maps for SQL completion, see |sql-completion-maps|. Now these maps have 752 been created and the SQL completion plugin has been initialized. All SQL 753 syntax items have been cached in preparation. The SQL filetype script detects 754 we are attempting to use two different completion plugins. Since the SQL maps 755 begin with <C-C>, the maps will toggle the 'omnifunc' when in use. So you 756 can use <C-X><C-O> to continue using the completion for Perl (using the syntax 757 completion plugin) and <C-C> to use the SQL completion features. 758 759 Step 3 ~ 760 761 Setting the filetype back to Perl sets all the usual "perl" related items back 762 as they were. 763 764 765 vim:tw=78:ts=8:noet:ft=help:norl: