changeset 119:e8f07016e34d

updated for version 7.0042
author vimboss
date Wed, 19 Jan 2005 22:18:32 +0000
parents 45fd0ec37cf3
children 34423a71d203
files Filelist runtime/doc/eval.txt runtime/syntax/sh.vim runtime/syntax/vim.vim src/Make_bc3.mak src/Make_bc5.mak src/Make_cyg.mak src/Make_dice.mak src/Make_ivc.mak src/Make_ming.mak src/Make_mpw.mak src/Make_mvc.mak src/Make_os2.mak src/Make_ro.mak src/Make_sas.mak src/Make_vms.mms src/Makefile src/globals.h src/main.aap src/misc2.c src/move.c src/proto.h src/proto/gui_gtk.pro src/proto/gui_photon.pro src/quickfix.c src/screen.c src/structs.h src/testdir/Make_amiga.mak src/testdir/Make_dos.mak src/testdir/Make_os2.mak src/testdir/test49.vim src/testdir/test55.in src/testdir/test55.ok src/version.h
diffstat 34 files changed, 463 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/Filelist
+++ b/Filelist
@@ -30,6 +30,7 @@ SRC_ALL1 =	\
 		src/gui.h \
 		src/gui_beval.c \
 		src/gui_beval.h \
+		src/hashtable.c \
 		src/keymap.h \
 		src/macros.h \
 		src/main.c \
@@ -92,6 +93,7 @@ SRC_ALL2 =	\
 		src/proto/getchar.pro \
 		src/proto/gui.pro \
 		src/proto/gui_beval.pro \
+		src/proto/hashtable.pro \
 		src/proto/main.pro \
 		src/proto/mark.pro \
 		src/proto/mbyte.pro \
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Jan 17
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Jan 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -118,11 +118,11 @@ A Funcref can also be used with the |:ca
 	:call dict.init()
 
 The name of the referenced function can be obtained with |string()|. >
-	:let func = string(Myfunc)
+	:let func = string(Fn)
 
 You can use |call()| to invoke a Funcref and use a list variable for the
 arguments: >
-	:let r = call(Myfunc, mylist)
+	:let r = call(Fn, mylist)
 
 
 1.3 Lists ~
@@ -170,6 +170,7 @@ List concatenation ~
 
 Two lists can be concatenated with the "+" operator: >
 	:let longlist = mylist + [5, 6]
+	:let mylist += [7, 8]
 
 To prepend or append an item turn the item into a list by putting [] around
 it.  To change a list in-place see |list-modification| below.
@@ -439,6 +440,9 @@ Merging a Dictionary with another is don
 	:call extend(adict, bdict)
 This extends adict with all entries from bdict.  Duplicate keys cause entries
 in adict to be overwritten.  An optional third argument can change this.
+Note that the order of entries in a Dictionary is irrelevant, thus don't
+expect ":echo adict" to show the items from bdict after the older entries in
+adict.
 
 Weeding out entries from a Dictionary can be done with |filter()|: >
 	:call filter(dict 'v:val =~ "x"') 
@@ -2119,7 +2123,7 @@ extend({expr1}, {expr2} [, {expr3}])			*
 		used to decide what to do:
 		{expr3} = "keep": keep the value of {expr1}
 		{expr3} = "force": use the value of {expr2}
-		{expr3} = "error": give an error message
+		{expr3} = "error": give an error message 		*E737*
 		When {expr3} is omitted then "force" is assumed.
 
 		{expr1} is changed when {expr2} is not empty.  If necessary
@@ -3075,7 +3079,7 @@ nr2char({expr})						*nr2char()*
 <		Note that a NUL character in the file is specified with
 		nr2char(10), because NULs are represented with newline
 		characters.  nr2char(0) is a real NUL and terminates the
-		string, thus isn't very useful.
+		string, thus results in an empty string.
 
 prevnonblank({lnum})					*prevnonblank()*
 		Return the line number of the first line at or above {lnum}
@@ -3230,7 +3234,7 @@ reverse({list})	Reverse the order of ite
 
 search({pattern} [, {flags}])				*search()*
 		Search for regexp pattern {pattern}.  The search starts at the
-		cursor position.
+		cursor position (you can use |cursor()| to set it).
 		{flags} is a String, which can contain these character flags:
 		'b'	search backward instead of forward
 		'n'	do Not move the cursor
@@ -4302,6 +4306,7 @@ 7. Commands						*expression-commands*
 			When the selected range of items is partly past the
 			end of the list, items will be added.
 
+						*:let+=* *:let-=* *:let.=*
 :let {var} += {expr1}	Like ":let {var} = {var} + {expr1}".
 :let {var} -= {expr1}	Like ":let {var} = {var} - {expr1}".
 :let {var} .= {expr1}	Like ":let {var} = {var} . {expr1}".
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,8 +2,8 @@
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
 " Maintainer:		Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Oct 17, 2004
-" Version:		70
+" Last Change:		Dec 28, 2004
+" Version:		71
 " URL:		http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
 "
 " Using the following VIM variables: {{{1
@@ -66,21 +66,21 @@ syn case match
 syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseSingleQuote,shCaseDoubleQuote,shSpecial
 syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,bkshFunction,shSpecial
 syn cluster shColonList	contains=@shCaseList
-syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shNumber,shOperator,shPosnParm,shSpecial,shSingleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias
+syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shNumber,shOperator,shPosnParm,shSpecial,shSingleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest
 syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shSpecial,shPosnParm
 syn cluster shDerefList	contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError
 syn cluster shDerefVarList	contains=shDerefOp,shDerefVarArray,shDerefOpError
 syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shSingleQuote,shDoubleQuote,shSpecial
 syn cluster shExprList1	contains=shCharClass,shNumber,shOperator,shSingleQuote,shDoubleQuote,shSpecial,shExpr,shDblBrace,shDeref,shDerefSimple
-syn cluster shExprList2	contains=@shExprList1,@shCaseList
+syn cluster shExprList2	contains=@shExprList1,@shCaseList,shTest
 syn cluster shFunctionList	contains=@shCaseList,shOperator
 syn cluster shHereBeginList	contains=@shCommandSubList
 syn cluster shHereList	contains=shBeginHere,shHerePayload
 syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
 syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shIdWhiteSpace,shDeref,shDerefSimple,shSpecial,shRedir,shSingleQuote,shDoubleQuote,shExpr
-syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac
+syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest
 syn cluster shSubShList	contains=@shCaseList
-syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shSingleQuote,shSpecial,shTestOpr
+syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shSingleQuote,shSpecial,shTestOpr,shTest
 
 
 " Echo: {{{1
@@ -135,7 +135,7 @@ syn region shSubSh transparent matchgrou
 "=======
 "syn region  shExpr transparent matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList
 syn region  shExpr matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList
-syn region  shExpr transparent matchgroup=shStatement start="\<test\>" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1
+syn region  shTest transparent matchgroup=shStatement start="\<test\>" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1
 syn match   shTestOpr contained "<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!=<>]"
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn region  shDblBrace matchgroup=Delimiter start="\[\[" skip=+\\\\\|\\$+ end="\]\]"	contains=@shTestList
@@ -285,6 +285,9 @@ else
   syn region shHereDoc start="\(<<-\s*\\\_$\_s*'\z(\S*\)'\)\@="		matchgroup=shRedir end="^\s*\z1$"	contains=@shHereList	keepend
   syn region shHereDoc start="\(<<-\s*\\\_$\_s*\z(\S*\)\)\@="		matchgroup=shRedir end="^\s*\z1$"	contains=@shHereList	keepend
   syn region shHereDoc start="\(<<-\s*\\\_$\_s*\"\z(\S*\)\"\)\@="	matchgroup=shRedir end="^\s*\z1$"	contains=@shHereList	keepend
+  syn match  shHerePayload "^.*$"	contained	skipnl	nextgroup=shHerePayload	contains=@shDblQuoteList
+  syn match  shBeginLine ".*$"		contained	skipnl	nextgroup=shHerePayload	contains=@shCommandSubList
+  syn match  shBeginHere "<<-\=\s*\S\+"	contained		nextgroup=shBeginLine
  else
   syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)"	matchgroup=shRedir end="^\z1$"    contains=@shDblQuoteList
   syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1$"
@@ -299,11 +302,6 @@ else
   syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1$"
   syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1$"
  endif
- if v:version > 602 || (v:version == 602 && has("patch219"))
-  syn match  shHerePayload "^.*$"	contained	skipnl	nextgroup=shHerePayload	contains=@shDblQuoteList
-  syn match  shBeginLine ".*$"		contained	skipnl	nextgroup=shHerePayload	contains=@shCommandSubList
-  syn match  shBeginHere "<<-\=\s*\S\+"	contained		nextgroup=shBeginLine
- endif
 endif
 
 " Here Strings: {{{1
@@ -318,15 +316,15 @@ syn match  shVariable "\<\([bwglsav]:\)\
 syn match  shIdWhiteSpace  contained	"\s"
 syn match  shSetIdentifier contained	"="	nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shSingleQuote
 if exists("b:is_bash")
-  syn region shSetList matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>[^/]"me=e-1 end="$" matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="#\|="me=e-1 contains=@shIdList
-  syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$" end="[|)]"me=e-1		 matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="#\|="me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$" end="\\ze[|)]"		 matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
   syn match  shSet "\<\(declare\|typeset\|local\|export\|set\|unset\)$"
 elseif exists("b:is_kornshell")
-  syn region shSetList matchgroup=shSet start="\<\(typeset\|export\|unset\)\>[^/]"me=e-1 end="$"	matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
-  syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$"			matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<set\>\ze[^/]" end="$\|\ze[})]"			matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
   syn match  shSet "\<\(typeset\|set\|export\|unset\)$"
 else
-  syn region shSetList matchgroup=shSet start="\<\(set\|export\|unset\)\>[^/]"me=e-1 end="$" end="[)|]"me=e-1	matchgroup=shOperator end="[;&]" matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$\|\ze[|)]"	matchgroup=shOperator end="[;&]" matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
   syn match  shStatement "\<\(set\|export\|unset\)$"
 endif
 
--- 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:	December 07, 2004
-" Version:	7.0-02	NOT RELEASED
+" Last Change:	January 19, 2005
+" Version:	7.0-2
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -16,11 +16,11 @@ syn keyword vimTodo contained	COMBAK	NOT
 syn cluster vimCommentGroup	contains=vimTodo
 
 " 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] cal[l] cat[ch] cc ccl[ose] cd ce[nter] 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 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* endf[unction] en[dif] endt[ry] endw[hile] ene[w] ex exi[t] f[ile] files filetype fina[lly] fin[d] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] folddoc[losed] foldd[oopen] foldo[pen] fu[nction] g[lobal] go[to] gr[ep] grepa[dd] ha[rdcopy] h[elp] helpf[ind] helpg[rep] helpt[ags] 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] ls lu[nmap] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mkvie[w] mkv[imrc] mod[e] m[ove] mzf[ile] mz[scheme] 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] 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] sandbox 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] 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] so[urce] 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] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] v[global] vie[w] vi[sual] vmapc[lear] vne[w] vs[plit] vu[nmap] wa[ll] wh[ile] winc[md] windo winp[os] winpos* win[size] wn[ext] wN[ext] wp[revous] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] 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] cal[l] cat[ch] cb[uffer] cc ccl[ose] cd ce[nter] 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 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] 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] 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] ls lu[nmap] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mkvie[w] mkv[imrc] mod[e] m[ove] mzf[ile] mz[scheme] 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] 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] sandbox 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] 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] so[urce] 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] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] 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] winpos* win[size] wn[ext] wN[ext] wp[revious] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] 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 bdir bdlay beval bex 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 confirm consk conskey copyindent 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 fml fmr fo foldclose foldcolumn foldenable foldexpr foldignore foldlevel foldlevelstart foldmarker foldmethod foldminlines foldnestmax foldopen foldtext formatoptions formatprg fp 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 maxmemtot mef menuitems mfd mh mis ml mls mm mmd mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps mzq mzquantum nf nrformats nu number numberwidth nuw oft 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 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 shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smd sn so softtabstop sol sp splitbelow splitright spr sr srr ss ssl ssop st sta startofline statusline stl sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn 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 vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wh whichwrap wig wildchar wildcharm wildignore wildmenu wildmode wim winaltkeys winfixheight winheight winminheight winminwidth winwidth wiv wiw wm wmh wmnu wmw 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 bdir bdlay beval bex 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 confirm consk conskey copyindent 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 maxmemtot mef menuitems mfd mh mis ml mls mm mmd mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps mzq mzquantum nf nrformats nu number numberwidth nuw oft 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 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 shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smd sn so softtabstop sol sp splitbelow splitright spr sr srr ss ssl ssop st sta startofline statusline stl sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn 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 vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wh whichwrap wig wildchar wildcharm wildignore wildmenu wildmode wildoptions wim winaltkeys 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 nopvw noreadonly noremap norestorescreen norevins nori norightleft norightleftcmd norl norlc noro nors noru noruler nosb nosc noscb noscrollbind noscs nosecure nosft noshellslash noshiftround noshortname noshowcmd noshowfulltag noshowmatch noshowmode nosi nosm nosmartcase nosmartindent nosmarttab nosmd nosn nosol nosplitbelow nosplitright nospr nosr nossl nosta nostartofline 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 
