]> granicus.if.org Git - vim/commitdiff
updated for version 7.0191
authorBram Moolenaar <Bram@vim.org>
Wed, 1 Feb 2006 21:47:16 +0000 (21:47 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 1 Feb 2006 21:47:16 +0000 (21:47 +0000)
14 files changed:
runtime/autoload/htmlcomplete.vim
runtime/doc/cmdline.txt
runtime/doc/index.txt
runtime/doc/insert.txt
runtime/doc/quickref.txt
runtime/indent/vhdl.vim
runtime/plugin/netrwPlugin.vim
runtime/plugin/spellfile.vim [new file with mode: 0644]
runtime/syntax/vim.vim
src/ex_docmd.c
src/fileio.c
src/spell.c
src/tag.c
src/vim.h

index c7a43c3049c822845caab8317dd4ba545b49f6e9..cf76e69cc84ee2e5a3c5f2972f145cb00e90928b 100644 (file)
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:    XHTML 1.0 Strict
 " Maintainer:  Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change: 2006 Jan 24
+" Last Change: 2006 Jan 30
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -29,7 +29,19 @@ function! htmlcomplete#CompleteTags(findstart, base)
                        endwhile
                endif
        endif
-       if !exists("b:csscompl")
+       let scriptstart = searchpair('<script\>', '', '<\/script\>', "bnW")
+       let scriptend   = searchpair('<script\>', '', '<\/script\>', "nW")
+       if scriptstart != 0 && scriptend != 0 
+               if scriptstart <= curline && scriptend >= curline
+                       let start = col('.') - 1
+                       let b:jscompl = 1
+                       let b:jsrange = [scriptstart, scriptend]
+                       while start >= 0 && line[start - 1] =~ '\(\k\|-\)'
+                               let start -= 1
+                       endwhile
+               endif
+       endif
+       if !exists("b:csscompl") && !exists("b:jscompl")
                let b:compl_context = getline('.')[0:(compl_begin)]
                if b:compl_context !~ '<[^>]*$'
                        " Look like we may have broken tag. Check previous lines. Up to
@@ -68,6 +80,10 @@ function! htmlcomplete#CompleteTags(findstart, base)
                unlet! b:csscompl
                let context = b:compl_context
                return csscomplete#CompleteCSS(0, context)
+       elseif exists("b:jscompl")
+               unlet! b:jscompl
+               let context = b:compl_context
+               return javascriptcomplete#CompleteJS(0, context)
        else
                if len(b:compl_context) == 0 && !exists("b:entitiescompl")
                        return []
@@ -111,6 +127,9 @@ function! htmlcomplete#CompleteTags(findstart, base)
                " should abandon action - with one exception: <style> span { bo
                if context =~ 'style[^>]\{-}>[^<]\{-}$'
                        return csscomplete#CompleteCSS(0, context)
+               elseif context =~ 'script[^>]\{-}>[^<]\{-}$'
+                       let b:jsrange = [line('.'), search('<\/script\>', 'nW')]
+                       return javascriptcomplete#CompleteJS(0, context)
                else
                        return []
                endif
index 2fc068f2c866961e8ae84d00c87f4e8ea8bdc992..65cdcb3cd1c39aba8bacfd87e9011255b9f94a6b 100644 (file)
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 7.0aa.  Last change: 2006 Jan 19
+*cmdline.txt*   For Vim version 7.0aa.  Last change: 2006 Feb 01
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -746,7 +746,7 @@ Note: these are typed literally, they are not special keys!
        <amatch>   when executing autocommands, is replaced with the match for
                   which this autocommand was executed.  It differs from
                   <afile> only when the file name isn't used to match with
-                  (for FileType and Syntax events).
+                  (for FileType, Syntax and SpellFileMissing events).
        <sfile>    when executing a ":source" command, is replaced with the
                   file name of the sourced file;
                   when executing a function, is replaced with
index 919e27f9a04338096c2fe849ef88841f775aa2c3..5cc2f411a0e072ea1460ecf1b7517cb32277a80b 100644 (file)
@@ -1250,6 +1250,8 @@ The commands are sorted on the non-optional part of their name.
 |:lpfile|      :lpf[ile]       go to last location in previous file
 |:lrewind|     :lr[ewind]      go to the specified location, default first one
 |:ls|          :ls             list all buffers
+|:ltag|                :lt[ag]         jump to tag and add matching tags to the
+                               location list
 |:lunmap|      :lu[nmap]       like ":unmap!" but includes Lang-Arg mode
 |:lwindow|     :lw[indow]      open or close location window
 |:move|                :m[ove]         move lines
index 92d85e41f68946043cb92af155e7d0a65266dd44..88be8cbf31def3751eb9f32c276fd30b0a14dbde 100644 (file)
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0aa.  Last change: 2006 Jan 29
+*insert.txt*    For Vim version 7.0aa.  Last change: 2006 Jan 30
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1128,6 +1128,42 @@ Note: When used first time completion menu will be shown with little delay
 - this is time needed for loading of data file.
 
 
+JAVASCRIPT                                             *ft-javascript-omni*
+
+Completion of most elements of JavaScript language and HTML DOM.
+
+Complete:
+
+- variables
+- function name
+- function arguments
+- properties of variables trying to detect type of variable
+- complete HTML DOM objects and properties depending on context
+- keywords of language
+
+Completion works in separate JavaScript files (&ft==javascript) and inside of
+<script> tag of (X)HTML. Note: scanning will be only in scope of current tag.
+At the moment separate files are not taken into account.
+
+DOM compatibility
+
+At the moment (beginning of 2006) there are two main browsers - MS Internet
+Explorer and Mozilla Firefox. These two applications are covering over 90% of
+market. Theoretically standards are created by W3C organisation
+(http://www.w3c.org) but they are not always followed/implemented.
+
+               IE      FF      W3C  Omni completion ~
+               +/-     +/-     +    +               ~
+                +       +       -    +               ~
+                +       -       -    -               ~
+                -       +       -    -               ~
+
+Regardless from state of implementation in browsers but if element is defined
+in standards, completion plugin will place element in suggestion list. When
+both major engines implemented element, even if this is not in standards it
+will be suggested. All other elements are not placed in suggestion list.
+
+
 SYNTAX                                                 *ft-syntax-omni*
 
 This uses the current syntax highlighting for completion.  It can be used for
index 251fcc2b5bb3464e443190772a3d85dde838504e..ffa3b07fcdc0c287ad89dd02ac3fda5c0acd7d7a 100644 (file)
@@ -211,6 +211,8 @@ N is used to indicate an optional count that can be given before the command.
 |:ts|     :ts[elect][!] [tag]  List matching tags and select one to jump to
 |:tjump|   :tj[ump][!] [tag]   Jump to tag [tag] or select from list when
                                   there are multiple matches
+|:ltag|           :lt[ag][!] [tag]     Jump to tag [tag] and add matching tags to the
+                                  location list.
 
 |:tags|           :tags                Print tag list
 |CTRL-T|   N  CTRL-T           Jump back from Nth older tag in tag list
index bad838a0779b21d44d3c31e15e059a158746085e..e510f3c8f394aed5c744f0d1f0c8cb7385f6006e 100644 (file)
@@ -1,8 +1,8 @@
 " VHDL indent ('93 syntax)
 " Language:    VHDL
 " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
-" Version:     1.2
-" Last Change: 2006 Jan 26
+" Version:     1.3
+" Last Change: 2006 Jan 31
 " URL:         http://www.vim.org/scripts/script.php?script_id=1450
 
 " only load this indent file when no other was loaded
@@ -121,7 +121,7 @@ function GetVHDLindent()
     let pn = prevnonblank(pn - 1)
     let ps = getline(pn)
   endwhile
-  if (curs =~ '^\s*)' || curs =~? s:NC.'\%(\<\%(generic\|map\|port\)\>.*\)\@<!\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
+  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
     " align closing ")" with opening "("
     if curs =~ '^\s*)'
       return stridx(prevs, '(')
@@ -261,7 +261,7 @@ function GetVHDLindent()
   " where:    start of current line
   " find previous opening statement of
   " keywords: "elsif", "if"
-  if curs =~? '^\s*\<then\>' && (prevs =~? s:NC.'\<elsif\>' || prevs =~? s:NC.s:NE.'\<if\>')
+  if curs =~? '^\s*\<then\>' && prevs =~? s:NC.'\%(\<elsif\>\|'.s:NE.'\<if\>\)'
     return ind2
   endif
 
@@ -270,23 +270,15 @@ function GetVHDLindent()
   " where:    start of current line
   " find previous opening statement of
   " keywords: "for", "if"
-  if curs =~? '^\s*\<generate\>' && (prevs =~? s:NC.s:NE.'\%(\<wait\s\+\)\@<!\<for\>' || prevs =~? s:NC.s:NE.'\<if\>')
+  if curs =~? '^\s*\<generate\>' && prevs =~? s:NC.s:NE.'\%(\%(\<wait\s\+\)\@<!\<for\>\|\<if\>\)'
     return ind2
   endif
 
   " indent:   +sw
-  " keywords: "block", "loop", "process", "record", "units"
-  " removed:  "case", "if"
+  " keywords: "begin", "block", "loop", "process", "record", "units"
+  " removed:  "case", "elsif", "if", "while"
   " where:    anywhere in previous line
-  if prevs =~? s:NC.s:NE.'\<\%(block\|loop\|process\|record\|units\)\>'
-    return ind + &sw
-  endif
-
-  " indent:   +sw
-  " keywords: "begin"
-  " removed:  "elsif", "while"
-  " where:    anywhere in previous line
-  if prevs =~? s:NC.'\<begin\>'
+  if prevs =~? s:NC.'\%(\<begin\>\|'.s:NE.'\<\%(block\|loop\|process\|record\|units\)\>\)'
     return ind + &sw
   endif
 
@@ -301,40 +293,70 @@ function GetVHDLindent()
   " indent:   +sw
   " keyword:  "generate", "is", "select", "=>"
   " where:    end of previous line
-  if prevs =~? s:NC.'\<\%(generate\|is\|select\)'.s:ES || prevs =~? s:NC.'=>'.s:ES
+  if prevs =~? s:NC.'\%(\%('.s:NE.'\<generate\|\<is\|\<select\)\|=>\)'.s:ES
     return ind + &sw
   endif
 
   " indent:   +sw
-  " keyword:  "else", "then"
+  " keyword:  "else"
+  " where:    start of previous line
+  " keyword:  "then"
   " where:    end of previous line
   " _note_:   indent allowed to leave this filter
-  if prevs =~? s:NC.'\<\%(else\|then\)'.s:ES
+  if prevs =~? '^\s*else\>' || prevs =~? s:NC.'\<then'.s:ES
     let ind = ind + &sw
   endif
 
   " ****************************************************************************************
-  " indent:   -sw if previous line does not begin with "when"
-  " keywords: "when"
+  " indent:   -sw
+  " keywords: "when", provided previous line does not begin with "when"
   " where:    start of current line
   let s4 = '^\s*when\>'
-  if curs =~? s4 && prevs !~? s4
-    return ind - &sw
+  if curs =~? s4
+    if prevs !~? s4
+      return ind - &sw
+    else
+      return ind2
+    endif
   endif
 
   " indent:   -sw
-  " keywords: "else", "elsif"
+  " keywords: "else", "elsif", provided previous line does not contain "then"
   " where:    start of current line
   if curs =~? '^\s*\%(else\|elsif\)\>'
-    return ind - &sw
+    if prevs !~? s:NC.'\<then\>'
+      return ind - &sw
+    else
+      return ind2
+    endif
   endif
 
   " indent:   -sw
-  " keywords: "end" + "block", "for", "function", "generate", "if", "loop", "procedure", "process", "record", "units"
+  " keywords: "end" + "if", provided previous line does not begin with "else", not contain "then"
   " where:    start of current line
-  " keyword:  ")"
+  if curs =~? '^\s*end\s\+if\>'
+    if prevs !~? '^\s*else\>' && prevs !~? s:NC.'\<then\>'
+      return ind - &sw
+    else
+      return ind2
+    endif
+  endif
+
+  " indent:   -sw
+  " keywords: "end" + "function", "procedure", provided previous line does not contain "begin"
+  " where:    start of current line
+  if curs =~? '^\s*end\s\+\%(function\|procedure\)\>'
+    if prevs !~? s:NC.'\<begin\>'
+      return ind - &sw
+    else
+      return ind2
+    endif
+  endif
+
+  " indent:   -sw
+  " keywords: "end" + "block", "for", "generate", "loop", "process", "record", "units"
   " where:    start of current line
-  if curs =~? '^\s*end\s\+\%(block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units\)\>' || curs =~ '^\s*)'
+  if curs =~? '^\s*end\s\+\%(block\|for\|generate\|loop\|process\|record\|units\)\>'
     return ind - &sw
   endif
 
@@ -386,6 +408,13 @@ function GetVHDLindent()
     return ind - &sw
   endif
 
+  " indent:   -sw
+  " keyword:  ")"
+  " where:    start of current line
+  if curs =~ '^\s*)'
+    return ind - &sw
+  endif
+
   " indent:   0
   " keywords: "end" + "architecture", "configuration", "entity", "package"
   " where:    start of current line
@@ -403,8 +432,8 @@ function GetVHDLindent()
   " ****************************************************************************************
   " indent:   maintain indent of previous opening statement
   " keywords: without "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
-  " where:    anywhere in current line
-  if curs =~? s:NC.'\%(\<\%(generic\|map\|port\)\>.*\)\@<!:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
+  " where:    start of current line
+  if curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
     return ind2
   endif
 
index 6e33d51c1307e79750c6c4373ba91451cef19f86..2a691cdc1fac68dd4906e47e853ddcd86f1efff6 100644 (file)
@@ -35,7 +35,7 @@ set cpo&vim
 " Local Browsing: {{{2
 augroup FileExplorer
  au!
- au BufEnter * call s:LocalBrowse(expand("<amatch>"))
+ au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
 augroup END
 
 " Network Browsing Reading Writing: {{{2
@@ -47,10 +47,10 @@ augroup Network
   au BufReadCmd  file://*              exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
   au BufReadCmd  file://localhost/*    exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
  endif
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*   exe "silent doau BufReadPre ".expand("<amatch>")|exe "Nread 0r ".expand("<amatch>")|exe "silent doau BufReadPost ".expand("<amatch>")
- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*   exe "silent doau FileReadPre ".expand("<amatch>")|exe "Nread "   .expand("<amatch>")|exe "silent doau FileReadPost ".expand("<amatch>")
- au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*            exe "silent doau BufWritePre ".expand("<amatch>")|exe "Nwrite " .expand("<amatch>")|exe "silent doau BufWritePost ".expand("<amatch>")
- au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*            exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']Nwrite " .expand("<amatch>")|exe "silent doau FileWritePost ".expand("<amatch>")
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*   exe "silent doau BufReadPre ".expand("<amatch>")|exe 'Nread 0r "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
+ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*   exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "'   .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>")
+ au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*            exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
+ au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*            exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
 augroup END
 
 " Commands: :Nread, :Nwrite, :NetUserPass {{{2
