home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.3.831
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- Mime-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 7.3.831
- Problem: Clumsy to handle the situation that a variable does not exist.
- Solution: Add default value to getbufvar() et al. (Shougo Matsushita,
- Hirohito Higashi)
- Files: runtime/doc/eval.txt, src/eval.c src/testdir/test91.in,
- src/testdir/test91.ok, src/testdir/Make_amiga.mak,
- src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
- src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
- src/testdir/Makefile
-
-
- *** ../vim-7.3.830/runtime/doc/eval.txt 2013-02-20 17:58:01.000000000 +0100
- --- runtime/doc/eval.txt 2013-02-20 20:53:50.000000000 +0100
- ***************
- *** 1761,1772 ****
- foldtextresult( {lnum}) String text for closed fold at {lnum}
- foreground( ) Number bring the Vim window to the foreground
- function( {name}) Funcref reference to function {name}
- ! garbagecollect( [at_exit]) none free memory, breaking cyclic references
- get( {list}, {idx} [, {def}]) any get item {idx} from {list} or {def}
- get( {dict}, {key} [, {def}]) any get item {key} from {dict} or {def}
- getbufline( {expr}, {lnum} [, {end}])
- List lines {lnum} to {end} of buffer {expr}
- ! getbufvar( {expr}, {varname}) any variable {varname} in buffer {expr}
- getchar( [expr]) Number get one character from the user
- getcharmod( ) Number modifiers for the last typed character
- getcmdline() String return the current command-line
- --- 1772,1784 ----
- foldtextresult( {lnum}) String text for closed fold at {lnum}
- foreground( ) Number bring the Vim window to the foreground
- function( {name}) Funcref reference to function {name}
- ! garbagecollect( [{atexit}]) none free memory, breaking cyclic references
- get( {list}, {idx} [, {def}]) any get item {idx} from {list} or {def}
- get( {dict}, {key} [, {def}]) any get item {key} from {dict} or {def}
- getbufline( {expr}, {lnum} [, {end}])
- List lines {lnum} to {end} of buffer {expr}
- ! getbufvar( {expr}, {varname} [, {def}])
- ! any variable {varname} in buffer {expr}
- getchar( [expr]) Number get one character from the user
- getcharmod( ) Number modifiers for the last typed character
- getcmdline() String return the current command-line
- ***************
- *** 1787,1798 ****
- getqflist() List list of quickfix items
- getreg( [{regname} [, 1]]) String contents of register
- getregtype( [{regname}]) String type of register
- ! gettabvar( {nr}, {varname}) any variable {varname} in tab {nr}
- ! gettabwinvar( {tabnr}, {winnr}, {name})
- any {name} in {winnr} in tab page {tabnr}
- getwinposx() Number X coord in pixels of GUI Vim window
- getwinposy() Number Y coord in pixels of GUI Vim window
- ! getwinvar( {nr}, {varname}) any variable {varname} in window {nr}
- glob( {expr} [, {nosuf} [, {list}]])
- any expand file wildcards in {expr}
- globpath( {path}, {expr} [, {flag}])
- --- 1799,1812 ----
- getqflist() List list of quickfix items
- getreg( [{regname} [, 1]]) String contents of register
- getregtype( [{regname}]) String type of register
- ! gettabvar( {nr}, {varname} [, {def}])
- ! any variable {varname} in tab {nr} or {def}
- ! gettabwinvar( {tabnr}, {winnr}, {name} [, {def}])
- any {name} in {winnr} in tab page {tabnr}
- getwinposx() Number X coord in pixels of GUI Vim window
- getwinposy() Number Y coord in pixels of GUI Vim window
- ! getwinvar( {nr}, {varname} [, {def}])
- ! any variable {varname} in window {nr}
- glob( {expr} [, {nosuf} [, {list}]])
- any expand file wildcards in {expr}
- globpath( {path}, {expr} [, {flag}])
- ***************
- *** 3131,3137 ****
- Example: >
- :let lines = getbufline(bufnr("myfile"), 1, "$")
-
- ! getbufvar({expr}, {varname}) *getbufvar()*
- The result is the value of option or local buffer variable
- {varname} in buffer {expr}. Note that the name without "b:"
- must be used.
- --- 3146,3152 ----
- Example: >
- :let lines = getbufline(bufnr("myfile"), 1, "$")
-
- ! getbufvar({expr}, {varname} [, {def}]) *getbufvar()*
- The result is the value of option or local buffer variable
- {varname} in buffer {expr}. Note that the name without "b:"
- must be used.
- ***************
- *** 3141,3148 ****
- doesn't work for a global variable, window-local variable or
- window-local option.
- For the use of {expr}, see |bufname()| above.
- ! When the buffer or variable doesn't exist an empty string is
- ! returned, there is no error message.
- Examples: >
- :let bufmodified = getbufvar(1, "&mod")
- :echo "todo myvar = " . getbufvar("todo", "myvar")
- --- 3156,3163 ----
- doesn't work for a global variable, window-local variable or
- window-local option.
- For the use of {expr}, see |bufname()| above.
- ! When the buffer or variable doesn't exist {def} or an empty
- ! string is returned, there is no error message.
- Examples: >
- :let bufmodified = getbufvar(1, "&mod")
- :echo "todo myvar = " . getbufvar("todo", "myvar")
- ***************
- *** 3414,3439 ****
- <CTRL-V> is one character with value 0x16.
- If {regname} is not specified, |v:register| is used.
-
- ! gettabvar({tabnr}, {varname}) *gettabvar()*
- Get the value of a tab-local variable {varname} in tab page
- {tabnr}. |t:var|
- Tabs are numbered starting with one.
- Note that the name without "t:" must be used.
-
- ! gettabwinvar({tabnr}, {winnr}, {varname}) *gettabwinvar()*
- Get the value of window-local variable {varname} in window
- {winnr} in tab page {tabnr}.
- When {varname} starts with "&" get the value of a window-local
- option.
- Tabs are numbered starting with one. For the current tabpage
- use |getwinvar()|.
- When {winnr} is zero the current window is used.
- This also works for a global option, buffer-local option and
- window-local option, but it doesn't work for a global variable
- or buffer-local variable.
- ! When {varname} is empty a dictionary with all window-local
- ! variables is returned.
- ! Note that {varname} must be the name without "w:".
- Examples: >
- :let list_is_on = gettabwinvar(1, 2, '&list')
- :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
- --- 3434,3463 ----
- <CTRL-V> is one character with value 0x16.
- If {regname} is not specified, |v:register| is used.
-
- ! gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
- Get the value of a tab-local variable {varname} in tab page
- {tabnr}. |t:var|
- Tabs are numbered starting with one.
- Note that the name without "t:" must be used.
- + When the tab or variable doesn't exist {def} or an empty
- + string is returned, there is no error message.
-
- ! gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
- Get the value of window-local variable {varname} in window
- {winnr} in tab page {tabnr}.
- When {varname} starts with "&" get the value of a window-local
- option.
- + When {varname} is empty a dictionary with all window-local
- + variables is returned.
- + Note that {varname} must be the name without "w:".
- Tabs are numbered starting with one. For the current tabpage
- use |getwinvar()|.
- When {winnr} is zero the current window is used.
- This also works for a global option, buffer-local option and
- window-local option, but it doesn't work for a global variable
- or buffer-local variable.
- ! When the tab, window or variable doesn't exist {def} or an
- ! empty string is returned, there is no error message.
- Examples: >
- :let list_is_on = gettabwinvar(1, 2, '&list')
- :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
- ***************
- *** 3448,3454 ****
- the top of the GUI Vim window. The result will be -1 if the
- information is not available.
-
- ! getwinvar({winnr}, {varname}) *getwinvar()*
- Like |gettabwinvar()| for the current tabpage.
- Examples: >
- :let list_is_on = getwinvar(2, '&list')
- --- 3472,3478 ----
- the top of the GUI Vim window. The result will be -1 if the
- information is not available.
-
- ! getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
- Like |gettabwinvar()| for the current tabpage.
- Examples: >
- :let list_is_on = getwinvar(2, '&list')
- *** ../vim-7.3.830/src/eval.c 2013-02-20 17:58:01.000000000 +0100
- --- src/eval.c 2013-02-20 20:52:09.000000000 +0100
- ***************
- *** 7916,7922 ****
- {"garbagecollect", 0, 1, f_garbagecollect},
- {"get", 2, 3, f_get},
- {"getbufline", 2, 3, f_getbufline},
- ! {"getbufvar", 2, 2, f_getbufvar},
- {"getchar", 0, 1, f_getchar},
- {"getcharmod", 0, 0, f_getcharmod},
- {"getcmdline", 0, 0, f_getcmdline},
- --- 7916,7922 ----
- {"garbagecollect", 0, 1, f_garbagecollect},
- {"get", 2, 3, f_get},
- {"getbufline", 2, 3, f_getbufline},
- ! {"getbufvar", 2, 3, f_getbufvar},
- {"getchar", 0, 1, f_getchar},
- {"getcharmod", 0, 0, f_getcharmod},
- {"getcmdline", 0, 0, f_getcmdline},
- ***************
- *** 7936,7946 ****
- {"getqflist", 0, 0, f_getqflist},
- {"getreg", 0, 2, f_getreg},
- {"getregtype", 0, 1, f_getregtype},
- ! {"gettabvar", 2, 2, f_gettabvar},
- ! {"gettabwinvar", 3, 3, f_gettabwinvar},
- {"getwinposx", 0, 0, f_getwinposx},
- {"getwinposy", 0, 0, f_getwinposy},
- ! {"getwinvar", 2, 2, f_getwinvar},
- {"glob", 1, 3, f_glob},
- {"globpath", 2, 3, f_globpath},
- {"has", 1, 1, f_has},
- --- 7936,7946 ----
- {"getqflist", 0, 0, f_getqflist},
- {"getreg", 0, 2, f_getreg},
- {"getregtype", 0, 1, f_getregtype},
- ! {"gettabvar", 2, 3, f_gettabvar},
- ! {"gettabwinvar", 3, 4, f_gettabwinvar},
- {"getwinposx", 0, 0, f_getwinposx},
- {"getwinposy", 0, 0, f_getwinposy},
- ! {"getwinvar", 2, 3, f_getwinvar},
- {"glob", 1, 3, f_glob},
- {"globpath", 2, 3, f_globpath},
- {"has", 1, 1, f_has},
- ***************
- *** 11115,11122 ****
- ++emsg_off;
- buf = get_buf_tv(&argvars[0]);
-
- ! rettv->v_type = VAR_STRING;
- ! rettv->vval.v_string = NULL;
-
- if (buf != NULL && varname != NULL)
- {
- --- 11115,11128 ----
- ++emsg_off;
- buf = get_buf_tv(&argvars[0]);
-
- ! if (argvars[2].v_type != VAR_UNKNOWN)
- ! /* set the default value */
- ! copy_tv(&argvars[2], rettv);
- ! else
- ! {
- ! rettv->v_type = VAR_STRING;
- ! rettv->vval.v_string = NULL;
- ! }
-
- if (buf != NULL && varname != NULL)
- {
- ***************
- *** 11785,11791 ****
- --- 11791,11801 ----
- v = find_var_in_ht(&tp->tp_vars.dv_hashtab, varname, FALSE);
- if (v != NULL)
- copy_tv(&v->di_tv, rettv);
- + else if (argvars[2].v_type != VAR_UNKNOWN)
- + copy_tv(&argvars[2], rettv);
- }
- + else if (argvars[2].v_type != VAR_UNKNOWN)
- + copy_tv(&argvars[2], rettv);
- }
-
- /*
- ***************
- *** 11907,11914 ****
- varname = get_tv_string_chk(&argvars[off + 1]);
- ++emsg_off;
-
- ! rettv->v_type = VAR_STRING;
- ! rettv->vval.v_string = NULL;
-
- if (win != NULL && varname != NULL)
- {
- --- 11917,11930 ----
- varname = get_tv_string_chk(&argvars[off + 1]);
- ++emsg_off;
-
- ! if (argvars[off + 2].v_type != VAR_UNKNOWN)
- ! /* set the default return value */
- ! copy_tv(&argvars[off + 2], rettv);
- ! else
- ! {
- ! rettv->v_type = VAR_STRING;
- ! rettv->vval.v_string = NULL;
- ! }
-
- if (win != NULL && varname != NULL)
- {
- *** ../vim-7.3.830/src/testdir/test91.in 2013-02-20 21:09:20.000000000 +0100
- --- src/testdir/test91.in 2013-02-20 20:57:49.000000000 +0100
- ***************
- *** 0 ****
- --- 1,98 ----
- + Tests for getbufvar(), getwinvar(), gettabvar() and gettabwinvar().
- + vim: set ft=vim :
- +
- + STARTTEST
- + :so small.vim
- + :"
- + :" test for getbufvar()
- + :let b:var_num = 1234
- + :let def_num = 5678
- + :$put =string(getbufvar(1, 'var_num'))
- + :$put =string(getbufvar(1, 'var_num', def_num))
- + :$put =string(getbufvar(1, ''))
- + :$put =string(getbufvar(1, '', def_num))
- + :unlet b:var_num
- + :$put =string(getbufvar(1, 'var_num', def_num))
- + :$put =string(getbufvar(1, ''))
- + :$put =string(getbufvar(1, '', def_num))
- + :$put =string(getbufvar(9, ''))
- + :$put =string(getbufvar(9, '', def_num))
- + :unlet def_num
- + :$put =string(getbufvar(1, '&autoindent'))
- + :$put =string(getbufvar(1, '&autoindent', 1))
- + :"
- + :" test for getwinvar()
- + :let w:var_str = "Dance"
- + :let def_str = "Chance"
- + :$put =string(getwinvar(1, 'var_str'))
- + :$put =string(getwinvar(1, 'var_str', def_str))
- + :$put =string(getwinvar(1, ''))
- + :$put =string(getwinvar(1, '', def_str))
- + :unlet w:var_str
- + :$put =string(getwinvar(1, 'var_str', def_str))
- + :$put =string(getwinvar(1, ''))
- + :$put =string(getwinvar(1, '', def_str))
- + :$put =string(getwinvar(9, ''))
- + :$put =string(getwinvar(9, '', def_str))
- + :$put =string(getwinvar(1, '&nu'))
- + :$put =string(getwinvar(1, '&nu', 1))
- + :unlet def_str
- + :"
- + :" test for gettabvar()
- + :tabnew
- + :tabnew
- + :let t:var_list = [1, 2, 3]
- + :let def_list = [4, 5, 6, 7]
- + :tabrewind
- + :$put =string(gettabvar(3, 'var_list'))
- + :$put =string(gettabvar(3, 'var_list', def_list))
- + :$put =string(gettabvar(3, ''))
- + :$put =string(gettabvar(3, '', def_list))
- + :tablast
- + :unlet t:var_list
- + :tabrewind
- + :$put =string(gettabvar(3, 'var_list', def_list))
- + :$put =string(gettabvar(9, ''))
- + :$put =string(gettabvar(9, '', def_list))
- + :$put =string(gettabvar(3, '&nu'))
- + :$put =string(gettabvar(3, '&nu', def_list))
- + :unlet def_list
- + :tabonly
- + :"
- + :" test for gettabwinvar()
- + :tabnew
- + :tabnew
- + :tabprev
- + :split
- + :split
- + :wincmd w
- + :vert split
- + :wincmd w
- + :let w:var_dict = {'dict': 'tabwin'}
- + :let def_dict = {'dict2': 'newval'}
- + :wincmd b
- + :tabrewind
- + :$put =string(gettabwinvar(2, 3, 'var_dict'))
- + :$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
- + :$put =string(gettabwinvar(2, 3, ''))
- + :$put =string(gettabwinvar(2, 3, '', def_dict))
- + :tabnext
- + :3wincmd w
- + :unlet w:var_dict
- + :tabrewind
- + :$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
- + :$put =string(gettabwinvar(2, 3, ''))
- + :$put =string(gettabwinvar(2, 3, '', def_dict))
- + :$put =string(gettabwinvar(2, 9, ''))
- + :$put =string(gettabwinvar(2, 9, '', def_dict))
- + :$put =string(gettabwinvar(9, 3, ''))
- + :$put =string(gettabwinvar(9, 3, '', def_dict))
- + :unlet def_dict
- + :$put =string(gettabwinvar(2, 3, '&nux'))
- + :$put =string(gettabwinvar(2, 3, '&nux', 1))
- + :tabonly
- + :"
- + :/^start/,$wq! test.out
- + ENDTEST
- +
- + start:
- *** ../vim-7.3.830/src/testdir/test91.ok 2013-02-20 21:09:20.000000000 +0100
- --- src/testdir/test91.ok 2013-02-20 20:57:45.000000000 +0100
- ***************
- *** 0 ****
- --- 1,45 ----
- + start:
- + 1234
- + 1234
- + {'var_num': 1234}
- + {'var_num': 1234}
- + 5678
- + {}
- + {}
- + ''
- + 5678
- + 0
- + 0
- + 'Dance'
- + 'Dance'
- + {'var_str': 'Dance'}
- + {'var_str': 'Dance'}
- + 'Chance'
- + {}
- + {}
- + ''
- + 'Chance'
- + 0
- + 0
- + [1, 2, 3]
- + [1, 2, 3]
- + ''
- + [4, 5, 6, 7]
- + [4, 5, 6, 7]
- + ''
- + [4, 5, 6, 7]
- + ''
- + [4, 5, 6, 7]
- + {'dict': 'tabwin'}
- + {'dict': 'tabwin'}
- + {'var_dict': {'dict': 'tabwin'}}
- + {'var_dict': {'dict': 'tabwin'}}
- + {'dict2': 'newval'}
- + {}
- + {}
- + ''
- + {'dict2': 'newval'}
- + ''
- + {'dict2': 'newval'}
- + ''
- + 1
- *** ../vim-7.3.830/src/testdir/Make_amiga.mak 2013-02-13 17:34:59.000000000 +0100
- --- src/testdir/Make_amiga.mak 2013-02-20 20:21:03.000000000 +0100
- ***************
- *** 32,38 ****
- test71.out test72.out test73.out test74.out test75.out \
- test76.out test77.out test78.out test79.out test80.out \
- test81.out test82.out test83.out test84.out test88.out \
- ! test89.out test90.out
-
- .SUFFIXES: .in .out
-
- --- 32,38 ----
- test71.out test72.out test73.out test74.out test75.out \
- test76.out test77.out test78.out test79.out test80.out \
- test81.out test82.out test83.out test84.out test88.out \
- ! test89.out test90.out test91.out
-
- .SUFFIXES: .in .out
-
- ***************
- *** 139,141 ****
- --- 139,142 ----
- test88.out: test88.in
- test89.out: test89.in
- test90.out: test90.in
- + test91.out: test91.in
- *** ../vim-7.3.830/src/testdir/Make_dos.mak 2013-02-13 17:34:59.000000000 +0100
- --- src/testdir/Make_dos.mak 2013-02-20 20:21:13.000000000 +0100
- ***************
- *** 31,37 ****
- test74.out test75.out test76.out test77.out test78.out \
- test79.out test80.out test81.out test82.out test83.out \
- test84.out test85.out test86.out test87.out test88.out \
- ! test89.out test90.out
-
- SCRIPTS32 = test50.out test70.out
-
- --- 31,37 ----
- test74.out test75.out test76.out test77.out test78.out \
- test79.out test80.out test81.out test82.out test83.out \
- test84.out test85.out test86.out test87.out test88.out \
- ! test89.out test90.out test91.out
-
- SCRIPTS32 = test50.out test70.out
-
- *** ../vim-7.3.830/src/testdir/Make_ming.mak 2013-02-13 17:34:59.000000000 +0100
- --- src/testdir/Make_ming.mak 2013-02-20 20:21:19.000000000 +0100
- ***************
- *** 51,57 ****
- test74.out test75.out test76.out test77.out test78.out \
- test79.out test80.out test81.out test82.out test83.out \
- test84.out test85.out test86.out test87.out test88.out \
- ! test89.out test90.out
-
- SCRIPTS32 = test50.out test70.out
-
- --- 51,57 ----
- test74.out test75.out test76.out test77.out test78.out \
- test79.out test80.out test81.out test82.out test83.out \
- test84.out test85.out test86.out test87.out test88.out \
- ! test89.out test90.out test91.out
-
- SCRIPTS32 = test50.out test70.out
-
- *** ../vim-7.3.830/src/testdir/Make_os2.mak 2013-02-13 17:34:59.000000000 +0100
- --- src/testdir/Make_os2.mak 2013-02-20 20:21:25.000000000 +0100
- ***************
- *** 32,38 ****
- test71.out test72.out test73.out test74.out test75.out \
- test76.out test77.out test78.out test79.out test80.out \
- test81.out test82.out test83.out test84.out test88.out \
- ! test89.out test90.out
-
- .SUFFIXES: .in .out
-
- --- 32,38 ----
- test71.out test72.out test73.out test74.out test75.out \
- test76.out test77.out test78.out test79.out test80.out \
- test81.out test82.out test83.out test84.out test88.out \
- ! test89.out test90.out test91.out
-
- .SUFFIXES: .in .out
-
- *** ../vim-7.3.830/src/testdir/Make_vms.mms 2013-02-13 17:34:59.000000000 +0100
- --- src/testdir/Make_vms.mms 2013-02-20 20:21:31.000000000 +0100
- ***************
- *** 4,10 ****
- # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
- # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
- #
- ! # Last change: 2013 Feb 13
- #
- # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
- # Edit the lines in the Configuration section below to select.
- --- 4,10 ----
- # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com>
- # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu>
- #
- ! # Last change: 2013 Feb 20
- #
- # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
- # Edit the lines in the Configuration section below to select.
- ***************
- *** 77,83 ****
- test71.out test72.out test74.out test75.out test76.out \
- test77.out test78.out test79.out test80.out test81.out \
- test82.out test83.out test84.out test88.out test89.out \
- ! test90.out
-
- # Known problems:
- # Test 30: a problem around mac format - unknown reason
- --- 77,83 ----
- test71.out test72.out test74.out test75.out test76.out \
- test77.out test78.out test79.out test80.out test81.out \
- test82.out test83.out test84.out test88.out test89.out \
- ! test90.out test91.out
-
- # Known problems:
- # Test 30: a problem around mac format - unknown reason
- *** ../vim-7.3.830/src/testdir/Makefile 2013-02-13 17:34:59.000000000 +0100
- --- src/testdir/Makefile 2013-02-20 20:21:47.000000000 +0100
- ***************
- *** 28,34 ****
- test74.out test75.out test76.out test77.out test78.out \
- test79.out test80.out test81.out test82.out test83.out \
- test84.out test85.out test86.out test87.out test88.out \
- ! test89.out test90.out
-
- SCRIPTS_GUI = test16.out
-
- --- 28,34 ----
- test74.out test75.out test76.out test77.out test78.out \
- test79.out test80.out test81.out test82.out test83.out \
- test84.out test85.out test86.out test87.out test88.out \
- ! test89.out test90.out test91.out
-
- SCRIPTS_GUI = test16.out
-
- *** ../vim-7.3.830/src/version.c 2013-02-20 19:26:24.000000000 +0100
- --- src/version.c 2013-02-20 21:08:40.000000000 +0100
- ***************
- *** 730,731 ****
- --- 730,733 ----
- { /* Add new patch number below this line */
- + /**/
- + 831,
- /**/
-
- --
- |
-
- Ceci n'est pas une pipe.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
- /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
- \\\ an exciting new programming language -- http://www.Zimbu.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
-