@@ -29,7 +29,7 @@ syn keyword vimOption contained	noacd no
 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 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 invpvw invreadonly invremap invrestorescreen invrevins invri invrightleft invrightleftcmd invrl invrlc invro invrs invru invruler invsb invsc invscb invscrollbind invscs invsecure invsft invshellslash invshiftround invshortname invshowcmd invshowfulltag invshowmatch invshowmode invsi invsm invsmartcase invsmartindent invsmarttab invsmd invsn invsol invsplitbelow invsplitright invspr invsr invssl invsta invstartofline 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 
 
 " 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_cl t_cm t_Co t_cs t_CS t_CV t_da t_db t_dl t_DL 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_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 
+syn keyword vimOption contained	t_AB t_AF t_al t_AL t_bc t_cd t_ce t_cl t_cm t_Co 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 
 syn match   vimOption contained	"t_%1"
 syn match   vimOption contained	"t_#2"
 syn match   vimOption contained	"t_#4"
@@ -55,10 +55,9 @@ syn match vimHLGroup contained	"Conceal"
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx char2nr cindent col confirm cscope_connection cursor delete did_filetype diff_filler diff_hlID escape eventhandler executable exists expand filereadable filewritable finddir findfile fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function getbufvar getchar getcharmod getcmdline getcmdpos getcwd getfperm getfsize getftime getftype getline getreg getregtype getwinposx getwinposy getwinvar glob globpath has hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent input inputdialog inputrestore inputsave inputsecret isdirectory libcall libcallnr line line2byte lispindent localtime maparg mapcheck match matchend matchstr mode nextnonblank nr2char prevnonblank remote_expr remote_foreground remote_peek remote_read remote_send rename repeat resolve search searchpair server2client serverlist setbufvar setcmdpos setline setreg setwinvar simplify strftime stridx strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tempname tolower toupper tr type virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winwidth 
+syn keyword vimFuncName contained	add append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call char2nr cindent col 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 get getbufvar getchar getcharmod getcmdline getcmdpos getcwd getfontname getfperm getfsize getftime getftype getline getreg getregtype getwinposx getwinposy getwinvar glob globpath has has_key hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputrestore inputsave inputsecret insert isdirectory join keys len libcall libcallnr line line2byte lispindent localtime map maparg mapcheck match matchend matchstr max min mode nextnonblank nr2char prevnonblank range remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchpair server2client serverlist setbufvar setcmdpos setline setreg setwinvar simplify sort split strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tempname tolower toupper tr type virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winwidth 
 
 "--- syntax above generated by mkvimvim ---
-"--- syntax above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
 
 " Numbers {{{2
@@ -186,11 +185,12 @@ syn match vimEnvvar	"\${\I\i*}"
 " In-String Specials: {{{2
 " Try to catch strings, if nothing else matches (therefore it must precede the others!)
 "  vimEscapeBrace handles ["]  []"] (ie. "s don't terminate string inside [])
+"  COMBAK: I don't know why the \ze is needed in vimPatSepZone
 syn region vimEscapeBrace	oneline   contained transparent start="[^\\]\(\\\\\)*\[\^\=\]\=" skip="\\\\\|\\\]" end="\]"me=e-1
 syn match  vimPatSepErr	contained	"\\)"
 syn match  vimPatSep	contained	"\\|"