@@ -69,6 +69,12 @@ com! -nargs=? -bar -bang             Pexplore        call netrw#Explore(-2,0,0,<q-args>)
 " Commands: NetrwSettings {{{2
 com! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings()
 
+" Maps:
+if !hasmapto('<Plug>NetrwBrowseX')
+ nmap <unique> gx <Plug>NetrwBrowseX
+endif
+nno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
+
 " ---------------------------------------------------------------------
 " LocalBrowse: {{{2
 fun! s:LocalBrowse(dirname)
@@ -76,7 +82,7 @@ fun! s:LocalBrowse(dirname)
   " the BufEnter event causes triggering when attempts to write to
   " the DBG buffer are made.
   if isdirectory(a:dirname)
-   call netrw#DirBrowse(a:dirname)
+   silent! call netrw#DirBrowse(a:dirname)
   endif
   " not a directory, ignore it
 endfun
diff --git a/runtime/plugin/spellfile.vim b/runtime/plugin/spellfile.vim
new file mode 100644 (file)
index 0000000..4372960
--- /dev/null
@@ -0,0 +1,15 @@
+" Vim plugin for downloading spell files
+" Maintainer:  Bram Moolenaar <Bram@vim.org>
+" Last Change: 2006 Feb 01
+
+" Exit quickly when:
+" - this plugin was already loaded
+" - when 'compatible' is set
+" - some autocommands are already taking care of spell files
+if exists("loaded_spellfile_plugin") || &cp || exists("#SpellFileMissing")
+  finish
+endif
+let loaded_spellfile_plugin = 1
+
+" The function is in the autoload directory.
+autocmd SpellFileMissing * call spellfile#LoadFile(expand('<amatch>'))
index 21715b7ba24fd61d8b4227b37f0a14bda2501434..613a16cd44de0101952b07f2bf6acb74804079a0 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Vim 7.0 script
 " Maintainer:  Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Jan 09, 2006
