changeset 788:b5aed52a4881

updated for version 7.0230
author vimboss
date Mon, 20 Mar 2006 21:47:49 +0000
parents 1a44839049ae
children b29b006d52d2
files runtime/doc/Makefile runtime/doc/gui.txt runtime/doc/index.txt runtime/doc/map.txt runtime/doc/netbeans.txt runtime/doc/visual.txt runtime/syntax/vim.vim src/buffer.c src/ex_docmd.c src/fileio.c src/getchar.c src/gui.c src/vim.h src/window.c
diffstat 14 files changed, 230 insertions(+), 98 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -161,7 +161,6 @@ HTMLS = \
 	gui_x11.html \
 	hangulin.html \
 	hebrew.html \
-	help.html \
 	howto.html \
 	if_cscop.html \
 	if_mzsch.html \
@@ -173,6 +172,7 @@ HTMLS = \
 	if_tcl.html \
 	indent.html \
 	index.html \
+	vimindex.html \
 	insert.html \
 	intro.html \
 	map.html \
@@ -327,6 +327,14 @@ noerrors:
 .txt.html:
 	$(AWK) -f makehtml.awk $< >$@
 
+# index.html is the starting point for HTML, but for the help files it is
+# help.txt.  Therefore use vimindex.html for index.txt.
+index.html: help.txt
+	$(AWK) -f makehtml.awk help.txt >index.html
+
+vimindex.html: index.txt
+	$(AWK) -f makehtml.awk index.txt >vimindex.html
+
 tags.ref tags.html: tags
 	$(AWK) -f maketags.awk tags >tags.html
 
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.0aa.  Last change: 2006 Feb 27
+*gui.txt*       For Vim version 7.0aa.  Last change: 2006 Mar 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -499,6 +499,8 @@ 5.2 Creating New Menus					*creating-men
 				*:nme* *:nmenu* *:nnoreme* *:nnoremenu*
 				*:ome* *:omenu* *:onoreme* *:onoremenu*
 				*:vme* *:vmenu* *:vnoreme* *:vnoremenu*
+				*:xme* *:xmenu* *:xnoreme* *:xnoremenu*
+				*:sme* *:smenu* *:snoreme* *:snoremenu*
 				*:ime* *:imenu* *:inoreme* *:inoremenu*
 				*:cme* *:cmenu* *:cnoreme* *:cnoremenu*
 				*E330* *E327* *E331* *E336* *E333*
@@ -787,6 +789,8 @@ 5.5 Deleting Menus					*delete-menus*
 						*:nunme* *:nunmenu*
 						*:ounme* *:ounmenu*
 						*:vunme* *:vunmenu*
+						*:xunme* *:xunmenu*
+						*:sunme* *:sunmenu*
 						*:iunme* *:iunmenu*
 						*:cunme* *:cunmenu*
 To delete a menu item or a whole submenu, use the unmenu commands, which are
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 7.0aa.  Last change: 2006 Mar 16
+*index.txt*     For Vim version 7.0aa.  Last change: 2006 Mar 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1413,10 +1413,15 @@ The commands are sorted on the non-optio
 |:slast|	:sla[st]	split window and go to last file in the
 				argument list
 |:smagic|	:sm[agic]	:substitute with 'magic'
+|:smap|		:sma[p]		like ":map" but for Select mode
+|:smapclear|	:smapc[lear]	remove all mappings for Select mode
+|:smenu|	:sme[nu]	add menu for Select mode
 |:snext|	:sn[ext]	split window and go to next file in the
 				argument list
 |:sniff|	:sni[ff]	send request to sniff
 |:snomagic|	:sno[magic]	:substitute with 'nomagic'
+|:snoremap|	:snor[emap]	like ":noremap" but for Select mode
+|:snoremenu|	:snoreme[nu]	like ":noremenu" but for Select mode
 |:sort|		:sor[t]		sort lines
 |:source|	:so[urce]	read Vim or Ex commands from a file
 |:spelldump|	:spelld[ump]	split window and fill with all correct words
@@ -1439,6 +1444,8 @@ The commands are sorted on the non-optio
 |:stjump|	:stj[ump]	do ":tjump" and split window
 |:stselect|	:sts[elect]	do ":tselect" and split window
 |:sunhide|	:sun[hide]	same as ":unhide"
+|:sunmap|	:sunm[ap]	like ":unmap" but for Select mode
+|:sunmenu|	:sunme[nu]	remove menu for Select mode
 |:suspend|	:sus[pend]	same as ":stop"
 |:sview|	:sv[iew]	split window and edit file read-only
 |:swapname|	:sw[apname]	show the name of the current swap file
@@ -1500,15 +1507,15 @@ The commands are sorted on the non-optio
 |:visual|	:vi[sual]	same as ":edit", but turns off "Ex" mode
 |:viusage|	:viu[sage]	overview of Normal mode commands
 |:view|		:vie[w]		edit a file read-only
-|:vmap|		:vm[ap]		like ":map" but for Visual mode
-|:vmapclear|	:vmapc[lear]	remove all mappings for Visual mode
-|:vmenu|	:vme[nu]	add menu for Visual mode
-|:vnoremap|	:vn[oremap]	like ":noremap" but for Visual mode
+|:vmap|		:vm[ap]		like ":map" but for Visual+Select mode
+|:vmapclear|	:vmapc[lear]	remove all mappings for Visual+Select mode
+|:vmenu|	:vme[nu]	add menu for Visual+Select mode
 |:vnew|		:vne[w]		create a new empty window, vertically split
-|:vnoremenu|	:vnoreme[nu]	like ":noremenu" but for Visual mode
+|:vnoremap|	:vn[oremap]	like ":noremap" but for Visual+Select mode
+|:vnoremenu|	:vnoreme[nu]	like ":noremenu" but for Visual+Select mode
 |:vsplit|	:vs[plit]	split current window vertically
-|:vunmap|	:vu[nmap]	like ":unmap" but for Visual mode
-|:vunmenu|	:vunme[nu]	remove menu for Visual mode
+|:vunmap|	:vu[nmap]	like ":unmap" but for Visual+Select mode
+|:vunmenu|	:vunme[nu]	remove menu for Visual+Select mode
 |:windo|	:windo		execute command in each window
 |:write|	:w[rite]	write to a file
 |:wNext|	:wN[ext]	write to a file and go to previous file in