-syn region vimPatSepZone	oneline   contained   matchgroup=vimPatSep start="\\%\=(" skip="\\\\" end="\\)\|[^\]['"]"	contains=@vimStringGroup
-syn region vimPatRegion	contained transparent matchgroup=vimPatSep start="\\[z%]\=(" end="\\)"	contains=@vimSubstList oneline
+syn region vimPatSepZone	oneline   contained   matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\]['"]"	contains=@vimStringGroup
+syn region vimPatRegion	contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)"	contains=@vimSubstList oneline
 syn match  vimNotPatSep	contained	"\\\\"
 syn cluster vimStringGroup	contains=vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone
 syn region vimString	oneline keepend	start=+[^:a-zA-Z>!\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+	contains=@vimStringGroup
@@ -537,7 +537,6 @@ hi def link vimSubst1	vimSubst
 hi def link vimBehaveModel	vimBehave
 
 if !exists("g:vimsyntax_noerror")
-"  hi def link vimAugroupError	vimError
  hi def link vimBehaveError	vimError
  hi def link vimCollClassErr	vimError
  hi def link vimErrSetting	vimError
@@ -594,6 +593,8 @@ hi def link vimMenuNameMore	vimMenuName
 hi def link vimMtchComment	vimComment
 hi def link vimNotFunc	vimCommand
 hi def link vimNotPatSep	vimString
+hi def link vimPatSepR	vimPatSep
+hi def link vimPatSepZ	vimPatSep
 hi def link vimPatSepErr	vimPatSep
 hi def link vimPatSepZone	vimString
 hi def link vimPlainMark	vimMark
--- a/src/Make_bc3.mak
+++ b/src/Make_bc3.mak
@@ -65,6 +65,7 @@ EXE_dependencies = \
 	fileio.obj \
 	fold.obj \
 	getchar.obj \
+	hashtable.obj \
 	main.obj \
 	mark.obj \
 	memfile.obj \
--- a/src/Make_bc5.mak
+++ b/src/Make_bc5.mak
@@ -546,6 +546,7 @@ vimobj =  \
 	$(OBJDIR)\fileio.obj \
 	$(OBJDIR)\fold.obj \
 	$(OBJDIR)\getchar.obj \
+	$(OBJDIR)\hashtable.obj \
 	$(OBJDIR)\main.obj \
 	$(OBJDIR)\mark.obj \
 	$(OBJDIR)\memfile.obj \
--- a/src/Make_cyg.mak
+++ b/src/Make_cyg.mak
@@ -1,6 +1,6 @@
 #
 # Makefile for VIM on Win32, using Cygnus gcc
-# Last updated by Dan Sharp.  Last Change: 2005 Jan 16
+# Last updated by Dan Sharp.  Last Change: 2005 Jan 19
 #
 # This compiles Vim as a Windows application.  If you want Vim to run as a
 # Cygwin application use the Makefile (just like on Unix).
@@ -370,6 +370,7 @@ OBJ = \
 	$(OUTDIR)/fileio.o \
 	$(OUTDIR)/fold.o \
 	$(OUTDIR)/getchar.o \
+	$(OUTDIR)/hashtable.o \
 	$(OUTDIR)/main.o \
 	$(OUTDIR)/mark.o \
 	$(OUTDIR)/memfile.o \
--- a/src/Make_dice.mak
+++ b/src/Make_dice.mak
@@ -40,6 +40,7 @@ SRC = \
 	fileio.c \
 	fold.c \
 	getchar.c \
+	hashtable.c \
 	main.c \
 	mark.c \
 	memfile.c \
@@ -80,6 +81,7 @@ OBJ =	o/buffer.o \
 	o/fileio.o \
 	o/fold.o \
 	o/getchar.o \
+	o/hashtable.o \
 	o/main.o \
 	o/mark.o \
 	o/memfile.o \
@@ -153,6 +155,8 @@ o/fold.o:	fold.c  $(SYMS)
 
 o/getchar.o: getchar.c	$(SYMS)
 
+o/hashtable.o: hashtable.c	$(SYMS)
+
 o/main.o: main.c $(SYMS)
 
 o/mark.o: mark.c	$(SYMS)
--- a/src/Make_ivc.mak
+++ b/src/Make_ivc.mak
@@ -224,6 +224,7 @@ LINK32_OBJS= \
 	"$(INTDIR)/fileio.obj" \
 	"$(INTDIR)/fold.obj" \
 	"$(INTDIR)/getchar.obj" \
+	"$(INTDIR)/hashtable.obj" \
 	"$(INTDIR)/main.obj" \
 	"$(INTDIR)/mark.obj" \
 	"$(INTDIR)/mbyte.obj" \
@@ -376,6 +377,10 @@ SOURCE=.\getchar.c
 # End Source File
 # Begin Source File
 
+SOURCE=.\hashtable.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\gui.c
 
 !IF      "$(CFG)" == "Vim - Win32 Release vim"
--- a/src/Make_ming.mak
+++ b/src/Make_ming.mak
@@ -360,6 +360,7 @@ OBJ = \
 	$(OUTDIR)/fileio.o \
 	$(OUTDIR)/fold.o \
 	$(OUTDIR)/getchar.o \
+	$(OUTDIR)/hashtable.o \
 	$(OUTDIR)/main.o \
 	$(OUTDIR)/mark.o \
 	$(OUTDIR)/memfile.o \
--- a/src/Make_mpw.mak
+++ b/src/Make_mpw.mak
@@ -32,6 +32,7 @@ SrcFiles	=  ¶
 				  :src:fileio.c ¶
 				  :src:fold.c ¶
 				  :src:getchar.c ¶
+				  :src:hashtable.c ¶
 				  :src:gui.c ¶
 				  :src:gui_mac.c ¶
 				  :src:if_cscope.c ¶
@@ -82,6 +83,7 @@ ObjFiles-PPC    =  ¶
 				  "{ObjDir}fileio.c.x" ¶
 				  "{ObjDir}fold.c.x" ¶
 				  "{ObjDir}getchar.c.x" ¶
+				  "{ObjDir}hashtable.c.x" ¶
 				  "{ObjDir}gui.c.x" ¶
 				  "{ObjDir}gui_mac.c.x" ¶
 				  "{ObjDir}if_cscope.c.x" ¶
@@ -163,6 +165,7 @@ VIm  ÄÄ  {ObjFiles-PPC} {LibFiles-PPC} {¥MondoBuild¥}
 "{ObjDir}fileio.c.x"  Ä  :src:fileio.c
 "{ObjDir}fold.c.x"  Ä  :src:fold.c
 "{ObjDir}getchar.c.x"  Ä  :src:getchar.c
+"{ObjDir}hashtable.c.x"  Ä  :src:hashtable.c
 "{ObjDir}gui.c.x"  Ä  :src:gui.c
 "{ObjDir}gui_mac.c.x"  Ä  :src:gui_mac.c
 "{ObjDir}if_cscope.c.x"  Ä  :src:if_cscope.c
@@ -251,6 +254,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -331,6 +335,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -411,6 +416,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -491,6 +497,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -571,6 +578,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -652,6 +660,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -732,6 +741,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -812,6 +822,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -892,6 +903,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -972,6 +984,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1052,6 +1065,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1132,6 +1146,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1212,6 +1227,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1333,6 +1349,87 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:if_perl.pro ¶
 	:src:proto:if_perlsfio.pro
 
+:obj:hashtable.c.x	Ä  ¶
+	:src:hashtable.c ¶
+	:src:vim.h ¶
+	:src:auto:config.h ¶
+	:src:feature.h ¶
+	:src:os_unix.h ¶
+	:src:os_mac.h ¶
+	:src:workshop.h ¶
+	:src:ascii.h ¶
+	:src:keymap.h ¶
+	:src:term.h ¶
+	:src:macros.h ¶
+	:src:structs.h ¶
+	:src:globals.h ¶
+	:src:option.h ¶
+	:src:ex_cmds.h ¶
+	:src:proto.h ¶
+	:src:integration.h ¶
+	:src:wsdebug.h ¶
+	:src:regexp.h ¶
+	:src:gui.h ¶
+	:src:farsi.h ¶
+	:src:proto:os_unix.pro ¶
+	:src:proto:os_mac.pro ¶
+	:src:proto:buffer.pro ¶
+	:src:proto:charset.pro ¶
+	:src:proto:if_cscope.pro ¶
+	:src:proto:diff.pro ¶
+	:src:proto:digraph.pro ¶
+	:src:proto:edit.pro ¶
+	:src:proto:eval.pro ¶
+	:src:proto:ex_cmds.pro ¶
+	:src:proto:ex_cmds2.pro ¶
+	:src:proto:ex_docmd.pro ¶
+	:src:proto:ex_eval.pro ¶
+	:src:proto:ex_getln.pro ¶
+	:src:proto:fileio.pro ¶
+	:src:proto:fold.pro ¶
+	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
+	:src:proto:hangulin.pro ¶
+	:src:proto:main.pro ¶
+	:src:proto:mark.pro ¶
+	:src:proto:memfile.pro ¶
+	:src:proto:memline.pro ¶
+	:src:proto:menu.pro ¶
+	:src:proto:message.pro ¶
+	:src:proto:misc1.pro ¶
+	:src:proto:misc2.pro ¶
+	:src:proto:move.pro ¶
+	:src:proto:multibyte.pro ¶
+	:src:proto:normal.pro ¶
+	:src:proto:ops.pro ¶
+	:src:proto:option.pro ¶
+	:src:proto:quickfix.pro ¶
+	:src:proto:regexp.pro ¶
+	:src:proto:screen.pro ¶
+	:src:proto:search.pro ¶
+	:src:proto:syntax.pro ¶
+	:src:proto:tag.pro ¶
+	:src:proto:term.pro ¶
+	:src:proto:termlib.pro ¶
+	:src:proto:ui.pro ¶
+	:src:proto:undo.pro ¶
+	:src:proto:version.pro ¶
+	:src:proto:window.pro ¶
+	:src:proto:if_python.pro ¶
+	:src:proto:if_tcl.pro ¶
+	:src:proto:if_ruby.pro ¶
+	:src:proto:gui.pro ¶
+	:src:proto:pty.pro ¶
+	:src:proto:gui_gtk.pro ¶
+	:src:proto:gui_gtk_x11.pro ¶
+	:src:proto:gui_motif.pro ¶
+	:src:proto:gui_athena.pro ¶
+	:src:proto:gui_mac.pro ¶
+	:src:proto:gui_x11.pro ¶
+	:src:proto:workshop.pro ¶
+	:src:proto:if_perl.pro ¶
+	:src:proto:if_perlsfio.pro
+
 :obj:gui.c.x	Ä  ¶
 	:src:gui.c ¶
 	:src:vim.h ¶
@@ -1372,6 +1469,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1452,6 +1550,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1558,6 +1657,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1639,6 +1739,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1719,6 +1820,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1799,6 +1901,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1879,6 +1982,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -1959,6 +2063,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2039,6 +2144,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2120,6 +2226,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2200,6 +2307,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2280,6 +2388,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2360,6 +2469,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2440,6 +2550,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2520,6 +2631,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2600,6 +2712,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2680,6 +2793,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2760,6 +2874,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2840,6 +2955,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -2920,6 +3036,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3000,6 +3117,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3080,6 +3198,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3160,6 +3279,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3240,6 +3360,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3320,6 +3441,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3401,6 +3523,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3480,6 +3603,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3560,6 +3684,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3641,6 +3766,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3721,6 +3847,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
@@ -3801,6 +3928,7 @@ Dependencies  Ä  $OutOfDate
 	:src:proto:fileio.pro ¶
 	:src:proto:fold.pro ¶
 	:src:proto:getchar.pro ¶
+	:src:proto:hashtable.pro ¶
 	:src:proto:hangulin.pro ¶
 	:src:proto:main.pro ¶
 	:src:proto:mark.pro ¶
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -347,6 +347,7 @@ OBJ = \
 	$(OUTDIR)\fileio.obj \
 	$(OUTDIR)\fold.obj \
 	$(OUTDIR)\getchar.obj \
+	$(OUTDIR)\hashtable.obj \
 	$(OUTDIR)\main.obj \
 	$(OUTDIR)\mark.obj \
 	$(OUTDIR)\mbyte.obj \
@@ -754,6 +755,8 @@ testclean:
 
 $(OUTDIR)/getchar.obj:	$(OUTDIR) getchar.c  $(INCL)
 
+$(OUTDIR)/hashtable.obj:	$(OUTDIR) hashtable.c  $(INCL)
+
 $(OUTDIR)/gui.obj:	$(OUTDIR) gui.c  $(INCL) $(GUI_INCL)
 
 $(OUTDIR)/gui_w32.obj:	$(OUTDIR) gui_w32.c gui_w48.c $(INCL) $(GUI_INCL)
@@ -892,6 +895,7 @@ proto.h: \
 	proto/ex_getln.pro \
 	proto/fileio.pro \
 	proto/getchar.pro \
+	proto/hashtable.pro \
 	proto/main.pro \
 	proto/mark.pro \
 	proto/memfile.pro \
--- a/src/Make_os2.mak
+++ b/src/Make_os2.mak
@@ -53,6 +53,7 @@ OBJ = \
 	fileio.o \
 	fold.o \
 	getchar.o \
+	hashtable.o \
 	main.o \
 	mark.o \
 	memfile.o \
@@ -122,6 +123,7 @@ ex_getln.o:	ex_getln.c  $(INCL)
 fileio.o:	fileio.c  $(INCL)
 fold.o:		fold.c  $(INCL)
 getchar.o:	getchar.c  $(INCL)
+hashtable.o:	hashtable.c  $(INCL)
 main.o:		main.c  $(INCL)
 mark.o:		mark.c  $(INCL)
 memfile.o:	memfile.c  $(INCL)
--- a/src/Make_ro.mak
+++ b/src/Make_ro.mak
@@ -12,7 +12,7 @@ TERMFLAG   = -DUP_BC_PC_EXTERN
 ASMFLAGS   = -throwback -objasm -gcc
 
 OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
-	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar o.main o.mark o.mbyte  \
+	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar o.hashtable o.main o.mark o.mbyte  \
 	o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
 	o.normal o.ops o.option o.quickfix o.regexp o.screen o.search   \
 	o.syntax o.tag o.term o.termlib o.ui o.undo o.version o.window  \
@@ -65,6 +65,8 @@ o.fold:		c.fold
 
 o.getchar:	c.getchar
 
+o.hashtable:	c.hashtable
+
 o.gui:		c.gui
 
 o.gui_riscos:	c.gui_riscos
--- a/src/Make_sas.mak
+++ b/src/Make_sas.mak
@@ -103,6 +103,7 @@ SRC = \
 	fileio.c \
 	fold.c \
 	getchar.c \
+	hashtable.c \
 	main.c \
 	mark.c \
 	memfile.c \
@@ -144,6 +145,7 @@ OBJ = \
 	fileio.o \
 	fold.o \
 	getchar.o \
+	hashtable.o \
 	main.o \
 	mark.o \
 	memfile.o \
@@ -185,6 +187,7 @@ PRO = \
 	proto/fileio.pro \
 	proto/fold.pro \
 	proto/getchar.pro \
+	proto/hashtable.pro \
 	proto/main.pro \
 	proto/mark.pro \
 	proto/memfile.pro \
@@ -294,6 +297,8 @@ fold.o:			fold.c
 proto/fold.pro:		fold.c
 getchar.o:		getchar.c
 proto/getchar.pro:	getchar.c
+hashtable.o:		hashtable.c
+proto/hashtable.pro:	hashtable.c
 main.o:			main.c
 proto/main.pro:		main.c
 mark.o:			mark.c
--- a/src/Make_vms.mms
+++ b/src/Make_vms.mms
@@ -2,7 +2,7 @@
 # Makefile for Vim on OpenVMS
 #
 # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
-# Last change:  2004 Dec 16
+# Last change:  2005 Jan 19
 #
 # This has script been tested on VMS 6.2 to 7.3 on DEC Alpha, VAX and IA64
 # with MMS and MMK
@@ -274,7 +274,7 @@ ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_
 
 SRC =	buffer.c charset.c diff.c digraph.c edit.c eval.c ex_cmds.c ex_cmds2.c \
 	ex_docmd.c ex_eval.c ex_getln.c if_xcmdsrv.c fileio.c fold.c getchar.c \
-	main.c mark.c menu.c mbyte.c memfile.c memline.c message.c misc1.c \
+	hashtable.c, main.c mark.c menu.c mbyte.c memfile.c memline.c message.c misc1.c \
 	misc2.c move.c normal.c ops.c option.c quickfix.c regexp.c search.c \
 	syntax.c tag.c term.c termlib.c ui.c undo.c version.c screen.c \
 	window.c os_unix.c os_vms.c pathdef.c \
@@ -283,7 +283,7 @@ SRC =	buffer.c charset.c diff.c digraph.
 
 OBJ =	buffer.obj charset.obj diff.obj digraph.obj edit.obj eval.obj \
 	ex_cmds.obj ex_cmds2.obj ex_docmd.obj ex_eval.obj ex_getln.obj \
-	if_xcmdsrv.obj fileio.obj fold.obj getchar.obj main.obj mark.obj \
+	if_xcmdsrv.obj fileio.obj fold.obj getchar.obj hashtable.obj main.obj mark.obj \
 	menu.obj memfile.obj memline.obj message.obj misc1.obj misc2.obj \
 	move.obj mbyte.obj normal.obj ops.obj option.obj quickfix.obj \
 	regexp.obj search.obj syntax.obj tag.obj term.obj termlib.obj \
@@ -510,6 +510,10 @@ getchar.obj : getchar.c vim.h [.auto]con
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h
+hashtable.obj : hashtable.c vim.h [.auto]config.h feature.h os_unix.h \
+ ascii.h keymap.h term.h macros.h structs.h regexp.h \
+ gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
+ globals.h farsi.h arabic.h
 if_cscope.obj : if_cscope.c vim.h [.auto]config.h feature.h os_unix.h \
  ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
--- a/src/Makefile
+++ b/src/Makefile
@@ -1298,6 +1298,7 @@ BASIC_SRC = \
 	fileio.c \
 	fold.c \
 	getchar.c \
+	hashtable.c \
 	if_cscope.c \
 	if_xcmdsrv.c \
 	main.c \
@@ -1364,6 +1365,7 @@ OBJ = \
 	objects/fileio.o \
 	objects/fold.o \
 	objects/getchar.o \
+	objects/hashtable.o \
 	$(HANGULIN_OBJ) \
 	objects/if_cscope.o \
 	objects/if_xcmdsrv.o \
@@ -1419,6 +1421,7 @@ PRO_AUTO = \
 	fileio.pro \
 	fold.pro \
 	getchar.pro \
+	hashtable.pro \
 	hangulin.pro \
 	if_cscope.pro \
 	if_xcmdsrv.pro \
@@ -2153,6 +2156,9 @@ objects/fold.o: fold.c
 objects/getchar.o: getchar.c
 	$(CCC) -o $@ getchar.c
 
+objects/hashtable.o: hashtable.c
+	$(CCC) -o $@ hashtable.c
+
 objects/gui.o: gui.c
 	$(CCC) -o $@ gui.c
 
@@ -2492,6 +2498,10 @@ objects/getchar.o: getchar.c vim.h auto/
  auto/osdef.h ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h proto/gui_beval.pro option.h ex_cmds.h proto.h \
  globals.h farsi.h arabic.h
+objects/hashtable.o: hashtable.c vim.h auto/config.h feature.h os_unix.h \
+ auto/osdef.h ascii.h keymap.h term.h macros.h structs.h regexp.h \
+ gui.h gui_beval.h proto/gui_beval.pro option.h ex_cmds.h proto.h \
+ globals.h farsi.h arabic.h
 objects/if_cscope.o: if_cscope.c vim.h auto/config.h feature.h os_unix.h \
  auto/osdef.h ascii.h keymap.h term.h macros.h structs.h regexp.h \
  gui.h gui_beval.h proto/gui_beval.pro option.h ex_cmds.h proto.h \
--- a/src/globals.h
+++ b/src/globals.h
@@ -279,6 +279,12 @@ EXTERN scid_T	current_SID INIT(= 0);	   
 					       was sourced to define the
 					       current function. */
 #endif
+
+/* Magic number used for hashitem "hi_key" value indicating a deleted item.
+ * Only the address is used. */
+EXTERN char_u	hash_removed;
+
+
 EXTERN int	scroll_region INIT(= FALSE); /* term supports scroll region */
 EXTERN int	t_colors INIT(= 0);	    /* int value of T_CCO */
 
@@ -1390,6 +1396,9 @@ EXTERN char_u e_invexprmsg[]	INIT(=N_("E
 EXTERN char_u e_guarded[]	INIT(=N_("E463: Region is guarded, cannot modify"));
 EXTERN char_u e_nbreadonly[]	INIT(=N_("E680: NetBeans does not allow changes in read-only files"));
 #endif
+EXTERN char_u e_intern2[]	INIT(=N_("E685: Internal error: %s"));
+
+
 #ifdef MACOS_X_UNIX
 EXTERN short disallow_gui	INIT(= FALSE);
 #endif
--- a/src/main.aap
+++ b/src/main.aap
@@ -247,6 +247,7 @@ Source =
 	fileio.c
 	fold.c
 	getchar.c
+	hashtable.c
 	if_cscope.c
 	if_xcmdsrv.c
 	main.c
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1488,7 +1488,7 @@ vim_isspace(x)
 }
 
 /************************************************************************
- * Functions for hanlding growing arrays.
+ * Functions for handling growing arrays.
  */
 
 /*
--- a/src/move.c
+++ b/src/move.c
@@ -871,10 +871,7 @@ validate_cursor_col()
 
 	/* long line wrapping, adjust curwin->w_wrow */
 	if (curwin->w_p_wrap && col >= (colnr_T)W_WIDTH(curwin)
-#ifdef FEAT_VERTSPLIT
-		&& curwin->w_width != 0
-#endif
-		)
+		&& W_WIDTH(curwin) - off + curwin_col_off2() > 0)
 	{
 	    col -= W_WIDTH(curwin);
 	    col = col % (W_WIDTH(curwin) - off + curwin_col_off2());
--- a/src/proto.h
+++ b/src/proto.h
@@ -92,6 +92,7 @@ extern int _stricoll __ARGS((char *a, ch
 # ifdef FEAT_HANGULIN
 #  include "hangulin.pro"
 # endif
+# include "hashtable.pro"
 # include "main.pro"
 # include "mark.pro"
 # if !defined MESSAGE_FILE || defined(HAVE_STDARG_H)
--- a/src/proto/gui_gtk.pro
+++ b/src/proto/gui_gtk.pro
@@ -14,7 +14,6 @@ void gui_mch_destroy_scrollbar __ARGS((s
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
 char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
 int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
 void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
 void gui_make_popup __ARGS((char_u *path_name));
 void gui_mch_find_dialog __ARGS((exarg_T *eap));
--- a/src/proto/gui_photon.pro
+++ b/src/proto/gui_photon.pro
@@ -23,7 +23,7 @@ void gui_mch_enable_scrollbar __ARGS((sc
 void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
 void mch_set_mouse_shape __ARGS((int shape));
 void gui_mch_mousehide __ARGS((int hide));
-int gui_mch_getmouse __ARGS((int *x, int *y));
+void gui_mch_getmouse __ARGS((int *x, int *y));
 void gui_mch_setmouse __ARGS((int x, int y));
 long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
 void gui_mch_new_colors __ARGS((void));
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1775,8 +1775,10 @@ ex_copen(eap)
 	else if (buf != curbuf)
 	    set_curbuf(buf, DOBUF_GOTO);
 
+#ifdef FEAT_VERTSPLIT
 	/* Only set the height when there is no window to the side. */
 	if (curwin->w_width == Columns)
+#endif
 	    win_setheight(height);
 	curwin->w_p_wfh = TRUE;	    /* set 'winfixheight' */
 	if (win_valid(win))
--- a/src/screen.c
+++ b/src/screen.c
@@ -1924,8 +1924,8 @@ win_draw_end(wp, c1, c2, row, endrow, hl
 	if (n > 0)
 	{
 	    /* draw the fold column at the right */
-	    if (n > wp->w_width)
-		n = wp->w_width;
+	    if (n > W_WIDTH(wp))
+		n = W_WIDTH(wp);
 	    screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
 		    W_ENDCOL(wp) - n, (int)W_ENDCOL(wp),
 		    ' ', ' ', hl_attr(HLF_FC));
@@ -1937,8 +1937,8 @@ win_draw_end(wp, c1, c2, row, endrow, hl
 	    int nn = n + 2;
 
 	    /* draw the sign column left of the fold column */
-	    if (nn > wp->w_width)
-		nn = wp->w_width;
+	    if (nn > W_WIDTH(wp))
+		nn = W_WIDTH(wp);
 	    screen_fill(W_WINROW(wp) + row, W_WINROW(wp) + endrow,
 		    W_ENDCOL(wp) - nn, (int)W_ENDCOL(wp) - n,
 		    ' ', ' ', hl_attr(HLF_SC));
--- a/src/structs.h
+++ b/src/structs.h
@@ -1929,3 +1929,38 @@ typedef struct
 } prt_settings_T;
 
 #define PRINT_NUMBER_WIDTH 8
+
+/* Item for a hashtable.  "hi_key" can be one of three values:
+ * NULL:	   Never been used
+ * HI_KEY_REMOVED: Entry was removed
+ * Otherwise:	   Used item, pointer to the actual key; this usually is
+ *		   inside the item, subtract an offset to locate the item.
+ *		   This reduces the size of hashitem by 1/3.
+ */
+typedef struct hashitem_S
+{
+    long_u	hi_hash;	/* cached hash number of hi_key */
+    char_u	*hi_key;
+} hashitem;
+
+/* The address of "hash_removed" is used as a magic number for hi_key to
+ * indicate a removed item. */
+#define HI_KEY_REMOVED &hash_removed
+#define HASHITEM_EMPTY(hi) ((hi)->hi_key == NULL || (hi)->hi_key == &hash_removed)
+
+/* Initial size for a hashtable.  Our items are relatively small and growing
+ * is expensive, thus use 16 as a start.  Must be a power of 2. */
+#define HT_INIT_SIZE 16
+
+typedef struct hashtable_S
+{
+    long_u	ht_mask;	/* mask used for hash value (nr of items in
+				 * array is "ht_mask" + 1) */
+    int		ht_used;	/* number of items used */
+    int		ht_filled;	/* number of items used + removed */
+    int		ht_error;	/* when set growing failed, can't add more
+				   items before growing works */
+    hashitem	*ht_array;	/* points to the array, allocated when it's
+				   not "ht_smallarray" */
+    hashitem	ht_smallarray[HT_INIT_SIZE];   /* initial array */
+} hashtable;
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -23,7 +23,7 @@ SCRIPTS = test1.out test3.out test4.out 
 		test33.out test34.out test35.out test36.out test37.out \
 		test38.out test39.out test40.out test41.out test42.out \
 		test43.out test44.out test45.out test46.out test47.out \
-		test48.out test51.out test53.out test54.out
+		test48.out test51.out test53.out test54.out test55.out
 
 .SUFFIXES: .in .out
 
@@ -97,3 +97,4 @@ test48.out: test48.in
 test51.out: test51.in
 test53.out: test53.in
 test54.out: test54.in
+test55.out: test55.in
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -17,7 +17,7 @@ SCRIPTS16 =	test1.out test19.out test20.
 		test23.out test24.out test28.out test29.out \
 		test35.out test36.out test43.out \
 		test44.out test45.out test46.out test47.out \
-		test48.out test51.out test53.out test54.out
+		test48.out test51.out test53.out test54.out test55.out
 
 SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
 		test8.out test9.out test11.out test13.out test14.out \
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -23,7 +23,7 @@ SCRIPTS = test1.out test3.out test4.out 
 		test33.out test34.out test35.out test36.out test37.out \
 		test38.out test39.out test40.out test41.out test42.out \
 		test43.out test44.out test45.out test46.out test47.out \
-		test48.out test51.out test53.out test54.out
+		test48.out test51.out test53.out test54.out test55.out
 
 .SUFFIXES: .in .out
 
--- a/src/testdir/test49.vim
+++ b/src/testdir/test49.vim
@@ -1,6 +1,6 @@
 " Vim script language tests
 " Author:	Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
-" Last Change:	2005 Jan 16
+" Last Change:	2005 Jan 18
 
 "-------------------------------------------------------------------------------
 " Test environment							    {{{1
@@ -8314,6 +8314,7 @@ if ExtraVim()
 	    else
 		let v:errmsg = escape(v:errmsg, '"')
 		Xout "Expr" a:n.": Unexpected message:" v:errmsg
+		Xout "Expected: " . a:enr . ': ' . a:emsg
 		let g:taken = g:taken . "X"
 	    endif
 	endif
@@ -8377,7 +8378,7 @@ if ExtraVim()
 			call MSG(t, 'E15', "Invalid expression")
 		    endif
 		else
-		    if t == 2 || t == 4
+		    if t <= 2 || t == 4 || t == 5 || t == 6 || t == 8
 			call MSG(t, 'E475', 'Invalid argument\>')
 		    else
 			call MSG(t, 'E121', "Undefined variable")
new file mode 100644
--- /dev/null
+++ b/src/testdir/test55.in
@@ -0,0 +1,156 @@
+Tests for List and Dictionary types.     vim: set ft=vim :
+
+STARTTEST
+:so small.vim
+:fun Test()
+:" Creating List directly with different types
+:let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},]
+:$put =string(l)
+:$put =string(l[-1])
+:$put =string(l[-4])
+:try
+:  $put =string(l[-5])
+:catch
+:  $put =v:exception[:14]
+:endtry
+:"
+:" List identity
+:let ll = l
+:let lx = copy(l)
+:try
+:  $put =(l == ll) . (l isnot ll) . (l is ll) . (l == lx) . (l is lx) . (l isnot lx)
+:catch
+:  $put =v:exception
+:endtry
+:"
+:" Creating Dictionary directly with different types
+:let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},}
+:$put =string(d) . d.1
+:$put =string(sort(keys(d)))
+:$put =string(values(d))
+:for [key, val] in items(d)
+:  $put =key . ':' . string(val)
+:  unlet key val
+:endfor
+:call extend(d, {3:33, 1:99})
+:call extend(d, {'b':'bbb', 'c':'ccc'}, "keep")
+:try
+:  call extend(d, {3:333,4:444}, "error")
+:catch
+:  $put =v:exception[:15] . v:exception[-1:-1]
+:endtry
+:$put =string(d)
+:call filter(d, 'v:key =~ ''[ac391]''')
+:$put =string(d)
+:"
+:" Dictionary identity
+:let dd = d
+:let dx = copy(d)
+:try
+:  $put =(d == dd) . (d isnot dd) . (d is dd) . (d == dx) . (d is dx) . (d isnot dx)
+:catch
+:  $put =v:exception
+:endtry
+:"
+:" Changing var type should fail
+:try
+:  let d = []
+:catch
+:  $put =v:exception[:14] . v:exception[-1:-1]
+:endtry
+:try
+:  let l = {}
+:catch
+:  $put =v:exception[:14] . v:exception[-1:-1]
+:endtry
+:"
+:" removing items with :unlet
+:unlet l[2]
+:$put =string(l)
+:let l = range(8)
+:unlet l[:3]
+:unlet l[1:]
+:$put =string(l)
+:"
+:unlet d.c
+:unlet d[-1]
+:$put =string(d)
+:"
+:" manipulating a big Dictionary
+:let d = {}
+:for i in range(15000)
+: let d[i] = 30000 - i
+:endfor
+:$put =d[0] . ' ' . d[100] . ' ' . d[999] . ' ' . d[14000] . ' ' . d[14999]
+:try
+:  let n = d[15000]
+:catch
+:  $put =v:exception[:14] . v:exception[-5:-1]
+:endtry
+:" lookup each items
+:for i in range(15000)
+: if d[i] != 30000 - i
+:  $put =d[i]
+: endif
+:endfor
+: let i += 1
+:" delete even items
+:while i >= 2
+: let i -= 2
+: unlet d[i]
+:endwhile
+:$put =get(d, 15000 - 100, 'NONE') . ' ' . d[1]
+:" delete odd items, checking value, one intentionally wrong
+:let d[33] = 999
+:let i = 1
+:while i < 15000
+: if d[i] != 30000 - i
+:  $put =i . '=' . d[i]
+: else
+:  unlet d[i]
+: endif
+: let i += 2
+:endwhile
+:$put =string(d)  " must be almost empty now
+:unlet d
+:"
+:" Dictionary function
+:let dict = {}
+:func dict.func(a) dict
+:  $put =a:a . len(self.data)
+:endfunc
+:let dict.data = [1,2,3]
+:call dict.func("len: ")
+:echo dict.func("again: ")
+:try
+:  let Fn = dict.func
+:  call Fn('xxx')
+:catch
+:  $put =v:exception[:15]
+:endtry
+:sleep 5
+:" 
+:" Nasty: remove func from Dict that's being called (works)
+:let d = {1:1}
+:func d.func(a)
+:  return "a:". a:a
+:endfunc
+:$put = d.func(string(remove(d, 'func')))
+:"
+:" Nasty: deepcopy() dict that refers to itself (fails)
+:let d = {1:1, 2:2}
+:let l = [4, d, 6]
+:let d[3] = l
+:try
+:  let x = deepcopy(d)
+:catch
+:  $put =v:exception[:14]
+:endtry
+:"
+:endfun
+:call Test()
+:"
+:/^start:/,$wq! test.out
+ENDTEST
+
+start:
new file mode 100644
--- /dev/null
+++ b/src/testdir/test55.ok
@@ -0,0 +1,31 @@
+start:
+[1, 'as''d', [1, 2, function('strlen')], {'a': 1}]
+{'a': 1}
+1
+Vim(put):E684: 
+101101
+{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}asd
+['-1', '1', 'b']
+['asd', [1, 2, function('strlen')], {'a': 1}]
+1:'asd'
+b:[1, 2, function('strlen')]
+-1:{'a': 1}
+Vim(call):E737: 3
+{'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}
+{'c': 'ccc', '1': 99, '3': 33, '-1': {'a': 1}}
+101101
+Vim(let):E706: d
+Vim(let):E706: l
+[1, 'as''d', {'a': 1}]
+[4]
+{'1': 99, '3': 33}
+30000 29900 29001 16000 15001
+Vim(let):E716: 15000
+NONE 29999
+33=999
+{'33': 999}
+len: 3
+again: 3
+Vim(call):E725: 
+a:function('2')
+Vim(let):E698: 
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2004 Jan 17)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2004 Jan 17, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2004 Jan 19)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2004 Jan 19, compiled "