-" Version:     7.0-22
+" Last Change: January 30, 2006
+" Version:     7.0-23
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -16,11 +16,11 @@ syn keyword vimTodo contained       COMBAK  NOT     RELEASED        TODO    WIP
 syn cluster vimCommentGroup    contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained       ab[breviate] abc[lear] abo[veleft] al[l] arga[dd] argd[elete] argdo arge[dit] argg[lobal] argl[ocal] ar[gs] argu[ment] as[cii] bad[d] ba[ll] bd[elete] be bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bN[ext] bo[tright] bp[revious] brea[k] breaka[dd] breakd[el] breakl[ist] br[ewind] bro[wse] bufdo b[uffer] buffers bun[load] bw[ipeout] ca[bbrev] cabc[lear] cad[dfile] cal[l] cat[ch] cb[uffer] cc ccl[ose] cd ce[nter] cex[pr] cf[ile] cfir[st] cg[etfile] c[hange] changes chd[ir] che[ckpath] checkt[ime] cla[st] cl[ist] clo[se] cmapc[lear] cnew[er] cn[ext] cN[ext] cnf[ile] cNf[ile] cnorea[bbrev] col[der] colo[rscheme] comc[lear] comp[iler] conf[irm] con[tinue] cope[n] co[py] cpf[ile] cp[revious] cq[uit] cr[ewind] cuna[bbrev] cu[nmap] cw[indow] debugg[reedy] delc[ommand] d[elete] DeleteFirst delf[unction] delm[arks] diffg[et] diffoff diffpatch diffpu[t] diffsplit diffthis diffu[pdate] dig[raphs] di[splay] dj[ump] dl[ist] dr[op] ds[earch] dsp[lit] echoe[rr] echom[sg] echon e[dit] el[se] elsei[f] em[enu] emenu* endfo[r] endf[unction] en[dif] endt[ry] endw[hile] ene[w] ex exi[t] Explore exu[sage] f[ile] files filetype fina[lly] fin[d] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] folddoc[losed] foldd[oopen] foldo[pen] for fu[nction] g[lobal] go[to] gr[ep] grepa[dd] ha[rdcopy] h[elp] helpf[ind] helpg[rep] helpt[ags] Hexplore hid[e] his[tory] I ia[bbrev] iabc[lear] if ij[ump] il[ist] imapc[lear] inorea[bbrev] is[earch] isp[lit] iuna[bbrev] iu[nmap] j[oin] ju[mps] k keepalt keepj[umps] kee[pmarks] lan[guage] la[st] lc[d] lch[dir] le[ft] lefta[bove] l[ist] lm[ap] lmapc[lear] ln[oremap] lo[adview] loc[kmarks] lockv[ar] ls lu[nmap] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mksp[ell] mkvie[w] mkv[imrc] mod[e] m[ove] mzf[ile] mz[scheme] nbkey NetrwSettings new n[ext] N[ext] nmapc[lear] noh[lsearch] norea[bbrev] Nread nu[mber] nun[map] Nw omapc[lear] on[ly] o[pen] opt[ions] ou[nmap] pc[lose] ped[it] pe[rl] perld[o] po[p] popu popu[p] pp[op] pre[serve] prev[ious] p[rint] P[rint] profd[el] prof[ile] prompt promptf[ind] promptr[epl] ps[earch] pta[g] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptN[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] pyf[ile] py[thon] qa[ll] q[uit] quita[ll] r[ead] rec[over] redi[r] red[o] redr[aw] redraws[tatus] reg[isters] res[ize] ret[ab] retu[rn] rew[ind] ri[ght] rightb[elow] rub[y] rubyd[o] rubyf[ile] ru[ntime] rv[iminfo] sal[l] san[dbox] sa[rgument] sav[eas] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbN[ext] sbp[revious] sbr[ewind] sb[uffer] scripte[ncoding] scrip[tnames] se[t] setf[iletype] setg[lobal] setl[ocal] Sexplore sf[ind] sfir[st] sh[ell] sign sil[ent] sim[alt] sla[st] sl[eep] sm[agic] sn[ext] sN[ext] sni[ff] sno[magic] sor[t] so[urce] spelld[ump] spe[llgood] spellr[epall] spellw[rong] sp[lit] spr[evious] sre[wind] sta[g] star[tinsert] startr[eplace] stj[ump] st[op] stopi[nsert] sts[elect] sun[hide] sus[pend] sv[iew] syncbind t ta[g] tags tc[l] tcld[o] tclf[ile] te[aroff] tf[irst] the th[row] tj[ump] tl[ast] tm tm[enu] tn[ext] tN[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] tu tu[nmenu] una[bbreviate] u[ndo] unh[ide] unlo[ckvar] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] Vexplore v[global] vie[w] vim[grep] vimgrepa[dd] vi[sual] viu[sage] vmapc[lear] vne[w] vs[plit] vu[nmap] wa[ll] wh[ile] winc[md] windo winp[os] win[size] wn[ext] wN[ext] wp[revious] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] XMLent XMLns y[ank] 