@@ -1528,8 +1535,16 @@ The commands are sorted on the non-optio
 |:wviminfo|	:wv[iminfo]	write to viminfo file
 |:xit|		:x[it]		write if buffer changed and quit window or Vim
 |:xall|		:xa[ll]		same as ":wqall"
+|:xmapclear|	:xmapc[lear]	remove all mappings for Visual mode
+|:xmap|		:xm[ap]		like ":map" but for Visual mode
+|:xmenu|	:xme[nu]	add menu for Visual mode
+|:xnoremap|	:xn[oremap]	like ":noremap" but for Visual mode
+|:xnoremenu|	:xnoreme[nu]	like ":noremenu" but for Visual mode
+|:xunmap|	:xu[nmap]	like ":unmap" but for Visual mode
+|:xunmenu|	:xunme[nu]	remove menu for Visual mode
 |:yank|		:y[ank]		yank lines into a register
 |:z|		:z		print some lines
 |:~|		:~		repeat last ":substitute"
 
+
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.0aa.  Last change: 2006 Mar 11
+*map.txt*       For Vim version 7.0aa.  Last change: 2006 Mar 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -48,6 +48,8 @@ modes.
 :map	{lhs} {rhs}		|mapmode-nvo|		*:map*
 :nm[ap]	{lhs} {rhs}		|mapmode-n|		*:nm* *:nmap*
 :vm[ap]	{lhs} {rhs}		|mapmode-v|		*:vm* *:vmap*
+:xm[ap]	{lhs} {rhs}		|mapmode-x|		*:xm* *:xmap*
+:smap	{lhs} {rhs}		|mapmode-s|		      *:smap*
 :om[ap]	{lhs} {rhs}		|mapmode-o|		*:om* *:omap*
 :map!	{lhs} {rhs}		|mapmode-ic|		*:map!*
 :im[ap]	{lhs} {rhs}		|mapmode-i|		*:im* *:imap*
@@ -62,6 +64,8 @@ modes.
 :no[remap]  {lhs} {rhs}		|mapmode-nvo|		*:no*  *:noremap*
 :nn[oremap] {lhs} {rhs}		|mapmode-n|		*:nn*  *:nnoremap*
 :vn[oremap] {lhs} {rhs}		|mapmode-v|		*:vn*  *:vnoremap*
+:xn[oremap] {lhs} {rhs}		|mapmode-x|		*:xn*  *:xnoremap*
+:snor[emap] {lhs} {rhs}		|mapmode-s|		*:snor* *:snoremap*
 :ono[remap] {lhs} {rhs}		|mapmode-o|		*:ono* *:onoremap*
 :no[remap]! {lhs} {rhs}		|mapmode-ic|		*:no!* *:noremap!*
 :ino[remap] {lhs} {rhs}		|mapmode-i|		*:ino* *:inoremap*
@@ -76,6 +80,8 @@ modes.
 :unm[ap]  {lhs}			|mapmode-nvo|		*:unm*  *:unmap*
 :nun[map] {lhs}			|mapmode-n|		*:nun*  *:nunmap*
 :vu[nmap] {lhs}			|mapmode-v|		*:vu*   *:vunmap*
+:xu[nmap] {lhs}			|mapmode-x|		*:xu*   *:xunmap*
+:sunm[ap] {lhs}			|mapmode-s|		*:sunm* *:sunmap*
 :ou[nmap] {lhs}			|mapmode-o|		*:ou*   *:ounmap*
 :unm[ap]! {lhs}			|mapmode-ic|		*:unm!* *:unmap!*
 :iu[nmap] {lhs}			|mapmode-i|		*:iu*   *:iunmap*
@@ -92,6 +98,8 @@ modes.
 :mapc[lear]			|mapmode-nvo|		*:mapc*   *:mapclear*
 :nmapc[lear]			|mapmode-n|		*:nmapc*  *:nmapclear*
 :vmapc[lear]			|mapmode-v|		*:vmapc*  *:vmapclear*
+:xmapc[lear]			|mapmode-x|		*:xmapc*  *:xmapclear*
+:smapc[lear]			|mapmode-s|		*:smapc*  *:smapclear*
 :omapc[lear]			|mapmode-o|		*:omapc*  *:omapclear*
 :mapc[lear]!			|mapmode-ic|		*:mapc!*  *:mapclear!*
 :imapc[lear]			|mapmode-i|		*:imapc*  *:imapclear*
@@ -104,6 +112,8 @@ modes.
 :map				|mapmode-nvo|
 :nm[ap]				|mapmode-n|
 :vm[ap]				|mapmode-v|
+:xm[ap]				|mapmode-x|
+:sm[ap]				|mapmode-s|
 :om[ap]				|mapmode-o|
 :map!				|mapmode-ic|
 :im[ap]				|mapmode-i|
@@ -116,6 +126,8 @@ modes.
 :map    {lhs}			|mapmode-nvo|		*:map_l*
 :nm[ap] {lhs}			|mapmode-n|		*:nmap_l*
 :vm[ap] {lhs}			|mapmode-v|		*:vmap_l*
+:xm[ap] {lhs}			|mapmode-x|		*:xmap_l*
+:sm[ap] {lhs}			|mapmode-s|		*:smap_l*
 :om[ap] {lhs}			|mapmode-o|		*:omap_l*
 :map!   {lhs}			|mapmode-ic|		*:map_l!*
 :im[ap] {lhs}			|mapmode-i|		*:imap_l*
@@ -238,9 +250,6 @@ There are five sets of mappings
 - For Insert mode.  These are also used in Replace mode.
 - For Command-line mode: When entering a ":" or "/" command.
 
-There are no separate mappings for Select mode.  The same as for Visual mode
-are used |Select-mode-mapping|.
-
 Special case: While typing a count for a command in Normal mode, mapping zero
 is disabled.  This makes it possible to map zero without making it impossible
 to type a count with a zero.
@@ -250,13 +259,27 @@ Overview of which map command works in w
 
 			*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o*
     commands:				      modes: ~
