diff options
author | Bram Moolenaar <Bram@vim.org> | 2005-02-22 08:39:57 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2005-02-22 08:39:57 +0000 |
commit | df177f679e950a2ab2ad5fe7d45c1daface004d7 (patch) | |
tree | 21c0c50e9144ef873af675daf53b86beb26dd677 /runtime/ftplugin/sql.vim | |
parent | 6bdcfc08cb9c192972336e28a2a842b7abbb2811 (diff) | |
download | vim-df177f679e950a2ab2ad5fe7d45c1daface004d7.zip |
updated for version 7.0051
Diffstat (limited to 'runtime/ftplugin/sql.vim')
-rw-r--r-- | runtime/ftplugin/sql.vim | 195 |
1 files changed, 179 insertions, 16 deletions
diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim index afbdf555c..efccebdf1 100644 --- a/runtime/ftplugin/sql.vim +++ b/runtime/ftplugin/sql.vim @@ -1,35 +1,198 @@ -" Vim filetype plugin file -" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase) -" Version: 0.02 -" Maintainer: David Fishburn <fishburn@ianywhere.com> -" Last Change: Tue May 27 2003 09:33:31 +" SQL filetype plugin file +" Language: SQL (Common for Oracle, Microsoft SQL Server, Sybase) +" Version: 0.08 +" Maintainer: David Fishburn <fishburn at ianywhere dot com> +" Last Change: Mon Feb 21 2005 7:27:36 AM +" Download: http://vim.sourceforge.net/script.php?script_id=454 " This file should only contain values that are common to all SQL languages " Oracle, Microsoft SQL Server, Sybase ASA/ASE, MySQL, and so on " If additional features are required create: -" vimfiles/after/ftplugin/sql.vim -" to override and add any of your own settings +" vimfiles/after/ftplugin/sql.vim (Windows) +" .vim/after/ftplugin/sql.vim (Unix) +" to override and add any of your own settings. " Only do this when not done yet for this buffer if exists("b:did_ftplugin") finish endif +let s:save_cpo = &cpo +set cpo= + " Don't load another plugin for this buffer let b:did_ftplugin = 1 +" Some standard expressions for use with the matchit strings +let s:notend = '\%(\<end\s\+\)\@<!' +let s:when_no_matched_or_others = '\%(\<when\>\%(\s\+\%(\%(\<not\>\s\+\)\?<matched\>\)\|\<others\>\)\@!\)' +let s:or_replace = '\%(or\s\+replace\s\+\)\?' + " Define patterns for the matchit macro if !exists("b:match_words") " SQL is generally case insensitive let b:match_ignorecase = 1 + + " Handle the following: + " 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 + " + " EXCEPTION + " WHEN column_not_found THEN + " WHEN OTHERS THEN + " + " create[ or replace] procedure|function|event + let b:match_words = - \ '\<begin\>:\<end\>\(;\)\?$,'. - \ '\<if\>:\<elsif\>:\<elseif\>:\<else\>:'. - \ '\%(\<end\s\+\)\@<!' . '\<if\>:\<end\s\+if\>,'. - \ '\<loop\>:\<break\>:\<continue\>:'. - \ '\%(\<end\s\+\)\@<!' . '\<loop\>:\<end\s\+loop\>,'. - \ '\<for\>:\<break\>:\<continue\>:'. - \ '\%(\<end\s\+\)\@<!' . '\<for\>:\<end\s\+for\>,'. - \ '\<case\>:\<when\>:\<default\>:'. - \ '\%(\<end\s\+\)\@<!' . '\<case\>:\<end\s\+case\>' + \ '\<begin\>:\<end\>\W*$,'. + \ + \ s:notend . '\<if\>:'. + \ '\<elsif\>\|\<elseif\>\|\<else\>:'. + \ '\<end\s\+if\>,'. + \ + \ '\<do\>\|'. + \ '\<while\>\|'. + \ '\%(' . s:notend . '\<loop\>\)\|'. + \ '\%(' . s:notend . '\<for\>\):'. + \ '\<exit\>\|\<leave\>\|\<break\>\|\<continue\>:'. + \ '\%(\<end\s\+\%(for\|loop\>\)\)\|\<doend\>,'. + \ + \ '\%('. s:notend . '\<case\>\):'. + \ '\%('.s:when_no_matched_or_others.'\):'. + \ '\%(\<when\s\+others\>\|\<end\s\+case\>\),' . + \ + \ '\<merge\>:' . + \ '\<when\s\+not\s\+matched\>:' . + \ '\<when\s\+matched\>,' . + \ + \ '\%(\<create\s\+' . s:or_replace . '\)\?'. + \ '\%(function\|procedure\|event\):'. + \ '\<returns\?\>' + " \ '\<begin\>\|\<returns\?\>:'. + " \ '\<end\>\(;\)\?\s*$' + " \ '\<exception\>:'.s:when_no_matched_or_others. + " \ ':\<when\s\+others\>,'. + " + " \ '\%(\<exception\>\|\%('. s:notend . '\<case\>\)\):'. + " \ '\%(\<default\>\|'.s:when_no_matched_or_others.'\):'. + " \ '\%(\%(\<when\s\+others\>\)\|\<end\s\+case\>\),' . endif + +" Define how to find the macro definition of a variable using the various +" [d, [D, [_CTRL_D and so on features +" Match these values ignoring case +" ie DECLARE varname INTEGER +let &l:define = '\c\(DECLARE\|IN\|OUT\|INOUT\)\s*' + + +" Mappings to move to the next BEGIN ... END block +" \W - no characters or digits +nmap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR> +nmap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR> +nmap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR> +nmap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR> +vmap <buffer> <silent> ]] /\c^\s*begin\><CR> +vmap <buffer> <silent> [[ ?\c^\s*begin<CR> +vmap <buffer> <silent> ][ /\c^\s*end\W*$<CR> +vmap <buffer> <silent> [] ?\c^\s*end\W*$<CR> + + +" Predefined SQL objects what are used by the below mappings using +" the ]} style maps. +" This global variable allows the users to override it's value +" from within their vimrc. +if !exists('g:ftplugin_sql_objects') + let g:ftplugin_sql_objects = 'function,procedure,event,' . + \ '\(existing\\|global\s\+temporary\s\+\)\?table,trigger' . + \ ',schema,service,publication,database,datatype,domain' . + \ ',index,subscription,synchronization,view,variable' +endif + +let s:ftplugin_sql_objects = + \ '\c^\s*' . + \ '\(create\s\+\(or\s\+replace\s\+\)\?\)\?' . + \ '\<\(' . + \ substitute(g:ftplugin_sql_objects, ',', '\\\\|', 'g') . + \ '\)\>' + +" Mappings to move to the next CREATE ... block +" map <buffer> <silent> ]} :call search(g:ftplugin_sql_objects, 'W' )<CR> +" nmap <buffer> <silent> [{ :call search('\c^\s*\(create\s\+\(or\s\+replace\s\+\)\?\)\?\<\(function\\|procedure\\|event\\|table\\|trigger\\|schema\)\>', 'bW' )<CR> +" exec 'nmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>' +exec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>" +exec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>" +" Could not figure out how to use a :call search() string in visual mode +" without it ending visual mode +exec 'vmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>' +exec 'vmap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>' +" vmap <buffer> <silent> ]} /\c^\s*\(create\s\+\(or\s\+replace\s\+\)\?\)\?\<\(function\\|procedure\\|event\\|table\\|trigger\\|schema\)\><CR> +" vmap <buffer> <silent> [{ ?\c^\s*\(create\s\+\(or\s\+replace\s\+\)\?\)\?\<\(function\\|procedure\\|event\\|table\\|trigger\\|schema\)\><CR> + +" Mappings to move to the next COMMENT +" +" Had to double the \ for the \| separator since this has a special +" meaning on maps +let b:comment_leader = '\(--\\|\/\/\\|\*\\|\/\*\\|\*\/\)' +" Find the start of the next comment +let b:comment_start = '^\(\s*'.b:comment_leader.'.*\n\)\@<!'. + \ '\(\s*'.b:comment_leader.'\)' +" Find the end of the previous comment +let b:comment_end = '\(^\s*'.b:comment_leader.'.*\n\)'. + \ '\(^\s*'.b:comment_leader.'\)\@!' +" Skip over the comment +let b:comment_jump_over = "call search('". + \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'. + \ "', 'W')" +let b:comment_skip_back = "call search('". + \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'. + \ "', 'bW')" +" Move to the start and end of comments +exec 'nnoremap <silent><buffer> ]" /'.b:comment_start.'<CR>' +exec 'nnoremap <silent><buffer> [" /'.b:comment_end.'<CR>' +exec 'vnoremap <silent><buffer> ]" /'.b:comment_start.'<CR>' +exec 'vnoremap <silent><buffer> [" /'.b:comment_end.'<CR>' + +" Comments can be of the form: +" /* +" * +" */ +" or +" // +" or +" -- +setlocal comments=s1:/*,mb:*,ex:*/,:--,:// + +let &cpo = s:save_cpo + +" vim:sw=4:ff=unix: + |