+syn keyword vimCommand contained       ab[breviate] abc[lear] abo[veleft] al[l] arga[dd] argd[elete] argdo arge[dit] argg[lobal] argl[ocal] ar[gs] argu[ment] as[cii] bad[d] ba[ll] bd[elete] be bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bN[ext] bo[tright] bp[revious] brea[k] breaka[dd] breakd[el] breakl[ist] br[ewind] bro[wse] bufdo b[uffer] buffers bun[load] bw[ipeout] ca[bbrev] cabc[lear] cad[dexpr] caddf[ile] cal[l] cat[ch] cb[uffer] cc ccl[ose] cd ce[nter] cex[pr] cf[ile] cfir[st] cg[etfile] c[hange] changes chd[ir] che[ckpath] checkt[ime] cla[st] cl[ist] clo[se] cmapc[lear] cnew[er] cn[ext] cN[ext] cnf[ile] cNf[ile] cnorea[bbrev] col[der] colo[rscheme] comc[lear] comp[iler] conf[irm] con[tinue] cope[n] co[py] cpf[ile] cp[revious] cq[uit] cr[ewind] cuna[bbrev] cu[nmap] cw[indow] debugg[reedy] delc[ommand] d[elete] DeleteFirst delf[unction] delm[arks] diffg[et] diffoff diffpatch diffpu[t] diffsplit diffthis diffu[pdate] dig[raphs] di[splay] dj[ump] dl[ist] dr[op] ds[earch] dsp[lit] echoe[rr] echom[sg] echon e[dit] el[se] elsei[f] em[enu] emenu* endfo[r] endf[unction] en[dif] endt[ry] endw[hile] ene[w] ex exi[t] Explore exu[sage] f[ile] files filetype fina[lly] fin[d] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] folddoc[losed] foldd[oopen] foldo[pen] for fu[nction] g[lobal] go[to] gr[ep] grepa[dd] ha[rdcopy] h[elp] helpf[ind] helpg[rep] helpt[ags] Hexplore hid[e] his[tory] I ia[bbrev] iabc[lear] if ij[ump] il[ist] imapc[lear] inorea[bbrev] is[earch] isp[lit] iuna[bbrev] iu[nmap] j[oin] ju[mps] k keepalt keepj[umps] kee[pmarks] lad[dexpr] laddf[ile] lan[guage] la[st] lb[uffer] lc[d] lch[dir] lcl[ose] le[ft] lefta[bove] lex[pr] lf[ile] lfir[st] lg[etfile] l[ist] ll lla[st] lli[st] lm[ap] lmapc[lear] lnew[er] lne[xt] lN[ext] lnf[ile] lNf[ile] ln[oremap] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lpf[ile] lp[revious] lr[ewind] ls lu[nmap] lw[indow] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mksp[ell] mkvie[w] mkv[imrc] mod[e] m[ove] mzf[ile] mz[scheme] nbkey NetrwSettings new n[ext] N[ext] nmapc[lear] noh[lsearch] norea[bbrev] Nread nu[mber] nun[map] Nw omapc[lear] on[ly] o[pen] opt[ions] ou[nmap] pc[lose] ped[it] pe[rl] perld[o] po[p] popu popu[p] pp[op] pre[serve] prev[ious] p[rint] P[rint] profd[el] prof[ile] prompt promptf[ind] promptr[epl] ps[earch] pta[g] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptN[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] pyf[ile] py[thon] qa[ll] q[uit] quita[ll] r[ead] rec[over] redi[r] red[o] redr[aw] redraws[tatus] reg[isters] res[ize] ret[ab] retu[rn] rew[ind] ri[ght] rightb[elow] rub[y] rubyd[o] rubyf[ile] ru[ntime] rv[iminfo] sal[l] san[dbox] sa[rgument] sav[eas] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbN[ext] sbp[revious] sbr[ewind] sb[uffer] scripte[ncoding] scrip[tnames] se[t] setf[iletype] setg[lobal] setl[ocal] Sexplore sf[ind] sfir[st] sh[ell] sign sil[ent] sim[alt] sla[st] sl[eep] sm[agic] sn[ext] sN[ext] sni[ff] sno[magic] sor[t] so[urce] spelld[ump] spe[llgood] spellr[epall] spellw[rong] sp[lit] spr[evious] sre[wind] sta[g] startg[replace] star[tinsert] startr[eplace] stj[ump] st[op] stopi[nsert] sts[elect] sun[hide] sus[pend] sv[iew] syncbind t ta[g] tags tc[l] tcld[o] tclf[ile] te[aroff] tf[irst] the th[row] tj[ump] tl[ast] tm tm[enu] tn[ext] tN[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] tu tu[nmenu] una[bbreviate] u[ndo] unh[ide] unlo[ckvar] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] Vexplore v[global] vie[w] vim[grep] vimgrepa[dd] vi[sual] viu[sage] vmapc[lear] vne[w] vs[plit] vu[nmap] wa[ll] wh[ile] winc[md] windo winp[os] win[size] wn[ext] wN[ext] wp[revious] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] XMLent XMLns y[ank] 
 syn match   vimCommand contained       "\<z[-+^.=]"
 
 " vimOptions are caught only when contained in a vimSet {{{2