-					  Normal     Visual  Operator-pending ~
-:map   :noremap   :unmap   :mapclear	    yes	       yes	  yes
-:nmap  :nnoremap  :nunmap  :nmapclear	    yes		-	   -
-:vmap  :vnoremap  :vunmap  :vmapclear	     -	       yes	   -
-:omap  :onoremap  :ounmap  :omapclear	     -		-	  yes
+                                       Normal  Visual+Select  Operator-pending ~
+:map   :noremap   :unmap   :mapclear     yes        yes            yes
+:nmap  :nnoremap  :nunmap  :nmapclear    yes         -              -
+:vmap  :vnoremap  :vunmap  :vmapclear     -         yes             -
+:omap  :onoremap  :ounmap  :omapclear     -          -             yes
+
+                                                *mapmode-x* *mapmode-s*
+Some commands work both in Visual and Select mode, some in only one.  Note
+that quite often "Visual" is mentioned where both Visual and Select mode
+apply. |Select-mode-mapping|
+
+    commands:                                 modes: ~
+                                          Visual    Select ~
+:vmap  :vnoremap  :vunmap  :vmapclear       yes      yes
+:xmap  :xnoremap  :xunmap  :xmapclear       yes       -
+:smap  :snoremap  :sunmap  :smapclear       -        yes
 
 			*mapmode-ic* *mapmode-i* *mapmode-c* *mapmode-l*
+Some commands work both in Insert mode and Command-line mode, some not:
+
+    commands:                                 modes: ~
 					  Insert  Command-line	Lang-Arg ~
 :map!  :noremap!  :unmap!  :mapclear!	    yes	       yes	   -
 :imap  :inoremap  :iunmap  :imapclear	    yes		-	   -
@@ -1218,8 +1241,9 @@ Replacement text
 The replacement text for a user defined command is scanned for special escape
 sequences, using <...> notation.  Escape sequences are replaced with values
 from the entered command line, and all other text is copied unchanged.  The
-resulting string is executed as an Ex command.  If the initial < of an escape
-sequence is preceded by a backslash, the sequence is copied unchanged.
+resulting string is executed as an Ex command.  To avoid the replacement use
+<lt> in plade of the initial <.  Thus to include "<bang>" literally use
+"<lt>bang>".
 
 The valid escape sequences are
 
--- a/runtime/doc/netbeans.txt
+++ b/runtime/doc/netbeans.txt
@@ -194,7 +194,7 @@ Partial writes disallowed for NetBeans b
 							*E658*
 NetBeans connection lost for this buffer
 		NetBeans has become confused about the state of this file.
-		Rather than risc data corruption, NetBeans has severed the
+		Rather than risk data corruption, NetBeans has severed the
 		connection for this file.  Vim will take over responsibility
 		for saving changes to this file and NetBeans will no longer
 		know of these changes.
--- a/runtime/doc/visual.txt
+++ b/runtime/doc/visual.txt
@@ -1,4 +1,4 @@
-*visual.txt*    For Vim version 7.0aa.  Last change: 2006 Jan 22
+*visual.txt*    For Vim version 7.0aa.  Last change: 2006 Mar 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -460,9 +460,10 @@ example, when a whole line is deleted, i
 
 Mappings and menus in Select mode.			*Select-mode-mapping*
 
-In Select mode the mappings and menus of Visual mode are used.  Before it is
-executed, Vim automatically switches to Visual mode, so that the same
-behavior as in Visual mode is effective.
+When mappings and menus are defined with the |:vmap| or |:vmenu| command they
+work both in Visual mode and in Select mode.  When these are used in Select
+mode Vim automatically switches to Visual mode, so that the same behavior as
+in Visual mode is effective.  If you don't want this use |:xmap| or |:smap|.
 
 After the mapping or menu finishes, the selection is enabled again and Select
 mode entered, unless the selected area was deleted, another buffer became
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 7.0 script
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	March 16, 2006
-" Version:	7.0-33
+" Last Change:	March 20, 2006
+" Version:	7.0-34
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -16,17 +16,17 @@ syn keyword vimTodo contained	COMBAK	NOT
 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] caddb[uffer] 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] earlier 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] laddb[uffer] lad[dexpr] laddf[ile] lan[guage] la[st] later lb[uffer] lc[d] lch[dir] lcl[ose] le[ft] lefta[bove] lex[pr] lf[ile] lfir[st] lg[etfile] lgr[ep] lgrepa[dd] lh[elpgrep] l[ist] ll lla[st] lli[st] lmak[e] 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 lt[ag] lu[nmap] lv[imgrep] lvimgrepa[dd] 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] spelli[nfo] spellr[epall] spellu[ndo] 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 tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabl[ast] tabmove tabnew tabn[ext] tabN[ext] tabo[nly] tabp[revious] tabr[ewind] tabs 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] undoj[oin] 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] caddb[uffer] 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] earlier 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] laddb[uffer] lad[dexpr] laddf[ile] lan[guage] la[st] later lb[uffer] lc[d] lch[dir] lcl[ose] le[ft] lefta[bove] lex[pr] lf[ile] lfir[st] lg[etfile] lgr[ep] lgrepa[dd] lh[elpgrep] l[ist] ll lla[st] lli[st] lmak[e] 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 lt[ag] lu[nmap] lv[imgrep] lvimgrepa[dd] 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] spelli[nfo] spellr[epall] spellu[ndo] 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 tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabl[ast] tabmove tabnew tabn[ext] tabN[ext] tabo[nly] tabp[revious] tabr[ewind] tabs 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] undoj[oin] undol[ist] 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 cuc cul cursorcolumn cursorline 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 fex 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 formatexpr formatlistpat formatoptions formatprg fp fs fsync ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg gtl guicursor guifont guifontset guifontwide guiheadroom guioptions guipty guitablabel 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 maxcombine maxfuncdepth maxmapdepth maxmem maxmempattern maxmemtot mco 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 ph pheader pi pm pmbcs pmbfn popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printmbcharset printmbfont printoptions prompt pt pumheight 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 showtabline 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 stal startofline statusline stl stmp sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn synmaxcol syntax ta tabline tabpagemax tabstop tag tagbsearch taglength tagrelative tags tagstack tal 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 tpm 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 cuc cul cursorcolumn cursorline 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 fex 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 formatexpr formatlistpat formatoptions formatprg fp fs fsync ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg gtl guicursor guifont guifontset guifontwide guiheadroom guioptions guipty guitablabel 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 maxcombine maxfuncdepth maxmapdepth maxmem maxmempattern maxmemtot mco 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 ph pheader pi pm pmbcs pmbfn popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printmbcharset printmbfont printoptions prompt pt pumheight 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 showtabline 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 stal startofline statusline stl stmp sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn synmaxcol syntax ta tabline tabpagemax tabstop tag tagbsearch taglength tagrelative tags tagstack tal 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 tpm 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 wfw wh whichwrap wi wig wildchar wildcharm wildignore wildmenu wildmode wildoptions wim winaltkeys window winfixheight winfixwidth 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 nocuc nocul nocursorcolumn nocursorline 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 
