1df177f67SBram Moolenaar" SQL filetype plugin file 2071d4279SBram Moolenaar" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase) 3*f193fffdSBram Moolenaar" Version: 3.0 4df177f67SBram Moolenaar" Maintainer: David Fishburn <fishburn at ianywhere dot com> 5*f193fffdSBram Moolenaar" Last Change: Wed Apr 26 2006 3:02:32 PM 6df177f67SBram Moolenaar" Download: http://vim.sourceforge.net/script.php?script_id=454 7071d4279SBram Moolenaar 80fd9289dSBram Moolenaar" For more details please use: 90fd9289dSBram Moolenaar" :h sql.txt 100fd9289dSBram Moolenaar" 11071d4279SBram Moolenaar" This file should only contain values that are common to all SQL languages 12071d4279SBram Moolenaar" Oracle, Microsoft SQL Server, Sybase ASA/ASE, MySQL, and so on 13071d4279SBram Moolenaar" If additional features are required create: 14df177f67SBram Moolenaar" vimfiles/after/ftplugin/sql.vim (Windows) 15df177f67SBram Moolenaar" .vim/after/ftplugin/sql.vim (Unix) 16df177f67SBram Moolenaar" to override and add any of your own settings. 17071d4279SBram Moolenaar 180fd9289dSBram Moolenaar 190fd9289dSBram Moolenaar" This file also creates a command, SQLSetType, which allows you to change 200fd9289dSBram Moolenaar" SQL dialects on the fly. For example, if I open an Oracle SQL file, it 210fd9289dSBram Moolenaar" is color highlighted appropriately. If I open an Informix SQL file, it 220fd9289dSBram Moolenaar" will still be highlighted according to Oracles settings. By running: 230fd9289dSBram Moolenaar" :SQLSetType sqlinformix 240fd9289dSBram Moolenaar" 250fd9289dSBram Moolenaar" All files called sqlinformix.vim will be loaded from the indent and syntax 260fd9289dSBram Moolenaar" directories. This allows you to easily flip SQL dialects on a per file 270fd9289dSBram Moolenaar" basis. NOTE: you can also use completion: 280fd9289dSBram Moolenaar" :SQLSetType <tab> 290fd9289dSBram Moolenaar" 300fd9289dSBram Moolenaar" To change the default dialect, add the following to your vimrc: 310fd9289dSBram Moolenaar" let g:sql_type_default = 'sqlanywhere' 320fd9289dSBram Moolenaar 330fd9289dSBram Moolenaar 34071d4279SBram Moolenaar" Only do this when not done yet for this buffer 35071d4279SBram Moolenaarif exists("b:did_ftplugin") 36071d4279SBram Moolenaar finish 37071d4279SBram Moolenaarendif 38071d4279SBram Moolenaar 39df177f67SBram Moolenaarlet s:save_cpo = &cpo 40df177f67SBram Moolenaarset cpo= 41df177f67SBram Moolenaar 420fd9289dSBram Moolenaar" Functions/Commands to allow the user to change SQL syntax dialects 430fd9289dSBram Moolenaar" through the use of :SQLSetType <tab> for completion. 440fd9289dSBram Moolenaar" This works with both Vim 6 and 7. 450fd9289dSBram Moolenaar 460fd9289dSBram Moolenaarif !exists("*SQL_SetType") 470fd9289dSBram Moolenaar " NOTE: You cannot use function! since this file can be 480fd9289dSBram Moolenaar " sourced from within this function. That will result in 490fd9289dSBram Moolenaar " an error reported by Vim. 500fd9289dSBram Moolenaar function SQL_GetList(ArgLead, CmdLine, CursorPos) 510fd9289dSBram Moolenaar 520fd9289dSBram Moolenaar if !exists('s:sql_list') 530fd9289dSBram Moolenaar " Grab a list of files that contain "sql" in their names 540fd9289dSBram Moolenaar let list_indent = globpath(&runtimepath, 'indent/*sql*') 550fd9289dSBram Moolenaar let list_syntax = globpath(&runtimepath, 'syntax/*sql*') 560fd9289dSBram Moolenaar let list_ftplugin = globpath(&runtimepath, 'ftplugin/*sql*') 570fd9289dSBram Moolenaar 580fd9289dSBram Moolenaar let sqls = "\n".list_indent."\n".list_syntax."\n".list_ftplugin."\n" 590fd9289dSBram Moolenaar 600fd9289dSBram Moolenaar " Strip out everything (path info) but the filename 610fd9289dSBram Moolenaar " Regex 620fd9289dSBram Moolenaar " From between two newline characters 630fd9289dSBram Moolenaar " Non-greedily grab all characters 640fd9289dSBram Moolenaar " Followed by a valid filename \w\+\.\w\+ (sql.vim) 650fd9289dSBram Moolenaar " Followed by a newline, but do not include the newline 660fd9289dSBram Moolenaar " 670fd9289dSBram Moolenaar " Replace it with just the filename (get rid of PATH) 680fd9289dSBram Moolenaar " 690fd9289dSBram Moolenaar " Recursively, since there are many filenames that contain 700fd9289dSBram Moolenaar " the word SQL in the indent, syntax and ftplugin directory 710fd9289dSBram Moolenaar let sqls = substitute( sqls, 720fd9289dSBram Moolenaar \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=', 730fd9289dSBram Moolenaar \ '\1\n', 740fd9289dSBram Moolenaar \ 'g' 750fd9289dSBram Moolenaar \ ) 760fd9289dSBram Moolenaar 770fd9289dSBram Moolenaar " Remove duplicates, since sqlanywhere.vim can exist in the 780fd9289dSBram Moolenaar " sytax, indent and ftplugin directory, yet we only want 790fd9289dSBram Moolenaar " to display the option once 800fd9289dSBram Moolenaar let index = match(sqls, '.\{-}\ze\n') 810fd9289dSBram Moolenaar while index > -1 820fd9289dSBram Moolenaar " Get the first filename 830fd9289dSBram Moolenaar let file = matchstr(sqls, '.\{-}\ze\n', index) 840fd9289dSBram Moolenaar " Recursively replace any *other* occurrence of that 850fd9289dSBram Moolenaar " filename with nothing (ie remove it) 860fd9289dSBram Moolenaar let sqls = substitute(sqls, '\%>'.(index+strlen(file)).'c\<'.file.'\>\n', '', 'g') 870fd9289dSBram Moolenaar " Move on to the next filename 880fd9289dSBram Moolenaar let index = match(sqls, '.\{-}\ze\n', (index+strlen(file)+1)) 890fd9289dSBram Moolenaar endwhile 900fd9289dSBram Moolenaar 910fd9289dSBram Moolenaar " Sort the list if using version 7 920fd9289dSBram Moolenaar if v:version >= 700 930fd9289dSBram Moolenaar let mylist = split(sqls, "\n") 940fd9289dSBram Moolenaar let mylist = sort(mylist) 950fd9289dSBram Moolenaar let sqls = join(mylist, "\n") 960fd9289dSBram Moolenaar endif 970fd9289dSBram Moolenaar 980fd9289dSBram Moolenaar let s:sql_list = sqls 990fd9289dSBram Moolenaar endif 1000fd9289dSBram Moolenaar 1010fd9289dSBram Moolenaar return s:sql_list 1020fd9289dSBram Moolenaar 1030fd9289dSBram Moolenaar endfunction 1040fd9289dSBram Moolenaar 1050fd9289dSBram Moolenaar function SQL_SetType(name) 1060fd9289dSBram Moolenaar 1070fd9289dSBram Moolenaar " User has decided to override default SQL scripts and 1080fd9289dSBram Moolenaar " specify a vendor specific version 1090fd9289dSBram Moolenaar " (ie Oracle, Informix, SQL Anywhere, ...) 1100fd9289dSBram Moolenaar " So check for an remove any settings that prevent the 1110fd9289dSBram Moolenaar " scripts from being executed, and then source the 1120fd9289dSBram Moolenaar " appropriate Vim scripts. 1130fd9289dSBram Moolenaar if exists("b:did_ftplugin") 1140fd9289dSBram Moolenaar unlet b:did_ftplugin 1150fd9289dSBram Moolenaar endif 1160fd9289dSBram Moolenaar if exists("b:current_syntax") 1170fd9289dSBram Moolenaar " echomsg 'SQLSetType - clearing syntax' 1180fd9289dSBram Moolenaar syntax clear 1190fd9289dSBram Moolenaar endif 1200fd9289dSBram Moolenaar if exists("b:did_indent") 1210fd9289dSBram Moolenaar " echomsg 'SQLSetType - clearing indent' 1220fd9289dSBram Moolenaar unlet b:did_indent 1230fd9289dSBram Moolenaar " Set these values to their defaults 1240fd9289dSBram Moolenaar setlocal indentkeys& 1250fd9289dSBram Moolenaar setlocal indentexpr& 1260fd9289dSBram Moolenaar endif 1270fd9289dSBram Moolenaar 1280fd9289dSBram Moolenaar " Ensure the name is in the correct format 1290fd9289dSBram Moolenaar let new_sql_type = substitute(a:name, 1300fd9289dSBram Moolenaar \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '') 1310fd9289dSBram Moolenaar 1320fd9289dSBram Moolenaar " Do not specify a buffer local variable if it is 1330fd9289dSBram Moolenaar " the default value 1340fd9289dSBram Moolenaar if new_sql_type == 'sql' 1350fd9289dSBram Moolenaar let new_sql_type = 'sqloracle' 1360fd9289dSBram Moolenaar endif 1370fd9289dSBram Moolenaar let b:sql_type_override = new_sql_type 1380fd9289dSBram Moolenaar 1390fd9289dSBram Moolenaar " Vim will automatically source the correct files if we 1400fd9289dSBram Moolenaar " change the filetype. You cannot do this with setfiletype 1410fd9289dSBram Moolenaar " since that command will only execute if a filetype has 1420fd9289dSBram Moolenaar " not already been set. In this case we want to override 1430fd9289dSBram Moolenaar " the existing filetype. 1440fd9289dSBram Moolenaar let &filetype = 'sql' 1450fd9289dSBram Moolenaar endfunction 1460fd9289dSBram Moolenaar command! -nargs=* -complete=custom,SQL_GetList SQLSetType :call SQL_SetType(<q-args>) 1470fd9289dSBram Moolenaar 1480fd9289dSBram Moolenaarendif 1490fd9289dSBram Moolenaar 1500fd9289dSBram Moolenaarif exists("b:sql_type_override") 1510fd9289dSBram Moolenaar " echo 'sourcing buffer ftplugin/'.b:sql_type_override.'.vim' 1520fd9289dSBram Moolenaar if globpath(&runtimepath, 'ftplugin/'.b:sql_type_override.'.vim') != '' 1530fd9289dSBram Moolenaar exec 'runtime ftplugin/'.b:sql_type_override.'.vim' 1540fd9289dSBram Moolenaar " else 1550fd9289dSBram Moolenaar " echomsg 'ftplugin/'.b:sql_type_override.' not exist, using default' 1560fd9289dSBram Moolenaar endif 1570fd9289dSBram Moolenaarelseif exists("g:sql_type_default") 1580fd9289dSBram Moolenaar " echo 'sourcing global ftplugin/'.g:sql_type_default.'.vim' 1590fd9289dSBram Moolenaar if globpath(&runtimepath, 'ftplugin/'.g:sql_type_default.'.vim') != '' 1600fd9289dSBram Moolenaar exec 'runtime ftplugin/'.g:sql_type_default.'.vim' 1610fd9289dSBram Moolenaar " else 1620fd9289dSBram Moolenaar " echomsg 'ftplugin/'.g:sql_type_default.'.vim not exist, using default' 1630fd9289dSBram Moolenaar endif 1640fd9289dSBram Moolenaarendif 1650fd9289dSBram Moolenaar 1660fd9289dSBram Moolenaar" If the above runtime command succeeded, do not load the default settings 1670fd9289dSBram Moolenaarif exists("b:did_ftplugin") 1680fd9289dSBram Moolenaar finish 1690fd9289dSBram Moolenaarendif 1700fd9289dSBram Moolenaar 1710fd9289dSBram Moolenaarlet b:undo_ftplugin = "setl comments<" 1720fd9289dSBram Moolenaar 173071d4279SBram Moolenaar" Don't load another plugin for this buffer 174071d4279SBram Moolenaarlet b:did_ftplugin = 1 1750fd9289dSBram Moolenaarlet b:current_ftplugin = 'sql' 1760fd9289dSBram Moolenaar 1770fd9289dSBram Moolenaar" Win32 can filter files in the browse dialog 1780fd9289dSBram Moolenaarif has("gui_win32") && !exists("b:browsefilter") 1790fd9289dSBram Moolenaar let b:browsefilter = "SQL Files (*.sql)\t*.sql\n" . 1800fd9289dSBram Moolenaar \ "All Files (*.*)\t*.*\n" 1810fd9289dSBram Moolenaarendif 182071d4279SBram Moolenaar 183df177f67SBram Moolenaar" Some standard expressions for use with the matchit strings 184df177f67SBram Moolenaarlet s:notend = '\%(\<end\s\+\)\@<!' 185df177f67SBram Moolenaarlet s:when_no_matched_or_others = '\%(\<when\>\%(\s\+\%(\%(\<not\>\s\+\)\?<matched\>\)\|\<others\>\)\@!\)' 186df177f67SBram Moolenaarlet s:or_replace = '\%(or\s\+replace\s\+\)\?' 187df177f67SBram Moolenaar 188071d4279SBram Moolenaar" Define patterns for the matchit macro 189071d4279SBram Moolenaarif !exists("b:match_words") 190071d4279SBram Moolenaar " SQL is generally case insensitive 191071d4279SBram Moolenaar let b:match_ignorecase = 1 192df177f67SBram Moolenaar 193df177f67SBram Moolenaar " Handle the following: 194df177f67SBram Moolenaar " if 195df177f67SBram Moolenaar " elseif | elsif 196df177f67SBram Moolenaar " else [if] 197df177f67SBram Moolenaar " end if 198df177f67SBram Moolenaar " 199df177f67SBram Moolenaar " [while condition] loop 200df177f67SBram Moolenaar " leave 201df177f67SBram Moolenaar " break 202df177f67SBram Moolenaar " continue 203df177f67SBram Moolenaar " exit 204df177f67SBram Moolenaar " end loop 205df177f67SBram Moolenaar " 206df177f67SBram Moolenaar " for 207df177f67SBram Moolenaar " leave 208df177f67SBram Moolenaar " break 209df177f67SBram Moolenaar " continue 210df177f67SBram Moolenaar " exit 211df177f67SBram Moolenaar " end loop 212df177f67SBram Moolenaar " 213df177f67SBram Moolenaar " do 214df177f67SBram Moolenaar " statements 215df177f67SBram Moolenaar " doend 216df177f67SBram Moolenaar " 217df177f67SBram Moolenaar " case 218df177f67SBram Moolenaar " when 219df177f67SBram Moolenaar " when 220df177f67SBram Moolenaar " default 221df177f67SBram Moolenaar " end case 222df177f67SBram Moolenaar " 223df177f67SBram Moolenaar " merge 224df177f67SBram Moolenaar " when not matched 225df177f67SBram Moolenaar " when matched 226df177f67SBram Moolenaar " 227df177f67SBram Moolenaar " EXCEPTION 228df177f67SBram Moolenaar " WHEN column_not_found THEN 229df177f67SBram Moolenaar " WHEN OTHERS THEN 230df177f67SBram Moolenaar " 231df177f67SBram Moolenaar " create[ or replace] procedure|function|event 232df177f67SBram Moolenaar 233071d4279SBram Moolenaar let b:match_words = 234df177f67SBram Moolenaar \ '\<begin\>:\<end\>\W*$,'. 235df177f67SBram Moolenaar \ 236df177f67SBram Moolenaar \ s:notend . '\<if\>:'. 237df177f67SBram Moolenaar \ '\<elsif\>\|\<elseif\>\|\<else\>:'. 238df177f67SBram Moolenaar \ '\<end\s\+if\>,'. 239df177f67SBram Moolenaar \ 240df177f67SBram Moolenaar \ '\<do\>\|'. 241df177f67SBram Moolenaar \ '\<while\>\|'. 242df177f67SBram Moolenaar \ '\%(' . s:notend . '\<loop\>\)\|'. 243df177f67SBram Moolenaar \ '\%(' . s:notend . '\<for\>\):'. 244df177f67SBram Moolenaar \ '\<exit\>\|\<leave\>\|\<break\>\|\<continue\>:'. 245df177f67SBram Moolenaar \ '\%(\<end\s\+\%(for\|loop\>\)\)\|\<doend\>,'. 246df177f67SBram Moolenaar \ 247df177f67SBram Moolenaar \ '\%('. s:notend . '\<case\>\):'. 248df177f67SBram Moolenaar \ '\%('.s:when_no_matched_or_others.'\):'. 249df177f67SBram Moolenaar \ '\%(\<when\s\+others\>\|\<end\s\+case\>\),' . 250df177f67SBram Moolenaar \ 251df177f67SBram Moolenaar \ '\<merge\>:' . 252df177f67SBram Moolenaar \ '\<when\s\+not\s\+matched\>:' . 253df177f67SBram Moolenaar \ '\<when\s\+matched\>,' . 254df177f67SBram Moolenaar \ 255df177f67SBram Moolenaar \ '\%(\<create\s\+' . s:or_replace . '\)\?'. 256df177f67SBram Moolenaar \ '\%(function\|procedure\|event\):'. 257df177f67SBram Moolenaar \ '\<returns\?\>' 258df177f67SBram Moolenaar " \ '\<begin\>\|\<returns\?\>:'. 259df177f67SBram Moolenaar " \ '\<end\>\(;\)\?\s*$' 260df177f67SBram Moolenaar " \ '\<exception\>:'.s:when_no_matched_or_others. 261df177f67SBram Moolenaar " \ ':\<when\s\+others\>,'. 262df177f67SBram Moolenaar " 263df177f67SBram Moolenaar " \ '\%(\<exception\>\|\%('. s:notend . '\<case\>\)\):'. 264df177f67SBram Moolenaar " \ '\%(\<default\>\|'.s:when_no_matched_or_others.'\):'. 265df177f67SBram Moolenaar " \ '\%(\%(\<when\s\+others\>\)\|\<end\s\+case\>\),' . 266071d4279SBram Moolenaarendif 267df177f67SBram Moolenaar 268df177f67SBram Moolenaar" Define how to find the macro definition of a variable using the various 269df177f67SBram Moolenaar" [d, [D, [_CTRL_D and so on features 270df177f67SBram Moolenaar" Match these values ignoring case 271df177f67SBram Moolenaar" ie DECLARE varname INTEGER 2720fd9289dSBram Moolenaarlet &l:define = '\c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>' 273df177f67SBram Moolenaar 274df177f67SBram Moolenaar 275df177f67SBram Moolenaar" Mappings to move to the next BEGIN ... END block 276df177f67SBram Moolenaar" \W - no characters or digits 2770fd9289dSBram Moolenaarnmap <buffer> <silent> ]] :call search('\\c^\\s*begin\\>', 'W' )<CR> 2780fd9289dSBram Moolenaarnmap <buffer> <silent> [[ :call search('\\c^\\s*begin\\>', 'bW' )<CR> 2790fd9289dSBram Moolenaarnmap <buffer> <silent> ][ :call search('\\c^\\s*end\\W*$', 'W' )<CR> 2800fd9289dSBram Moolenaarnmap <buffer> <silent> [] :call search('\\c^\\s*end\\W*$', 'bW' )<CR> 2810fd9289dSBram Moolenaarvmap <buffer> <silent> ]] /\\c^\\s*begin\\><CR> 2820fd9289dSBram Moolenaarvmap <buffer> <silent> [[ ?\\c^\\s*begin\\><CR> 2830fd9289dSBram Moolenaarvmap <buffer> <silent> ][ /\\c^\\s*end\\W*$<CR> 2840fd9289dSBram Moolenaarvmap <buffer> <silent> [] ?\\c^\\s*end\\W*$<CR> 285df177f67SBram Moolenaar 286df177f67SBram Moolenaar 2870fd9289dSBram Moolenaar" By default only look for CREATE statements, but allow 2880fd9289dSBram Moolenaar" the user to override 2890fd9289dSBram Moolenaarif !exists('g:ftplugin_sql_statements') 2900fd9289dSBram Moolenaar let g:ftplugin_sql_statements = 'create' 2910fd9289dSBram Moolenaarendif 2920fd9289dSBram Moolenaar 293df177f67SBram Moolenaar" Predefined SQL objects what are used by the below mappings using 294df177f67SBram Moolenaar" the ]} style maps. 295df177f67SBram Moolenaar" This global variable allows the users to override it's value 296df177f67SBram Moolenaar" from within their vimrc. 2970fd9289dSBram Moolenaar" Note, you cannot use \?, since these patterns can be used to search 2980fd9289dSBram Moolenaar" backwards, you must use \{,1} 299df177f67SBram Moolenaarif !exists('g:ftplugin_sql_objects') 300df177f67SBram Moolenaar let g:ftplugin_sql_objects = 'function,procedure,event,' . 3010fd9289dSBram Moolenaar \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' . 3020fd9289dSBram Moolenaar \ 'table,trigger' . 303df177f67SBram Moolenaar \ ',schema,service,publication,database,datatype,domain' . 304df177f67SBram Moolenaar \ ',index,subscription,synchronization,view,variable' 305df177f67SBram Moolenaarendif 306df177f67SBram Moolenaar 3070fd9289dSBram Moolenaar" Replace all ,'s with bars, except ones with numbers after them. 3080fd9289dSBram Moolenaar" This will most likely be a \{,1} string. 309df177f67SBram Moolenaarlet s:ftplugin_sql_objects = 3100fd9289dSBram Moolenaar \ '\\c^\\s*' . 3110fd9289dSBram Moolenaar \ '\\(\\(' . 3120fd9289dSBram Moolenaar \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') . 3130fd9289dSBram Moolenaar \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' . 3140fd9289dSBram Moolenaar \ '\\<\\(' . 3150fd9289dSBram Moolenaar \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') . 3160fd9289dSBram Moolenaar \ '\\)\\>' 317df177f67SBram Moolenaar 318df177f67SBram Moolenaar" Mappings to move to the next CREATE ... block 319df177f67SBram Moolenaarexec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>" 320df177f67SBram Moolenaarexec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>" 321df177f67SBram Moolenaar" Could not figure out how to use a :call search() string in visual mode 322df177f67SBram Moolenaar" without it ending visual mode 3230fd9289dSBram Moolenaar" Unfortunately, this will add a entry to the search history 324df177f67SBram Moolenaarexec 'vmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>' 325df177f67SBram Moolenaarexec 'vmap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>' 326df177f67SBram Moolenaar 327df177f67SBram Moolenaar" Mappings to move to the next COMMENT 328df177f67SBram Moolenaar" 329df177f67SBram Moolenaar" Had to double the \ for the \| separator since this has a special 330df177f67SBram Moolenaar" meaning on maps 3310fd9289dSBram Moolenaarlet b:comment_leader = '\\(--\\\|\\/\\/\\\|\\*\\\|\\/\\*\\\|\\*\\/\\)' 332df177f67SBram Moolenaar" Find the start of the next comment 3330fd9289dSBram Moolenaarlet b:comment_start = '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'. 3340fd9289dSBram Moolenaar \ '\\(\\s*'.b:comment_leader.'\\)' 335df177f67SBram Moolenaar" Find the end of the previous comment 3360fd9289dSBram Moolenaarlet b:comment_end = '\\(^\\s*'.b:comment_leader.'.*\\n\\)'. 3370fd9289dSBram Moolenaar \ '\\(^\\s*'.b:comment_leader.'\\)\\@!' 338df177f67SBram Moolenaar" Skip over the comment 339df177f67SBram Moolenaarlet b:comment_jump_over = "call search('". 3400fd9289dSBram Moolenaar \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'. 341df177f67SBram Moolenaar \ "', 'W')" 342df177f67SBram Moolenaarlet b:comment_skip_back = "call search('". 3430fd9289dSBram Moolenaar \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'. 344df177f67SBram Moolenaar \ "', 'bW')" 345df177f67SBram Moolenaar" Move to the start and end of comments 346df177f67SBram Moolenaarexec 'nnoremap <silent><buffer> ]" /'.b:comment_start.'<CR>' 347df177f67SBram Moolenaarexec 'nnoremap <silent><buffer> [" /'.b:comment_end.'<CR>' 348df177f67SBram Moolenaarexec 'vnoremap <silent><buffer> ]" /'.b:comment_start.'<CR>' 349df177f67SBram Moolenaarexec 'vnoremap <silent><buffer> [" /'.b:comment_end.'<CR>' 350df177f67SBram Moolenaar 351df177f67SBram Moolenaar" Comments can be of the form: 352df177f67SBram Moolenaar" /* 353df177f67SBram Moolenaar" * 354df177f67SBram Moolenaar" */ 355df177f67SBram Moolenaar" or 356df177f67SBram Moolenaar" -- 3570fd9289dSBram Moolenaar" or 3580fd9289dSBram Moolenaar" // 359df177f67SBram Moolenaarsetlocal comments=s1:/*,mb:*,ex:*/,:--,:// 360df177f67SBram Moolenaar 3610fd9289dSBram Moolenaar" Set completion with CTRL-X CTRL-O to autoloaded function. 3620fd9289dSBram Moolenaarif exists('&omnifunc') 363*f193fffdSBram Moolenaar " Since the SQL completion plugin can be used in conjunction 364*f193fffdSBram Moolenaar " with other completion filetypes it must record the previous 365*f193fffdSBram Moolenaar " OMNI function prior to setting up the SQL OMNI function 366*f193fffdSBram Moolenaar let b:sql_compl_savefunc = &omnifunc 367*f193fffdSBram Moolenaar 3680fd9289dSBram Moolenaar " This is used by the sqlcomplete.vim plugin 3690fd9289dSBram Moolenaar " Source it for it's global functions 3700fd9289dSBram Moolenaar runtime autoload/syntaxcomplete.vim 3710fd9289dSBram Moolenaar 3720fd9289dSBram Moolenaar setlocal omnifunc=sqlcomplete#Complete 3730fd9289dSBram Moolenaar " Prevent the intellisense plugin from loading 3740fd9289dSBram Moolenaar let b:sql_vis = 1 375e2f98b95SBram Moolenaar if !exists('g:omni_sql_no_default_maps') 376e2f98b95SBram Moolenaar " Static maps which use populate the completion list 377e2f98b95SBram Moolenaar " using Vim's syntax highlighting rules 378*f193fffdSBram Moolenaar imap <buffer> <c-c>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O> 379*f193fffdSBram Moolenaar imap <buffer> <c-c>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O> 380*f193fffdSBram Moolenaar imap <buffer> <c-c>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O> 381*f193fffdSBram Moolenaar imap <buffer> <c-c>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O> 382*f193fffdSBram Moolenaar imap <buffer> <c-c>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O> 383*f193fffdSBram Moolenaar imap <buffer> <c-c>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O> 384e2f98b95SBram Moolenaar " Dynamic maps which use populate the completion list 385e2f98b95SBram Moolenaar " using the dbext.vim plugin 386*f193fffdSBram Moolenaar imap <buffer> <c-c>t <C-\><C-O>:call sqlcomplete#Map('table')<CR><C-X><C-O> 387*f193fffdSBram Moolenaar imap <buffer> <c-c>p <C-\><C-O>:call sqlcomplete#Map('procedure')<CR><C-X><C-O> 388*f193fffdSBram Moolenaar imap <buffer> <c-c>v <C-\><C-O>:call sqlcomplete#Map('view')<CR><C-X><C-O> 389*f193fffdSBram Moolenaar imap <buffer> <c-c>c <C-\><C-O>:call sqlcomplete#Map('column')<CR><C-X><C-O> 390*f193fffdSBram Moolenaar imap <buffer> <c-c>l <C-\><C-O>:call sqlcomplete#Map('column_csv')<CR><C-X><C-O> 391e2f98b95SBram Moolenaar " The next 3 maps are only to be used while the completion window is 392e2f98b95SBram Moolenaar " active due to the <CR> at the beginning of the map 393*f193fffdSBram Moolenaar imap <buffer> <c-c>L <C-Y><C-\><C-O>:call sqlcomplete#Map('column_csv')<CR><C-X><C-O> 394*f193fffdSBram Moolenaar " <C-Right> is not recognized on most Unix systems, so only create 395*f193fffdSBram Moolenaar " these additional maps on the Windows platform. 396*f193fffdSBram Moolenaar " If you would like to use these maps, choose a different key and make 397*f193fffdSBram Moolenaar " the same map in your vimrc. 398e2f98b95SBram Moolenaar if has('win32') 399*f193fffdSBram Moolenaar imap <buffer> <c-right> <C-R>=sqlcomplete#DrillIntoTable()<CR> 400*f193fffdSBram Moolenaar imap <buffer> <c-left> <C-R>=sqlcomplete#DrillOutOfColumns()<CR> 401e2f98b95SBram Moolenaar endif 402e2f98b95SBram Moolenaar " Remove any cached items useful for schema changes 403*f193fffdSBram Moolenaar imap <buffer> <c-c>R <C-\><C-O>:call sqlcomplete#Map('resetCache')<CR><C-X><C-O> 404*f193fffdSBram Moolenaar endif 405*f193fffdSBram Moolenaar 406*f193fffdSBram Moolenaar if b:sql_compl_savefunc != "" 407*f193fffdSBram Moolenaar " We are changing the filetype to SQL from some other filetype 408*f193fffdSBram Moolenaar " which had OMNI completion defined. We need to activate the 409*f193fffdSBram Moolenaar " SQL completion plugin in order to cache some of the syntax items 410*f193fffdSBram Moolenaar " while the syntax rules for SQL are active. 411*f193fffdSBram Moolenaar call sqlcomplete#PreCacheSyntax() 412e2f98b95SBram Moolenaar endif 4130fd9289dSBram Moolenaarendif 4140fd9289dSBram Moolenaar 415df177f67SBram Moolenaarlet &cpo = s:save_cpo 416df177f67SBram Moolenaar 417e2f98b95SBram Moolenaar" vim:sw=4: 418df177f67SBram Moolenaar 419