-syn keyword vimOption contained        : acd ai akm al aleph allowrevins altkeymap ambiwidth ambw anti antialias ar arab arabic arabicshape ari arshape autochdir autoindent autoread autowrite autowriteall aw awa background backspace backup backupcopy backupdir backupext backupskip balloondelay ballooneval balloonexpr bdir bdlay beval bex bexpr bg bh bin binary biosk bioskey bk bkc bl bomb breakat brk browsedir bs bsdir bsk bt bufhidden buflisted buftype casemap cb ccv cd cdpath cedit cf cfu ch charconvert ci cin cindent cink cinkeys cino cinoptions cinw cinwords clipboard cmdheight cmdwinheight cmp cms co columns com comments commentstring compatible complete completefunc completeopt confirm consk conskey copyindent cot cp cpo cpoptions cpt cscopepathcomp cscopeprg cscopequickfix cscopetag cscopetagorder cscopeverbose cspc csprg csqf cst csto csverb cwh debug deco def define delcombine dex dg dict dictionary diff diffexpr diffopt digraph dip dir directory display dy ea ead eadirection eb ed edcompatible ef efm ei ek enc encoding endofline eol ep equalalways equalprg errorbells errorfile errorformat esckeys et eventignore ex expandtab exrc fcl fcs fdc fde fdi fdl fdls fdm fdn fdo fdt fen fenc fencs ff ffs fileencoding fileencodings fileformat fileformats filetype fillchars fk fkmap flp fml fmr fo foldclose foldcolumn foldenable foldexpr foldignore foldlevel foldlevelstart foldmarker foldmethod foldminlines foldnestmax foldopen foldtext formatlistpat formatoptions formatprg fp fs fsync ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg guicursor guifont guifontset guifontwide guiheadroom guioptions guipty helpfile helpheight helplang hf hh hi hid hidden highlight history hk hkmap hkmapp hkp hl hlg hls hlsearch ic icon iconstring ignorecase im imactivatekey imak imc imcmdline imd imdisable imi iminsert ims imsearch inc include includeexpr incsearch inde indentexpr indentkeys indk inex inf infercase insertmode is isf isfname isi isident isk iskeyword isp isprint joinspaces js key keymap keymodel keywordprg km kmp kp langmap langmenu laststatus lazyredraw lbr lcs linebreak lines linespace lisp lispwords list listchars lm lmap loadplugins lpl ls lsp lw lz ma magic makeef makeprg mat matchpairs matchtime maxfuncdepth maxmapdepth maxmem maxmempattern maxmemtot mef menuitems mfd mh mis mkspellmem ml mls mm mmd mmp mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps msm mzq mzquantum nf nrformats nu number numberwidth nuw oft ofu omnifunc osfiletype pa para paragraphs paste pastetoggle patchexpr patchmode path pdev penc pex pexpr pfn pheader pi pm pmbcs pmbfn popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printmbcharset printmbfont printoptions prompt pt pvh pvw qe quoteescape readonly remap report restorescreen revins ri rightleft rightleftcmd rl rlc ro rs rtp ru ruf ruler rulerformat runtimepath sb sbo sbr sc scb scr scroll scrollbind scrolljump scrolloff scrollopt scs sect sections secure sel selection selectmode sessionoptions sft sh shcf shell shellcmdflag shellpipe shellquote shellredir shellslash shelltemp shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smc smd sn so softtabstop sol sp spc spell spellcapcheck spellfile spelllang spellsuggest spf spl splitbelow splitright spr sps sr srr ss ssl ssop st sta startofline statusline stl stmp sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn synmaxcol syntax ta tabstop tag tagbsearch taglength tagrelative tags tagstack tb tbi tbidi tbis tbs tenc term termbidi termencoding terse textauto textmode textwidth tf tgst thesaurus tildeop timeout timeoutlen title titlelen titleold titlestring tl tm to toolbar toolbariconsize top tr ts tsl tsr ttimeout ttimeoutlen ttm tty ttybuiltin ttyfast ttym ttymouse ttyscroll ttytype tw tx uc ul undolevels updatecount updatetime ut vb vbs vdir ve verbose verbosefile vfile vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wh whichwrap wi wig wildchar wildcharm wildignore wildmenu wildmode wildoptions wim winaltkeys window winfixheight winheight winminheight winminwidth winwidth wiv wiw wm wmh wmnu wmw wop wrap wrapmargin wrapscan write writeany writebackup writedelay ws ww 
+syn keyword vimOption contained        : acd ai akm al aleph allowrevins altkeymap ambiwidth ambw anti antialias ar arab arabic arabicshape ari arshape autochdir autoindent autoread autowrite autowriteall aw awa background backspace backup backupcopy backupdir backupext backupskip balloondelay ballooneval balloonexpr bdir bdlay beval bex bexpr bg bh bin binary biosk bioskey bk bkc bl bomb breakat brk browsedir bs bsdir bsk bt bufhidden buflisted buftype casemap cb ccv cd cdpath cedit cf cfu ch charconvert ci cin cindent cink cinkeys cino cinoptions cinw cinwords clipboard cmdheight cmdwinheight cmp cms co columns com comments commentstring compatible complete completefunc completeopt confirm consk conskey copyindent cot cp cpo cpoptions cpt cscopepathcomp cscopeprg cscopequickfix cscopetag cscopetagorder cscopeverbose cspc csprg csqf cst csto csverb cwh debug deco def define delcombine dex dg dict dictionary diff diffexpr diffopt digraph dip dir directory display dy ea ead eadirection eb ed edcompatible ef efm ei ek enc encoding endofline eol ep equalalways equalprg errorbells errorfile errorformat esckeys et eventignore ex expandtab exrc fcl fcs fdc fde fdi fdl fdls fdm fdn fdo fdt fen fenc fencs ff ffs fileencoding fileencodings fileformat fileformats filetype fillchars fk fkmap flp fml fmr fo foldclose foldcolumn foldenable foldexpr foldignore foldlevel foldlevelstart foldmarker foldmethod foldminlines foldnestmax foldopen foldtext formatlistpat formatoptions formatprg fp fs fsync ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg guicursor guifont guifontset guifontwide guiheadroom guioptions guipty helpfile helpheight helplang hf hh hi hid hidden highlight history hk hkmap hkmapp hkp hl hlg hls hlsearch ic icon iconstring ignorecase im imactivatekey imak imc imcmdline imd imdisable imi iminsert ims imsearch inc include includeexpr incsearch inde indentexpr indentkeys indk inex inf infercase insertmode is isf isfname isi isident isk iskeyword isp isprint joinspaces js key keymap keymodel keywordprg km kmp kp langmap langmenu laststatus lazyredraw lbr lcs linebreak lines linespace lisp lispwords list listchars lm lmap loadplugins lpl ls lsp lw lz ma magic makeef makeprg mat matchpairs matchtime maxfuncdepth maxmapdepth maxmem maxmempattern maxmemtot mef menuitems mfd mh mis mkspellmem ml mls mm mmd mmp mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps msm mzq mzquantum nf nrformats nu number numberwidth nuw oft ofu omnifunc operatorfunc opfunc osfiletype pa para paragraphs paste pastetoggle patchexpr patchmode path pdev penc pex pexpr pfn pheader pi pm pmbcs pmbfn popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printmbcharset printmbfont printoptions prompt pt pvh pvw qe quoteescape readonly remap report restorescreen revins ri rightleft rightleftcmd rl rlc ro rs rtp ru ruf ruler rulerformat runtimepath sb sbo sbr sc scb scr scroll scrollbind scrolljump scrolloff scrollopt scs sect sections secure sel selection selectmode sessionoptions sft sh shcf shell shellcmdflag shellpipe shellquote shellredir shellslash shelltemp shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smc smd sn so softtabstop sol sp spc spell spellcapcheck spellfile spelllang spellsuggest spf spl splitbelow splitright spr sps sr srr ss ssl ssop st sta startofline statusline stl stmp sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn synmaxcol syntax ta tabstop tag tagbsearch taglength tagrelative tags tagstack tb tbi tbidi tbis tbs tenc term termbidi termencoding terse textauto textmode textwidth tf tgst thesaurus tildeop timeout timeoutlen title titlelen titleold titlestring tl tm to toolbar toolbariconsize top tr ts tsl tsr ttimeout ttimeoutlen ttm tty ttybuiltin ttyfast ttym ttymouse ttyscroll ttytype tw tx uc ul undolevels updatecount updatetime ut vb vbs vdir ve verbose verbosefile vfile vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wh whichwrap wi wig wildchar wildcharm wildignore wildmenu wildmode wildoptions wim winaltkeys window winfixheight winheight winminheight winminwidth winwidth wiv wiw wm wmh wmnu wmw wop wrap wrapmargin wrapscan write writeany writebackup writedelay ws ww 
 
 " vimOptions: These are the turn-off setting variants {{{2
 syn keyword vimOption contained        noacd noai noakm noallowrevins noaltkeymap noanti noantialias noar noarab noarabic noarabicshape noari noarshape noautochdir noautoindent noautoread noautowrite noautowriteall noaw noawa nobackup noballooneval nobeval nobin nobinary nobiosk nobioskey nobk nobl nobomb nobuflisted nocf noci nocin nocindent nocompatible noconfirm noconsk noconskey nocopyindent nocp nocscopetag nocscopeverbose nocst nocsverb nodeco nodelcombine nodg nodiff nodigraph nodisable noea noeb noed noedcompatible noek noendofline noeol noequalalways noerrorbells noesckeys noet noex noexpandtab noexrc nofen nofk nofkmap nofoldenable nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkmapp nohkp nohls nohlsearch noic noicon noignorecase noim noimc noimcmdline noimd noincsearch noinf noinfercase noinsertmode nois nojoinspaces nojs nolazyredraw nolbr nolinebreak nolisp nolist noloadplugins nolpl nolz noma nomagic nomh noml nomod nomodeline nomodifiable nomodified nomore nomousef nomousefocus nomousehide nonu nonumber nopaste nopi nopreserveindent nopreviewwindow noprompt nopvw noreadonly noremap norestorescreen norevins nori norightleft norightleftcmd norl norlc noro nors noru noruler nosb nosc noscb noscrollbind noscs nosecure nosft noshellslash noshelltemp noshiftround noshortname noshowcmd noshowfulltag noshowmatch noshowmode nosi nosm nosmartcase nosmartindent nosmarttab nosmd nosn nosol nospell nosplitbelow nosplitright nospr nosr nossl nosta nostartofline nostmp noswapfile noswf nota notagbsearch notagrelative notagstack notbi notbidi notbs notermbidi noterse notextauto notextmode notf notgst notildeop notimeout notitle noto notop notr nottimeout nottybuiltin nottyfast notx novb novisualbell nowa nowarn nowb noweirdinvert nowfh nowildmenu nowinfixheight nowiv nowmnu nowrap nowrapscan nowrite nowriteany nowritebackup nows 