+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 nocuc nocul nocursorcolumn nocursorline 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 nowfw nowildmenu nowinfixheight nowinfixwidth nowiv nowmnu nowrap nowrapscan nowrite nowriteany nowritebackup nows 
 
 " vimOptions: These are the invertible variants {{{2
-syn keyword vimOption contained	invacd invai invakm invallowrevins invaltkeymap invanti invantialias invar invarab invarabic invarabicshape invari invarshape invautochdir invautoindent invautoread invautowrite invautowriteall invaw invawa invbackup invballooneval invbeval invbin invbinary invbiosk invbioskey invbk invbl invbomb invbuflisted invcf invci invcin invcindent invcompatible invconfirm invconsk invconskey invcopyindent invcp invcscopetag invcscopeverbose invcst invcsverb invcuc invcul invcursorcolumn invcursorline invdeco invdelcombine invdg invdiff invdigraph invdisable invea inveb inved invedcompatible invek invendofline inveol invequalalways inverrorbells invesckeys invet invex invexpandtab invexrc invfen invfk invfkmap invfoldenable invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkmapp invhkp invhls invhlsearch invic invicon invignorecase invim invimc invimcmdline invimd invincsearch invinf invinfercase invinsertmode invis invjoinspaces invjs invlazyredraw invlbr invlinebreak invlisp invlist invloadplugins invlpl invlz invma invmagic invmh invml invmod invmodeline invmodifiable invmodified invmore invmousef invmousefocus invmousehide invnu invnumber invpaste invpi invpreserveindent invpreviewwindow invprompt invpvw invreadonly invremap invrestorescreen invrevins invri invrightleft invrightleftcmd invrl invrlc invro invrs invru invruler invsb invsc invscb invscrollbind invscs invsecure invsft invshellslash invshelltemp invshiftround invshortname invshowcmd invshowfulltag invshowmatch invshowmode invsi invsm invsmartcase invsmartindent invsmarttab invsmd invsn invsol invspell invsplitbelow invsplitright invspr invsr invssl invsta invstartofline invstmp invswapfile invswf invta invtagbsearch invtagrelative invtagstack invtbi invtbidi invtbs invtermbidi invterse invtextauto invtextmode invtf invtgst invtildeop invtimeout invtitle invto invtop invtr invttimeout invttybuiltin invttyfast invtx invvb invvisualbell invwa invwarn invwb invweirdinvert invwfh invwildmenu invwinfixheight invwiv invwmnu invwrap invwrapscan invwrite invwriteany invwritebackup invws 
+syn keyword vimOption contained	invacd invai invakm invallowrevins invaltkeymap invanti invantialias invar invarab invarabic invarabicshape invari invarshape invautochdir invautoindent invautoread invautowrite invautowriteall invaw invawa invbackup invballooneval invbeval invbin invbinary invbiosk invbioskey invbk invbl invbomb invbuflisted invcf invci invcin invcindent invcompatible invconfirm invconsk invconskey invcopyindent invcp invcscopetag invcscopeverbose invcst invcsverb invcuc invcul invcursorcolumn invcursorline invdeco invdelcombine invdg invdiff invdigraph invdisable invea inveb inved invedcompatible invek invendofline inveol invequalalways inverrorbells invesckeys invet invex invexpandtab invexrc invfen invfk invfkmap invfoldenable invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkmapp invhkp invhls invhlsearch invic invicon invignorecase invim invimc invimcmdline invimd invincsearch invinf invinfercase invinsertmode invis invjoinspaces invjs invlazyredraw invlbr invlinebreak invlisp invlist invloadplugins invlpl invlz invma invmagic invmh invml invmod invmodeline invmodifiable invmodified invmore invmousef invmousefocus invmousehide invnu invnumber invpaste invpi invpreserveindent invpreviewwindow invprompt invpvw invreadonly invremap invrestorescreen invrevins invri invrightleft invrightleftcmd invrl invrlc invro invrs invru invruler invsb invsc invscb invscrollbind invscs invsecure invsft invshellslash invshelltemp invshiftround invshortname invshowcmd invshowfulltag invshowmatch invshowmode invsi invsm invsmartcase invsmartindent invsmarttab invsmd invsn invsol invspell invsplitbelow invsplitright invspr invsr invssl invsta invstartofline invstmp invswapfile invswf invta invtagbsearch invtagrelative invtagstack invtbi invtbidi invtbs invtermbidi invterse invtextauto invtextmode invtf invtgst invtildeop invtimeout invtitle invto invtop invtr invttimeout invttybuiltin invttyfast invtx invvb invvisualbell invwa invwarn invwb invweirdinvert invwfh invwfw invwildmenu invwinfixheight invwinfixwidth invwiv invwmnu invwrap invwrapscan invwrite invwriteany invwritebackup invws 
 
 " termcap codes (which can also be set) {{{2
 syn keyword vimOption contained	t_AB t_AF t_al t_AL t_bc t_cd t_ce t_Ce t_cl t_cm t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI    end insert mode (block cursor shape)            *t_EI* *'t_EI'* t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI    start insert mode (bar cursor shape)            *t_SI* *'t_SI'* t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR 
