1df177f67SBram Moolenaar" SQL filetype plugin file 2071d4279SBram Moolenaar" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase) 3*0fd9289dSBram Moolenaar" Version: 1.0 4df177f67SBram Moolenaar" Maintainer: David Fishburn <fishburn at ianywhere dot com> 5*0fd9289dSBram Moolenaar" Last Change: Wed Jan 11 2006 10:04:55 AM 6df177f67SBram Moolenaar" Download: http://vim.sourceforge.net/script.php?script_id=454 7071d4279SBram Moolenaar 8*0fd9289dSBram Moolenaar" For more details please use: 9*0fd9289dSBram Moolenaar" :h sql.txt 10*0fd9289dSBram 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 18*0fd9289dSBram Moolenaar 19*0fd9289dSBram Moolenaar" This file also creates a command, SQLSetType, which allows you to change 20*0fd9289dSBram Moolenaar" SQL dialects on the fly. For example, if I open an Oracle SQL file, it 21*0fd9289dSBram Moolenaar" is color highlighted appropriately. If I open an Informix SQL file, it 22*0fd9289dSBram Moolenaar" will still be highlighted according to Oracles settings. By running: 23*0fd9289dSBram Moolenaar" :SQLSetType sqlinformix 24*0fd9289dSBram Moolenaar" 25*0fd9289dSBram Moolenaar" All files called sqlinformix.vim will be loaded from the indent and syntax 26*0fd9289dSBram Moolenaar" directories. This allows you to easily flip SQL dialects on a per file 27*0fd9289dSBram Moolenaar" basis. NOTE: you can also use completion: 28*0fd9289dSBram Moolenaar" :SQLSetType <tab> 29*0fd9289dSBram Moolenaar" 30*0fd9289dSBram Moolenaar" To change the default dialect, add the following to your vimrc: 31*0fd9289dSBram Moolenaar" let g:sql_type_default = 'sqlanywhere' 32*0fd9289dSBram Moolenaar 33*0fd9289dSBram 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 42*0fd9289dSBram Moolenaar" Functions/Commands to allow the user to change SQL syntax dialects 43*0fd9289dSBram Moolenaar" through the use of :SQLSetType <tab> for completion. 44*0fd9289dSBram Moolenaar" This works with both Vim 6 and 7. 45*0fd9289dSBram Moolenaar 46*0fd9289dSBram Moolenaarif !exists("*SQL_SetType") 47*0fd9289dSBram Moolenaar " NOTE: You cannot use function! since this file can be 48*0fd9289dSBram Moolenaar " sourced from within this function. That will result in 49*0fd9289dSBram Moolenaar " an error reported by Vim. 50*0fd9289dSBram Moolenaar function SQL_GetList(ArgLead, CmdLine, CursorPos) 51*0fd9289dSBram Moolenaar 52*0fd9289dSBram Moolenaar if !exists('s:sql_list') 53*0fd9289dSBram Moolenaar " Grab a list of files that contain "sql" in their names 54*0fd9289dSBram Moolenaar let list_indent = globpath(&runtimepath, 'indent/*sql*') 55*0fd9289dSBram Moolenaar let list_syntax = globpath(&runtimepath, 'syntax/*sql*') 56*0fd9289dSBram Moolenaar let list_ftplugin = globpath(&runtimepath, 'ftplugin/*sql*') 57*0fd9289dSBram Moolenaar 58*0fd9289dSBram Moolenaar let sqls = "\n".list_indent."\n".list_syntax."\n".list_ftplugin."\n" 59*0fd9289dSBram Moolenaar 60*0fd9289dSBram Moolenaar " Strip out everything (path info) but the filename 61*0fd9289dSBram Moolenaar " Regex 62*0fd9289dSBram Moolenaar " From between two newline characters 63*0fd9289dSBram Moolenaar " Non-greedily grab all characters 64*0fd9289dSBram Moolenaar " Followed by a valid filename \w\+\.\w\+ (sql.vim) 65*0fd9289dSBram Moolenaar " Followed by a newline, but do not include the newline 66*0fd9289dSBram Moolenaar " 67*0fd9289dSBram Moolenaar " Replace it with just the filename (get rid of PATH) 68*0fd9289dSBram Moolenaar " 69*0fd9289dSBram Moolenaar " Recursively, since there are many filenames that contain 70*0fd9289dSBram Moolenaar " the word SQL in the indent, syntax and ftplugin directory 71*0fd9289dSBram Moolenaar let sqls = substitute( sqls, 72*0fd9289dSBram Moolenaar \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=', 73*0fd9289dSBram Moolenaar \ '\1\n', 74*0fd9289dSBram Moolenaar \ 'g' 75*0fd9289dSBram Moolenaar \ ) 76*0fd9289dSBram Moolenaar 77*0fd9289dSBram Moolenaar " Remove duplicates, since sqlanywhere.vim can exist in the 78*0fd9289dSBram Moolenaar " sytax, indent and ftplugin directory, yet we only want 79*0fd9289dSBram Moolenaar " to display the option once 80*0fd9289dSBram Moolenaar let index = match(sqls, '.\{-}\ze\n') 81*0fd9289dSBram Moolenaar while index > -1 82*0fd9289dSBram Moolenaar " Get the first filename 83*0fd9289dSBram Moolenaar let file = matchstr(sqls, '.\{-}\ze\n', index) 84*0fd9289dSBram Moolenaar " Recursively replace any *other* occurrence of that 85*0fd9289dSBram Moolenaar " filename with nothing (ie remove it) 86*0fd9289dSBram Moolenaar let sqls = substitute(sqls, '\%>'.(index+strlen(file)).'c\<'.file.'\>\n', '', 'g') 87*0fd9289dSBram Moolenaar " Move on to the next filename 88*0fd9289dSBram Moolenaar let index = match(sqls, '.\{-}\ze\n', (index+strlen(file)+1)) 89*0fd9289dSBram Moolenaar endwhile 90*0fd9289dSBram Moolenaar 91*0fd9289dSBram Moolenaar " Sort the list if using version 7 92*0fd9289dSBram Moolenaar if v:version >= 700 93*0fd9289dSBram Moolenaar let mylist = split(sqls, "\n") 94*0fd9289dSBram Moolenaar let mylist = sort(mylist) 95*0fd9289dSBram Moolenaar let sqls = join(mylist, "\n") 96*0fd9289dSBram Moolenaar endif 97*0fd9289dSBram Moolenaar 98*0fd9289dSBram Moolenaar let s:sql_list = sqls 99*0fd9289dSBram Moolenaar endif 100*0fd9289dSBram Moolenaar 101*0fd9289dSBram Moolenaar return s:sql_list 102*0fd9289dSBram Moolenaar 103*0fd9289dSBram Moolenaar endfunction 104*0fd9289dSBram Moolenaar 105*0fd9289dSBram Moolenaar function SQL_SetType(name) 106*0fd9289dSBram Moolenaar 107*0fd9289dSBram Moolenaar " User has decided to override default SQL scripts and 108*0fd9289dSBram Moolenaar " specify a vendor specific version 109*0fd9289dSBram Moolenaar " (ie Oracle, Informix, SQL Anywhere, ...) 110*0fd9289dSBram Moolenaar " So check for an remove any settings that prevent the 111*0fd9289dSBram Moolenaar " scripts from being executed, and then source the 112*0fd9289dSBram Moolenaar " appropriate Vim scripts. 113*0fd9289dSBram Moolenaar if exists("b:did_ftplugin") 114*0fd9289dSBram Moolenaar unlet b:did_ftplugin 115*0fd9289dSBram Moolenaar endif 116*0fd9289dSBram Moolenaar if exists("b:current_syntax") 117*0fd9289dSBram Moolenaar " echomsg 'SQLSetType - clearing syntax' 118*0fd9289dSBram Moolenaar syntax clear 119*0fd9289dSBram Moolenaar endif 120*0fd9289dSBram Moolenaar if exists("b:did_indent") 121*0fd9289dSBram Moolenaar " echomsg 'SQLSetType - clearing indent' 122*0fd9289dSBram Moolenaar unlet b:did_indent 123*0fd9289dSBram Moolenaar " Set these values to their defaults 124*0fd9289dSBram Moolenaar setlocal indentkeys& 125*0fd9289dSBram Moolenaar setlocal indentexpr& 126*0fd9289dSBram Moolenaar endif 127*0fd9289dSBram Moolenaar 128*0fd9289dSBram Moolenaar " Ensure the name is in the correct format 129*0fd9289dSBram Moolenaar let new_sql_type = substitute(a:name, 130*0fd9289dSBram Moolenaar \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '') 131*0fd9289dSBram Moolenaar 132*0fd9289dSBram Moolenaar " Do not specify a buffer local variable if it is 133*0fd9289dSBram Moolenaar " the default value 134*0fd9289dSBram Moolenaar if new_sql_type == 'sql' 135*0fd9289dSBram Moolenaar let new_sql_type = 'sqloracle' 136*0fd9289dSBram Moolenaar endif 137*0fd9289dSBram Moolenaar let b:sql_type_override = new_sql_type 138*0fd9289dSBram Moolenaar 139*0fd9289dSBram Moolenaar " Vim will automatically source the correct files if we 140*0fd9289dSBram Moolenaar " change the filetype. You cannot do this with setfiletype 141*0fd9289dSBram Moolenaar " since that command will only execute if a filetype has 142*0fd9289dSBram Moolenaar " not already been set. In this case we want to override 143*0fd9289dSBram Moolenaar " the existing filetype. 144*0fd9289dSBram Moolenaar let &filetype = 'sql' 145*0fd9289dSBram Moolenaar endfunction 146*0fd9289dSBram Moolenaar command! -nargs=* -complete=custom,SQL_GetList SQLSetType :call SQL_SetType(<q-args>) 147*0fd9289dSBram Moolenaar 148*0fd9289dSBram Moolenaarendif 149*0fd9289dSBram Moolenaar 150*0fd9289dSBram Moolenaarif exists("b:sql_type_override") 151*0fd9289dSBram Moolenaar " echo 'sourcing buffer ftplugin/'.b:sql_type_override.'.vim' 152*0fd9289dSBram Moolenaar if globpath(&runtimepath, 'ftplugin/'.b:sql_type_override.'.vim') != '' 153*0fd9289dSBram Moolenaar exec 'runtime ftplugin/'.b:sql_type_override.'.vim' 154*0fd9289dSBram Moolenaar " else 155*0fd9289dSBram Moolenaar " echomsg 'ftplugin/'.b:sql_type_override.' not exist, using default' 156*0fd9289dSBram Moolenaar endif 157*0fd9289dSBram Moolenaarelseif exists("g:sql_type_default") 158*0fd9289dSBram Moolenaar " echo 'sourcing global ftplugin/'.g:sql_type_default.'.vim' 159*0fd9289dSBram Moolenaar if globpath(&runtimepath, 'ftplugin/'.g:sql_type_default.'.vim') != '' 160*0fd9289dSBram Moolenaar exec 'runtime ftplugin/'.g:sql_type_default.'.vim' 161*0fd9289dSBram Moolenaar " else 162*0fd9289dSBram Moolenaar " echomsg 'ftplugin/'.g:sql_type_default.'.vim not exist, using default' 163*0fd9289dSBram Moolenaar endif 164*0fd9289dSBram Moolenaarendif 165*0fd9289dSBram Moolenaar 166*0fd9289dSBram Moolenaar" If the above runtime command succeeded, do not load the default settings 167*0fd9289dSBram Moolenaarif exists("b:did_ftplugin") 168*0fd9289dSBram Moolenaar finish 169*0fd9289dSBram Moolenaarendif 170*0fd9289dSBram Moolenaar 171*0fd9289dSBram Moolenaarlet b:undo_ftplugin = "setl comments<" 172*0fd9289dSBram Moolenaar 173071d4279SBram Moolenaar" Don't load another plugin for this buffer 174071d4279SBram Moolenaarlet b:did_ftplugin = 1 175*0fd9289dSBram Moolenaarlet b:current_ftplugin = 'sql' 176*0fd9289dSBram Moolenaar 177*0fd9289dSBram Moolenaar" Win32 can filter files in the browse dialog 178*0fd9289dSBram Moolenaarif has("gui_win32") && !exists("b:browsefilter") 179*0fd9289dSBram Moolenaar let b:browsefilter = "SQL Files (*.sql)\t*.sql\n" . 180*0fd9289dSBram Moolenaar \ "All Files (*.*)\t*.*\n" 181*0fd9289dSBram 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 272*0fd9289dSBram 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 277*0fd9289dSBram Moolenaarnmap <buffer> <silent> ]] :call search('\\c^\\s*begin\\>', 'W' )<CR> 278*0fd9289dSBram Moolenaarnmap <buffer> <silent> [[ :call search('\\c^\\s*begin\\>', 'bW' )<CR> 279*0fd9289dSBram Moolenaarnmap <buffer> <silent> ][ :call search('\\c^\\s*end\\W*$', 'W' )<CR> 280*0fd9289dSBram Moolenaarnmap <buffer> <silent> [] :call search('\\c^\\s*end\\W*$', 'bW' )<CR> 281*0fd9289dSBram Moolenaarvmap <buffer> <silent> ]] /\\c^\\s*begin\\><CR> 282*0fd9289dSBram Moolenaarvmap <buffer> <silent> [[ ?\\c^\\s*begin\\><CR> 283*0fd9289dSBram Moolenaarvmap <buffer> <silent> ][ /\\c^\\s*end\\W*$<CR> 284*0fd9289dSBram Moolenaarvmap <buffer> <silent> [] ?\\c^\\s*end\\W*$<CR> 285df177f67SBram Moolenaar 286df177f67SBram Moolenaar 287*0fd9289dSBram Moolenaar" By default only look for CREATE statements, but allow 288*0fd9289dSBram Moolenaar" the user to override 289*0fd9289dSBram Moolenaarif !exists('g:ftplugin_sql_statements') 290*0fd9289dSBram Moolenaar let g:ftplugin_sql_statements = 'create' 291*0fd9289dSBram Moolenaarendif 292*0fd9289dSBram 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. 297*0fd9289dSBram Moolenaar" Note, you cannot use \?, since these patterns can be used to search 298*0fd9289dSBram Moolenaar" backwards, you must use \{,1} 299df177f67SBram Moolenaarif !exists('g:ftplugin_sql_objects') 300df177f67SBram Moolenaar let g:ftplugin_sql_objects = 'function,procedure,event,' . 301*0fd9289dSBram Moolenaar \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' . 302*0fd9289dSBram Moolenaar \ 'table,trigger' . 303df177f67SBram Moolenaar \ ',schema,service,publication,database,datatype,domain' . 304df177f67SBram Moolenaar \ ',index,subscription,synchronization,view,variable' 305df177f67SBram Moolenaarendif 306df177f67SBram Moolenaar 307*0fd9289dSBram Moolenaar" Replace all ,'s with bars, except ones with numbers after them. 308*0fd9289dSBram Moolenaar" This will most likely be a \{,1} string. 309df177f67SBram Moolenaarlet s:ftplugin_sql_objects = 310*0fd9289dSBram Moolenaar \ '\\c^\\s*' . 311*0fd9289dSBram Moolenaar \ '\\(\\(' . 312*0fd9289dSBram Moolenaar \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') . 313*0fd9289dSBram Moolenaar \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' . 314*0fd9289dSBram Moolenaar \ '\\<\\(' . 315*0fd9289dSBram Moolenaar \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') . 316*0fd9289dSBram 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 323*0fd9289dSBram 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 331*0fd9289dSBram Moolenaarlet b:comment_leader = '\\(--\\\|\\/\\/\\\|\\*\\\|\\/\\*\\\|\\*\\/\\)' 332df177f67SBram Moolenaar" Find the start of the next comment 333*0fd9289dSBram Moolenaarlet b:comment_start = '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'. 334*0fd9289dSBram Moolenaar \ '\\(\\s*'.b:comment_leader.'\\)' 335df177f67SBram Moolenaar" Find the end of the previous comment 336*0fd9289dSBram Moolenaarlet b:comment_end = '\\(^\\s*'.b:comment_leader.'.*\\n\\)'. 337*0fd9289dSBram Moolenaar \ '\\(^\\s*'.b:comment_leader.'\\)\\@!' 338df177f67SBram Moolenaar" Skip over the comment 339df177f67SBram Moolenaarlet b:comment_jump_over = "call search('". 340*0fd9289dSBram Moolenaar \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'. 341df177f67SBram Moolenaar \ "', 'W')" 342df177f67SBram Moolenaarlet b:comment_skip_back = "call search('". 343*0fd9289dSBram 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" -- 357*0fd9289dSBram Moolenaar" or 358*0fd9289dSBram Moolenaar" // 359df177f67SBram Moolenaarsetlocal comments=s1:/*,mb:*,ex:*/,:--,:// 360df177f67SBram Moolenaar 361*0fd9289dSBram Moolenaar" Set completion with CTRL-X CTRL-O to autoloaded function. 362*0fd9289dSBram Moolenaarif exists('&omnifunc') 363*0fd9289dSBram Moolenaar " This is used by the sqlcomplete.vim plugin 364*0fd9289dSBram Moolenaar " Source it for it's global functions 365*0fd9289dSBram Moolenaar runtime autoload/syntaxcomplete.vim 366*0fd9289dSBram Moolenaar 367*0fd9289dSBram Moolenaar setlocal omnifunc=sqlcomplete#Complete 368*0fd9289dSBram Moolenaar " Prevent the intellisense plugin from loading 369*0fd9289dSBram Moolenaar let b:sql_vis = 1 370*0fd9289dSBram Moolenaar imap <buffer> <c-space>t <C-O>:let b:sql_compl_type='table'<CR><C-X><C-O> 371*0fd9289dSBram Moolenaar imap <buffer> <c-space>p <C-O>:let b:sql_compl_type='procedure'<CR><C-X><C-O> 372*0fd9289dSBram Moolenaar imap <buffer> <c-space>v <C-O>:let b:sql_compl_type='view'<CR><C-X><C-O> 373*0fd9289dSBram Moolenaar imap <buffer> <c-space>c <C-O>:let b:sql_compl_type='column'<CR><C-X><C-O> 374*0fd9289dSBram Moolenaar imap <buffer> <c-space>f <C-O>:let b:sql_compl_type='function'<CR><C-X><C-O> 375*0fd9289dSBram Moolenaar imap <buffer> <c-space>o <C-O>:let b:sql_compl_type='option'<CR><C-X><C-O> 376*0fd9289dSBram Moolenaar imap <buffer> <c-right> <C-O>:let b:sql_compl_type='column'<CR><C-X><C-O> 377*0fd9289dSBram Moolenaarendif 378*0fd9289dSBram Moolenaar 379df177f67SBram Moolenaarlet &cpo = s:save_cpo 380df177f67SBram Moolenaar 381df177f67SBram Moolenaar" vim:sw=4:ff=unix: 382df177f67SBram Moolenaar 383