@@ -55,7 +55,7 @@ syn match vimHLGroup contained        "Conceal"
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained      add append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call char2nr cindent col complete_add complete_check confirm copy count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists expand expr8 extend filereadable filewritable filter finddir findfile fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getqflist getreg getregtype getwinposx getwinposy getwinvar glob globpath has has_key hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime map maparg mapcheck match matchend matchlist matchstr max min mkdir mode nextnonblank nr2char prevnonblank printf range readfile remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchdecl searchpair server2client serverlist setbufvar setcmdpos setline setqflist setreg setwinvar simplify sort soundfold spellbadword spellsuggest split strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tagfiles taglist tempname tolower toupper tr type values virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winwidth writefile 
+syn keyword vimFuncName contained      add append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call char2nr cindent col complete_add complete_check confirm copy count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists expand expr8 extend filereadable filewritable filter finddir findfile fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getqflist getreg getregtype getwinposx getwinposy getwinvar glob globpath has has_key hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime map maparg mapcheck match matchend matchlist matchstr max min mkdir mode nextnonblank nr2char prevnonblank printf range readfile remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchdecl searchpair server2client serverlist setbufvar setcmdpos setline setloclist setqflist setreg setwinvar simplify sort soundfold spellbadword spellsuggest split strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tagfiles taglist tempname tolower toupper tr type values virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winwidth writefile 
 
 "--- syntax above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