@@ -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 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 getpos 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 pumvisible range readfile remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setpos setqflist setreg setwinvar simplify sort soundfold spellbadword spellsuggest split strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tempname tolower toupper tr type values virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile 
+syn keyword vimFuncName contained	add append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call changenr char2nr cindent col complete 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 getpos 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 pumvisible range readfile remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setpos setqflist setreg setwinvar simplify sort soundfold spellbadword spellsuggest split str2nr strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tempname tolower toupper tr type values virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile 
 
 "--- syntax above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1689,6 +1689,9 @@ free_buf_options(buf, free_p_ff)
     clear_string_option(&buf->b_p_inde);
     clear_string_option(&buf->b_p_indk);
 #endif
+#if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+    clear_string_option(&buf->b_p_bexpr);
+#endif
 #if defined(FEAT_EVAL)
     clear_string_option(&buf->b_p_fex);
 #endif
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -900,7 +900,7 @@ do_cmdline(cmdline, getline, cookie, fla
 	    if (getline_is_func)
 	    {
 # ifdef FEAT_PROFILE
-		if (do_profiling)
+		if (do_profiling == PROF_YES)
 		    func_line_end(real_cookie);
 # endif
 		if (func_has_ended(real_cookie))
@@ -910,7 +910,7 @@ do_cmdline(cmdline, getline, cookie, fla
 		}
 	    }
 #ifdef FEAT_PROFILE
-	    else if (do_profiling
+	    else if (do_profiling == PROF_YES
 			     && getline_equal(getline, cookie, getsourceline))
 		script_line_end();
 #endif
@@ -947,7 +947,7 @@ do_cmdline(cmdline, getline, cookie, fla
 		*dbg_tick = debug_tick;
 	    }
 # ifdef FEAT_PROFILE
-	    if (do_profiling)
+	    if (do_profiling == PROF_YES)
 	    {
 		if (getline_is_func)
 		    func_line_start(real_cookie);
@@ -1912,7 +1912,7 @@ do_one_cmd(cmdlinep, sourcing,
 #ifdef FEAT_EVAL
 # ifdef FEAT_PROFILE
     /* Count this line for profiling if ea.skip is FALSE. */
-    if (do_profiling && !ea.skip)
+    if (do_profiling == PROF_YES && !ea.skip)
     {
 	if (getline_equal(getline, cookie, get_func_line))
 	    func_line_exec(getline_cookie(getline, cookie));
@@ -5633,21 +5633,22 @@ uc_check_code(code, len, buf, cmd, eap, 
 	l -= 2;
     }
 
-    if (l < 1)
+    ++l;
+    if (l <= 1)
 	type = ct_NONE;
-    else if (STRNICMP(p, "args", l) == 0)
+    else if (STRNICMP(p, "args>", l) == 0)
 	type = ct_ARGS;
-    else if (STRNICMP(p, "bang", l) == 0)
+    else if (STRNICMP(p, "bang>", l) == 0)
 	type = ct_BANG;
-    else if (STRNICMP(p, "count", l) == 0)
+    else if (STRNICMP(p, "count>", l) == 0)
 	type = ct_COUNT;
-    else if (STRNICMP(p, "line1", l) == 0)
+    else if (STRNICMP(p, "line1>", l) == 0)
 	type = ct_LINE1;
-    else if (STRNICMP(p, "line2", l) == 0)
+    else if (STRNICMP(p, "line2>", l) == 0)
 	type = ct_LINE2;
-    else if (STRNICMP(p, "lt", l) == 0)
+    else if (STRNICMP(p, "lt>", l) == 0)
 	type = ct_LT;
-    else if (STRNICMP(p, "register", l) == 0)
+    else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0)
 	type = ct_REGISTER;
 
     switch (type)
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -8518,7 +8518,7 @@ apply_autocmds_group(event, fname, fname
     save_current_SID = current_SID;
 
 # ifdef FEAT_PROFILE
-    if (do_profiling)
+    if (do_profiling == PROF_YES)
 	prof_child_enter(&wait_time); /* doesn't count for the caller itself */
 # endif
 
@@ -8614,7 +8614,7 @@ apply_autocmds_group(event, fname, fname
     current_SID = save_current_SID;
     restore_funccal(save_funccalp);
 # ifdef FEAT_PROFILE
-    if (do_profiling)
+    if (do_profiling == PROF_YES)
 	prof_child_exit(&wait_time);
 # endif
 #endif
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -63,7 +63,7 @@ static int	block_redo = FALSE;
  * Returns a value between 0 and 255, index in maphash.
  * Put Normal/Visual mode mappings mostly separately from Insert/Cmdline mode.
  */
-#define MAP_HASH(mode, c1) (((mode) & (NORMAL + VISUAL + OP_PENDING)) ? (c1) : ((c1) ^ 0x80))
+#define MAP_HASH(mode, c1) (((mode) & (NORMAL + VISUAL + SELECTMODE + OP_PENDING)) ? (c1) : ((c1) ^ 0x80))
 
 /*
  * Each mapping is put in one of the 256 hash lists, to speed up finding it.
@@ -2236,12 +2236,13 @@ vgetorpeek(advance)
 				{
 # ifdef FEAT_VISUAL
 				    /*
-				     * In Select mode, a Visual mode menu is
-				     * used.  Switch to Visual mode
+				     * In Select mode and a Visual mode menu
+				     * is used:  Switch to Visual mode
 				     * temporarily.  Append K_SELECT to switch
 				     * back to Select mode.
 				     */
-				    if (VIsual_active && VIsual_select)
+				    if (VIsual_active && VIsual_select
+					    && (current_menu->modes & VISUAL))
 				    {
 					VIsual_select = FALSE;
 					(void)ins_typebuf(K_SELECT_STRING,
@@ -2297,11 +2298,12 @@ vgetorpeek(advance)
 
 #ifdef FEAT_VISUAL
 			/*
-			 * In Select mode, a Visual mode mapping is used.
+			 * In Select mode and a Visual mode mapping is used:
 			 * Switch to Visual mode temporarily.  Append K_SELECT
 			 * to switch back to Select mode.
 			 */
-			if (VIsual_active && VIsual_select)
+			if (VIsual_active && VIsual_select
+						     && (mp->m_mode & VISUAL))
 			{
 			    VIsual_select = FALSE;
 			    (void)ins_typebuf(K_SELECT_STRING, REMAP_NONE,
@@ -2926,13 +2928,15 @@ input_available()
  * arg is pointer to any arguments. Note: arg cannot be a read-only string,
  * it will be modified.
  *
- * for :map   mode is NORMAL + VISUAL + OP_PENDING
+ * for :map   mode is NORMAL + VISUAL + SELECTMODE + OP_PENDING
  * for :map!  mode is INSERT + CMDLINE
  * for :cmap  mode is CMDLINE
  * for :imap  mode is INSERT
  * for :lmap  mode is LANGMAP
  * for :nmap  mode is NORMAL
- * for :vmap  mode is VISUAL
+ * for :vmap  mode is VISUAL + SELECTMODE
+ * for :xmap  mode is VISUAL
+ * for :smap  mode is SELECTMODE
  * for :omap  mode is OP_PENDING
  *
  * for :abbr  mode is INSERT + CMDLINE
@@ -3524,7 +3528,11 @@ get_map_mode(cmdp, forceit)
     else if (modec == 'n' && *p != 'o')		    /* avoid :noremap */
 	mode = NORMAL;				/* :nmap */
     else if (modec == 'v')
-	mode = VISUAL;				/* :vmap */
+	mode = VISUAL + SELECTMODE;		/* :vmap */
+    else if (modec == 'x')
+	mode = VISUAL;				/* :xmap */
+    else if (modec == 's')
+	mode = SELECTMODE;			/* :smap */
     else if (modec == 'o')
 	mode = OP_PENDING;			/* :omap */
     else
@@ -3533,7 +3541,7 @@ get_map_mode(cmdp, forceit)
 	if (forceit)
 	    mode = INSERT + CMDLINE;		/* :map ! */
 	else
-	    mode = VISUAL + NORMAL + OP_PENDING;/* :map */
+	    mode = VISUAL + SELECTMODE + NORMAL + OP_PENDING;/* :map */
     }
 
     *cmdp = p;
@@ -3668,8 +3676,8 @@ showmap(mp, local)
 	msg_putchar('l');			/* :lmap */
     else if (mp->m_mode & CMDLINE)
 	msg_putchar('c');			/* :cmap */
-    else if ((mp->m_mode & (NORMAL + VISUAL + OP_PENDING))
-					      == NORMAL + VISUAL + OP_PENDING)
+    else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
+				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
 	msg_putchar(' ');			/* :map */
     else
     {
@@ -3684,11 +3692,24 @@ showmap(mp, local)
 	    msg_putchar('o');		/* :omap */
 	    ++len;
 	}
-	if (mp->m_mode & VISUAL)
+	if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
 	{
 	    msg_putchar('v');		/* :vmap */
 	    ++len;
 	}
+	else
+	{
+	    if (mp->m_mode & VISUAL)
+	    {
+		msg_putchar('x');		/* :xmap */
+		++len;
+	    }
+	    if (mp->m_mode & SELECTMODE)
+	    {
+		msg_putchar('s');		/* :smap */
+		++len;
+	    }
+	}
     }
     while (++len <= 3)
 	msg_putchar(' ');
@@ -3749,7 +3770,11 @@ map_to_exists(str, modechars, abbr)
     if (vim_strchr(modechars, 'n') != NULL)
 	mode |= NORMAL;
     if (vim_strchr(modechars, 'v') != NULL)
+	mode |= VISUAL + SELECTMODE;
+    if (vim_strchr(modechars, 'x') != NULL)
 	mode |= VISUAL;
+    if (vim_strchr(modechars, 's') != NULL)
+	mode |= SELECTMODE;
     if (vim_strchr(modechars, 'o') != NULL)
 	mode |= OP_PENDING;
     if (vim_strchr(modechars, 'i') != NULL)
@@ -3857,7 +3882,7 @@ set_context_in_map_cmd(xp, cmd, arg, for
 	{
 	    expand_mapmodes = INSERT + CMDLINE;
 	    if (!isabbrev)
-		expand_mapmodes += VISUAL + NORMAL + OP_PENDING;
+		expand_mapmodes += VISUAL + SELECTMODE + NORMAL + OP_PENDING;
 	}
 	expand_isabbrev = isabbrev;
 	xp->xp_context = EXPAND_MAPPINGS;
@@ -4310,22 +4335,28 @@ makemap(fd, buf)
 		    cmd = "map";
 		switch (mp->m_mode)
 		{
-		    case NORMAL + VISUAL + OP_PENDING:
+		    case NORMAL + VISUAL + SELECTMODE + OP_PENDING:
 			break;
 		    case NORMAL:
 			c1 = 'n';
 			break;
+		    case VISUAL + SELECTMODE:
+			c1 = 'v';
+			break;
 		    case VISUAL:
-			c1 = 'v';
+			c1 = 'x';
+			break;
+		    case SELECTMODE:
+			c1 = 's';
 			break;
 		    case OP_PENDING:
 			c1 = 'o';
 			break;
-		    case NORMAL + VISUAL:
+		    case NORMAL + VISUAL + SELECTMODE:
 			c1 = 'n';
 			c2 = 'v';
 			break;
-		    case VISUAL + OP_PENDING:
+		    case VISUAL + SELECTMODE + OP_PENDING:
 			c1 = 'v';
 			c2 = 'o';
 			break;
@@ -4697,6 +4728,9 @@ check_map(keys, mode, exact, ign_mod, ab
 #endif
 
 #if defined(MSDOS) || defined(MSWIN) || defined(OS2) || defined(MACOS)
+
+#define VIS_SEL	(VISUAL+SELECTMODE)	/* abbreviation */
+
 /*
  * Default mappings for some often used keys.
  */
@@ -4709,58 +4743,58 @@ static struct initmap
 #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
 	/* Use the Windows (CUA) keybindings. */
 # ifdef FEAT_GUI
-	{(char_u *)"<C-PageUp> H", NORMAL+VISUAL},
+	{(char_u *)"<C-PageUp> H", NORMAL+VIS_SEL},
 	{(char_u *)"<C-PageUp> <C-O>H",INSERT},
-	{(char_u *)"<C-PageDown> L$", NORMAL+VISUAL},
+	{(char_u *)"<C-PageDown> L$", NORMAL+VIS_SEL},
 	{(char_u *)"<C-PageDown> <C-O>L<C-O>$", INSERT},
 
 	/* paste, copy and cut */
 	{(char_u *)"<S-Insert> \"*P", NORMAL},
-	{(char_u *)"<S-Insert> \"-d\"*P", VISUAL},
+	{(char_u *)"<S-Insert> \"-d\"*P", VIS_SEL},
 	{(char_u *)"<S-Insert> <C-R><C-O>*", INSERT+CMDLINE},
-	{(char_u *)"<C-Insert> \"*y", VISUAL},
-	{(char_u *)"<S-Del> \"*d", VISUAL},
-	{(char_u *)"<C-Del> \"*d", VISUAL},
-	{(char_u *)"<C-X> \"*d", VISUAL},
+	{(char_u *)"<C-Insert> \"*y", VIS_SEL},
+	{(char_u *)"<S-Del> \"*d", VIS_SEL},
+	{(char_u *)"<C-Del> \"*d", VIS_SEL},
+	{(char_u *)"<C-X> \"*d", VIS_SEL},
 	/* Missing: CTRL-C (cancel) and CTRL-V (block selection) */
 # else
-	{(char_u *)"\316\204 H", NORMAL+VISUAL},    /* CTRL-PageUp is "H" */
+	{(char_u *)"\316\204 H", NORMAL+VIS_SEL},    /* CTRL-PageUp is "H" */
 	{(char_u *)"\316\204 \017H",INSERT},	    /* CTRL-PageUp is "^OH"*/
-	{(char_u *)"\316v L$", NORMAL+VISUAL},	    /* CTRL-PageDown is "L$" */
+	{(char_u *)"\316v L$", NORMAL+VIS_SEL},	    /* CTRL-PageDown is "L$" */
 	{(char_u *)"\316v \017L\017$", INSERT},	    /* CTRL-PageDown ="^OL^O$"*/
-	{(char_u *)"\316w <C-Home>", NORMAL+VISUAL},
+	{(char_u *)"\316w <C-Home>", NORMAL+VIS_SEL},
 	{(char_u *)"\316w <C-Home>", INSERT+CMDLINE},
-	{(char_u *)"\316u <C-End>", NORMAL+VISUAL},
+	{(char_u *)"\316u <C-End>", NORMAL+VIS_SEL},
 	{(char_u *)"\316u <C-End>", INSERT+CMDLINE},
 
 	/* paste, copy and cut */
 #  ifdef FEAT_CLIPBOARD
 #   ifdef DJGPP
 	{(char_u *)"\316\122 \"*P", NORMAL},	    /* SHIFT-Insert is "*P */
-	{(char_u *)"\316\122 \"-d\"*P", VISUAL},    /* SHIFT-Insert is "-d"*P */
+	{(char_u *)"\316\122 \"-d\"*P", VIS_SEL},    /* SHIFT-Insert is "-d"*P */
 	{(char_u *)"\316\122 \022\017*", INSERT},  /* SHIFT-Insert is ^R^O* */
-	{(char_u *)"\316\222 \"*y", VISUAL},	    /* CTRL-Insert is "*y */
+	{(char_u *)"\316\222 \"*y", VIS_SEL},	    /* CTRL-Insert is "*y */
 #    if 0 /* Shift-Del produces the same code as Del */
-	{(char_u *)"\316\123 \"*d", VISUAL},	    /* SHIFT-Del is "*d */
+	{(char_u *)"\316\123 \"*d", VIS_SEL},	    /* SHIFT-Del is "*d */
 #    endif
-	{(char_u *)"\316\223 \"*d", VISUAL},	    /* CTRL-Del is "*d */
-	{(char_u *)"\030 \"-d", VISUAL},	    /* CTRL-X is "-d */
+	{(char_u *)"\316\223 \"*d", VIS_SEL},	    /* CTRL-Del is "*d */
+	{(char_u *)"\030 \"-d", VIS_SEL},	    /* CTRL-X is "-d */
 #   else
 	{(char_u *)"\316\324 \"*P", NORMAL},	    /* SHIFT-Insert is "*P */
-	{(char_u *)"\316\324 \"-d\"*P", VISUAL},    /* SHIFT-Insert is "-d"*P */
+	{(char_u *)"\316\324 \"-d\"*P", VIS_SEL},    /* SHIFT-Insert is "-d"*P */
 	{(char_u *)"\316\324 \022\017*", INSERT},  /* SHIFT-Insert is ^R^O* */
-	{(char_u *)"\316\325 \"*y", VISUAL},	    /* CTRL-Insert is "*y */
-	{(char_u *)"\316\327 \"*d", VISUAL},	    /* SHIFT-Del is "*d */
-	{(char_u *)"\316\330 \"*d", VISUAL},	    /* CTRL-Del is "*d */
-	{(char_u *)"\030 \"-d", VISUAL},	    /* CTRL-X is "-d */
+	{(char_u *)"\316\325 \"*y", VIS_SEL},	    /* CTRL-Insert is "*y */
+	{(char_u *)"\316\327 \"*d", VIS_SEL},	    /* SHIFT-Del is "*d */
+	{(char_u *)"\316\330 \"*d", VIS_SEL},	    /* CTRL-Del is "*d */
+	{(char_u *)"\030 \"-d", VIS_SEL},	    /* CTRL-X is "-d */
 #   endif
 #  else
 	{(char_u *)"\316\324 P", NORMAL},	    /* SHIFT-Insert is P */
-	{(char_u *)"\316\324 \"-dP", VISUAL},	    /* SHIFT-Insert is "-dP */
+	{(char_u *)"\316\324 \"-dP", VIS_SEL},	    /* SHIFT-Insert is "-dP */
 	{(char_u *)"\316\324 \022\017\"", INSERT}, /* SHIFT-Insert is ^R^O" */
-	{(char_u *)"\316\325 y", VISUAL},	    /* CTRL-Insert is y */
-	{(char_u *)"\316\327 d", VISUAL},	    /* SHIFT-Del is d */
-	{(char_u *)"\316\330 d", VISUAL},	    /* CTRL-Del is d */
+	{(char_u *)"\316\325 y", VIS_SEL},	    /* CTRL-Insert is y */
+	{(char_u *)"\316\327 d", VIS_SEL},	    /* SHIFT-Del is d */
+	{(char_u *)"\316\330 d", VIS_SEL},	    /* CTRL-Del is d */
 #  endif
 # endif
 #endif
@@ -4769,13 +4803,15 @@ static struct initmap
 	/* Use the Standard MacOS binding. */
 	/* paste, copy and cut */
 	{(char_u *)"<D-v> \"*P", NORMAL},
-	{(char_u *)"<D-v> \"-d\"*P", VISUAL},
+	{(char_u *)"<D-v> \"-d\"*P", VIS_SEL},
 	{(char_u *)"<D-v> <C-R>*", INSERT+CMDLINE},
-	{(char_u *)"<D-c> \"*y", VISUAL},
-	{(char_u *)"<D-x> \"*d", VISUAL},
-	{(char_u *)"<Backspace> \"-d", VISUAL},
+	{(char_u *)"<D-c> \"*y", VIS_SEL},
+	{(char_u *)"<D-x> \"*d", VIS_SEL},
+	{(char_u *)"<Backspace> \"-d", VIS_SEL},
 #endif
 };
+
+# undef VIS_SEL
 #endif
 
 /*
--- a/src/gui.c
+++ b/src/gui.c
@@ -2802,6 +2802,7 @@ button_set:
 	case OP_PENDING:
 	case NORMAL:		checkfor = MOUSE_NORMAL;	break;
 	case VISUAL:		checkfor = MOUSE_VISUAL;	break;
+	case SELECTMODE:	checkfor = MOUSE_VISUAL;	break;
 	case REPLACE:
 	case REPLACE+LANGMAP:
 #ifdef FEAT_VREPLACE
@@ -3077,7 +3078,9 @@ gui_menu_cb(menu)
 }
 #endif
 
-static int	prev_which_scrollbars[3] = {-1, -1, -1};
+#ifndef FEAT_WINDOWS
+static int		    prev_which_scrollbars[3];
+#endif
 
 /*
  * Set which components are present.
@@ -3211,7 +3214,13 @@ gui_init_which_components(oldval)
 
 	for (i = 0; i < 3; i++)
 	{
-	    if (gui.which_scrollbars[i] != prev_which_scrollbars[i])
+	    if (gui.which_scrollbars[i] !=
+#ifdef FEAT_WINDOWS
+		    curtab->tp_prev_which_scrollbars[i]
+#else
+		    prev_which_scrollbars[i]
+#endif
+		    )
 	    {
 		if (i == SBAR_BOTTOM)
 		    gui_mch_enable_scrollbar(&gui.bottom_sbar,
@@ -3227,7 +3236,12 @@ gui_init_which_components(oldval)
 		if (gui.which_scrollbars[i])
 		    fix_size = TRUE;
 	    }
-	    prev_which_scrollbars[i] = gui.which_scrollbars[i];
+#ifdef FEAT_WINDOWS
+	    curtab->tp_prev_which_scrollbars[i]
+#else
+	    prev_which_scrollbars[i]
+#endif
+						= gui.which_scrollbars[i];
 	}
 
 #ifdef FEAT_MENU
@@ -3479,7 +3493,7 @@ gui_remove_scrollbars()
 		gui_do_scrollbar(wp, i, FALSE);
 	    }
 	}
-	prev_which_scrollbars[i] = -1;
+	curtab->tp_prev_which_scrollbars[i] = -1;
     }
 }
 #endif
@@ -3673,6 +3687,16 @@ gui_drag_scrollbar(sb, value, still_drag
 	/* Value may have been changed for closed fold. */
 	sb->value = sb->wp->w_topline - 1;
 # endif
+
+	/* When dragging one scrollbar and there is another one at the other
+	 * side move the thumb of that one too. */
+	if (gui.which_scrollbars[SBAR_RIGHT] && gui.which_scrollbars[SBAR_LEFT])
+	    gui_mch_set_scrollbar_thumb(
+		    &sb->wp->w_scrollbars[
+			    sb == &sb->wp->w_scrollbars[SBAR_RIGHT]
+						    ? SBAR_LEFT : SBAR_RIGHT],
+		    sb->value, sb->size, sb->max);
+
 #else
 	bytes[0] = CSI;
 	bytes[1] = KS_VER_SCROLLBAR;
--- a/src/vim.h
+++ b/src/vim.h
@@ -596,6 +596,7 @@ extern char *(*dyn_libintl_textdomain)(c
 #define EXTERNCMD	0x600	/* executing an external command */
 #define SHOWMATCH	(0x700 + INSERT) /* show matching paren */
 #define CONFIRM		0x800	/* ":confirm" prompt */
+#define SELECTMODE	0x1000	/* Select mode, only for mappings */
 
 /* directions */
 #define FORWARD			1
@@ -1523,6 +1524,11 @@ int vim_memcmp __ARGS((void *, void *, s
 
 #include "structs.h"	    /* file that defines many structures */
 
+/* Values for "do_profiling". */
+#define PROF_NONE	0	/* profiling not started */
+#define PROF_YES	1	/* profiling busy */
+#define PROF_PAUSED	2	/* profiling paused */
+
 #ifdef FEAT_MOUSE
 
 /* Codes for mouse button events in lower three bits: */
@@ -1974,4 +1980,5 @@ typedef int proftime_T;	    /* dummy for
 #define BAD_KEEP	-1	/* leave it */
 #define BAD_DROP	-2	/* erase it */
 
+
 #endif /* VIM__H */
--- a/src/window.c
+++ b/src/window.c
@@ -3113,6 +3113,12 @@ alloc_tabpage()
     tp = (tabpage_T *)alloc_clear((unsigned)sizeof(tabpage_T));
     if (tp != NULL)
     {
+# ifdef FEAT_GUI
+	int	i;
+
+	for (i = 0; i < 3; i++)
+	    tp->tp_prev_which_scrollbars[i] = -1;
+# endif
 # ifdef FEAT_DIFF
 	tp->tp_diff_invalid = TRUE;
 # endif
@@ -3395,7 +3401,10 @@ enter_tabpage(tp, old_curbuf)
     /* When 'guioptions' includes 'L' or 'R' may have to remove or add
      * scrollbars.  Have to update them anyway. */
     if (gui.in_use && starting == 0)
+    {
+	gui_init_which_components(NULL);
 	gui_update_scrollbars(TRUE);
+    }
     need_mouse_correct = TRUE;
 #endif