@@ -277,12 +277,13 @@ syn case match
 
 " Maps {{{2
 " ====
-syn cluster vimMapGroup        contains=vimMapBang,vimMapLhs,vimMapMod
-syn match   vimMap     "map\ze\s*[^(]"
-syn keyword vimMap     cm[ap] cno[remap] im[ap] ino[remap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] vm[ap] vn[oremap] skipwhite nextgroup=@vimMapGroup
-syn match   vimMapLhs    contained     "\S\+"  contains=vimNotation,vimCtrlChar
-syn match   vimMapBang   contained     "!"     skipwhite nextgroup=vimMapLhs
-syn match   vimMapMod    contained     "\c<\(buffer\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" skipwhite contains=vimMapModKey,vimMapModErr nextgroup=@vimMapGroup
+syn match   vimMap     "\<map!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs
+syn keyword vimMap     cm[ap] cno[remap] im[ap] ino[remap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] vm[ap] vn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn match   vimMapLhs    contained     "\S\+"  contains=vimNotation,vimCtrlChar skipwhite nextgroup=vimMapRhs
+syn match   vimMapBang   contained     "!"     skipwhite nextgroup=vimMapMod,vimMapLhs
+syn match   vimMapMod    contained     "\c<\(buffer\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
+syn match   vimMapRhs    contained  ".*" contains=vimNotation,vimCtrlChar skipnl nextgroup=vimMapRhsExtend
+syn match   vimMapRhsExtend contained "^\s*\\.*$" contains=vimContinue
 syn case ignore
 syn keyword vimMapModKey contained     buffer  leader  localleader     plug    script  sid     silent  unique
 syn case match
index 798262d1965df050855f1d8197c12cd161ec9e78..ec84844caf389779e55dc6b4d94184cdae5f16f5 100644 (file)
@@ -3502,6 +3502,7 @@ set_one_cmd_context(xp, buff)
        case CMD_tag:
        case CMD_stag:
        case CMD_ptag:
+       case CMD_ltag:
        case CMD_tselect:
        case CMD_stselect:
        case CMD_ptselect:
@@ -8801,6 +8802,16 @@ ex_tag_cmd(eap, name)
                  break;
     }
 
+    if (name[0] == 'l')
+    {
+#ifndef FEAT_QUICKFIX
+       ex_ni(eap);
+       return;
+#else
+       cmd = DT_LTAG;
+#endif
+    }
+
     do_tag(eap->arg, cmd, eap->addr_count > 0 ? (int)eap->line2 : 1,
                                                          eap->forceit, TRUE);
 }
index 868b649891d9bcc7bfbf2dbcc03486b8ccd185b3..2b0df67e2eace759b3f0c00a4dc28a2adcd09537 100644 (file)
@@ -6953,6 +6953,7 @@ static struct event_name
     {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
     {"RemoteReply",    EVENT_REMOTEREPLY},
     {"SessionLoadPost",        EVENT_SESSIONLOADPOST},
+    {"SpellFileMissing",EVENT_SPELLFILEMISSING},
     {"StdinReadPost",  EVENT_STDINREADPOST},
     {"StdinReadPre",   EVENT_STDINREADPRE},
     {"Syntax",         EVENT_SYNTAX},
@@ -8406,6 +8407,7 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
        if (event == EVENT_FILETYPE
                || event == EVENT_SYNTAX
                || event == EVENT_REMOTEREPLY
+               || event == EVENT_SPELLFILEMISSING
                || event == EVENT_QUICKFIXCMDPRE
                || event == EVENT_QUICKFIXCMDPOST)
            fname = vim_strsave(fname);
index b9f37271d6227910eb2f80e00d484965e84ae52f..8c82a7ea95133379a7fd67089bf31d032d0b8381 100644 (file)
@@ -2229,6 +2229,9 @@ spell_load_lang(lang)
     char_u     fname_enc[85];
     int                r;
     spelload_T sl;
+#ifdef FEAT_AUTOCMD
+    int                round;
+#endif
 
     /* Copy the language name to pass it to spell_load_cb() as a cookie.
      * It's truncated when an error is detected. */
@@ -2236,24 +2239,41 @@ spell_load_lang(lang)
     sl.sl_slang = NULL;
     sl.sl_nobreak = FALSE;
 
-    /*
-     * Find the first spell file for "lang" in 'runtimepath' and load it.
-     */
-    vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
-                                       "spell/%s.%s.spl", lang, spell_enc());
-    r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
-
-    if (r == FAIL && *sl.sl_lang != NUL)
+#ifdef FEAT_AUTOCMD
+    /* We may retry when no spell file is found for the language, an
+     * autocommand may load it then. */
+    for (round = 1; round <= 2; ++round)
+#endif
     {
-       /* Try loading the ASCII version. */
+       /*
+        * Find the first spell file for "lang" in 'runtimepath' and load it.
+        */
        vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
-                                                 "spell/%s.ascii.spl", lang);
+                                       "spell/%s.%s.spl", lang, spell_enc());
        r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+
+       if (r == FAIL && *sl.sl_lang != NUL)
+       {
+           /* Try loading the ASCII version. */
+           vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
+                                                 "spell/%s.ascii.spl", lang);
+           r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+
+#ifdef FEAT_AUTOCMD
+           if (r == FAIL && *sl.sl_lang != NUL && round == 1
+                   && apply_autocmds(EVENT_SPELLFILEMISSING, lang,
+                                             curbuf->b_fname, FALSE, curbuf))
+               continue;
+           break;
+#endif
+       }
     }
 
     if (r == FAIL)
+    {
        smsg((char_u *)_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
                                                     lang, spell_enc(), lang);
+    }
     else if (sl.sl_slang != NULL)
     {
        /* At least one file was loaded, now load ALL the additions. */
index a9d4d7555300f34958fabf4a7bddd0edba427d8c..ed2889e4bf72cefc92713ae41ddfd12e2f7616d6 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -122,6 +122,7 @@ static taggy_T ptag_entry = {NULL};
  * type == DT_SELECT:  ":tselect [tag]", select tag from a list of all matches
  * type == DT_JUMP:    ":tjump [tag]", jump to tag or select tag from a list
  * type == DT_CSCOPE:  use cscope to find the tag
+ * type == DT_LTAG:    use location list for displaying tag matches
  * type == DT_FREE:    free cached matches
  *
  * for cscope, returns TRUE if we jumped to tag or aborted, FALSE otherwise
@@ -215,6 +216,9 @@ do_tag(tag, type, count, forceit, verbose)
 
        /* new pattern, add to the tag stack */
        if (*tag && (type == DT_TAG || type == DT_SELECT || type == DT_JUMP
+#ifdef FEAT_QUICKFIX
+                   || type == DT_LTAG
+#endif
 #ifdef FEAT_CSCOPE
                    || type == DT_CSCOPE
 #endif
@@ -409,6 +413,9 @@ do_tag(tag, type, count, forceit, verbose)
                switch (type)
                {
                    case DT_FIRST: cur_match = count - 1; break;
+#ifdef FEAT_QUICKFIX
+                   case DT_LTAG: cur_match = 0; break;
+#endif
                    case DT_SELECT:
                    case DT_JUMP:
 #ifdef FEAT_CSCOPE
@@ -748,6 +755,148 @@ do_tag(tag, type, count, forceit, verbose)
                }
                ask_for_selection = TRUE;
            }
+#if defined(FEAT_QUICKFIX) && defined(FEAT_EVAL)
+           else
+           if (type == DT_LTAG)
+           {
+               list_T  *list;
+               char_u  tag_name[128 + 1];
+               char_u  fname[MAXPATHL + 1];
+               char_u  cmd[CMDBUFFSIZE + 1];
+
+               /*
+                * Add the matching tags to the location list for the current
+                * window.
+                */
+
+               list = list_alloc();
+               if (list == NULL)
+                   goto end_do_tag;
+
+               for (i = 0; i < num_matches; ++i)
+               {
+                   int     len, cmd_len;
+                   long    lnum;
+                   dict_T  *dict;
+
+                   parse_match(matches[i], &tagp);
+
+                   /* Save the tag name */
+                   len = tagp.tagname_end - tagp.tagname;
+                   if (len > 128)
+                       len = 128;
+                   vim_strncpy(tag_name, tagp.tagname, len);
+                   tag_name[len] = NUL;
+
+                   /* Save the tag file name */
+                   p = tag_full_fname(&tagp);
+                   if (p == NULL)
+                       continue;
+                   STRCPY(fname, p);
+                   vim_free(p);
+
+                   /*
+                    * Get the line number or the search pattern used to locate
+                    * the tag.
+                    */
+                   lnum = 0;
+                   if (isdigit(*tagp.command))
+                       /* Line number is used to locate the tag */
+                       lnum = atol((char *)tagp.command);
+                   else
+                   {
+                       char_u *cmd_start, *cmd_end;
+
+                       /* Search pattern is used to locate the tag */
+
+                       /* Locate the end of the command */
+                       cmd_start = tagp.command;
+                       cmd_end = tagp.command_end;
+                       if (cmd_end == NULL)
+                       {
+                           for (p = tagp.command;
+                                *p && *p != '\r' && *p != '\n'; ++p)
+                               ;
+                           cmd_end = p;
+                       }
+                       /*
+                        * Now, cmd_end points to the character after the
+                        * command. Adjust it to point to the last
+                        * character of the command.
+                        */
+                       cmd_end--;
+
+                       /*
+                        * Skip the '/' and '?' characters at the
+                        * beginning and end of the search pattern.
+                        */
+                       if (*cmd_start == '/' || *cmd_start == '?')
+                           cmd_start++;
+
+                       if (*cmd_end == '/' || *cmd_end == '?')
+                           cmd_end--;
+
+                       len = 0;
+                       cmd[0] = NUL;
+
+                       /*
+                        * If "^" is present in the tag search pattern, then
+                        * copy it first.
+                        */
+                       if (*cmd_start == '^')
+                       {
+                           STRCPY(cmd, "^");
+                           cmd_start++;
+                           len++;
+                       }
+
+                       /*
+                        * Precede the tag pattern with \V to make it very
+                        * nomagic.
+                        */
+                       STRCAT(cmd, "\\V");
+                       len += 2;
+
+                       cmd_len = cmd_end - cmd_start + 1;
+                       if (cmd_len > (CMDBUFFSIZE - 5))
+                           cmd_len = CMDBUFFSIZE - 5;
+                       STRNCAT(cmd, cmd_start, cmd_len);
+                       len += cmd_len;
+
+                       if (cmd[len - 1] == '$')
+                       {
+                           /* 
+                            * Replace '$' at the end of the search pattern
+                            * with '\$'
+                            */
+                           cmd[len - 1] = '\\';
+                           cmd[len] = '$';
+                           len++;
+                       }
+
+                       cmd[len] = NUL;
+                   }
+
+                   if ((dict = dict_alloc()) == NULL)
+                       continue;
+                   if (list_append_dict(list, dict) == FAIL)
+                   {
+                       vim_free(dict);
+                       continue;
+                   }
+
+                   dict_add_nr_str(dict, "text", 0L, tag_name);
+                   dict_add_nr_str(dict, "filename", 0L, fname);
+                   dict_add_nr_str(dict, "lnum", lnum, NULL);
+                   if (lnum == 0)
+                       dict_add_nr_str(dict, "pattern", 0L, cmd);
+               }
+
+               set_errorlist(curwin, list, ' ');
+
+               list_free(list);
+           }
+#endif
 
            if (ask_for_selection == TRUE)
            {
index bc0b334ed2c0eb40f46f71c8674336c336e525b9..7b7953273965f27d74f6c2a98fd899b9ba347c24 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -945,6 +945,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define DT_HELP                8       /* like DT_TAG, but no wildcards */
 #define DT_JUMP                9       /* jump to new tag or selection from list */
 #define DT_CSCOPE      10      /* cscope find command (like tjump) */
+#define DT_LTAG                11      /* tag using location list */
 #define DT_FREE                99      /* free cached matches */
 
 /*
@@ -1104,6 +1105,7 @@ enum auto_event
     EVENT_FUNCUNDEFINED,       /* if calling a function which doesn't exist */
     EVENT_REMOTEREPLY,         /* upon string reception from a remote vim */
     EVENT_SWAPEXISTS,          /* found existing swap file */
+    EVENT_SPELLFILEMISSING,    /* spell file missing */
     NUM_EVENTS                 /* MUST be the last one */
 };