diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
new file mode 100644
index 0000000..c8b9576
--- /dev/null
+++ b/runtime/doc/todo.txt
@@ -0,0 +1,3441 @@
+*todo.txt*      For Vim version 7.0aa.  Last change: 2004 Jun 13
+
+
+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+
+
+			      TODO list for Vim		*todo*
+
+This is a veeeery long list of known bugs, current work and desired
+improvements.  To make it a little bit accessible, the items are grouped by
+subject.  In the first column of the line a classification is used to be able
+to look for "the next thing to do":
+
+Priority classification:
+9   next point release
+8   next release
+7   as soon as possible
+6   soon
+5   should be included
+4   nice to have
+3   consider including
+2   maybe not
+1   probably not
+-   unclassified
+
+						    *votes-for-changes*
+See |develop.txt| for development plans.  You can vote for which items should
+be worked on, but only if you sponsor Vim development.  See |sponsor|.
+
+							*known-bugs*
+-------------------- Known bugs and current work -----------------------
+
+GTK2: font dialog uses font size zero when 'guifont' is "Courier".  Patch from
+Yasuhiro Matsumoto, 2004 June 8.
+
+Python indent: # aser: still adds extra indent.
+
+
+For version 7.0:
+-   Include many PATCHES:
+    -   Include the kvim patch. http://freenux.org/vim/ (Mickael Marchand)
+	Do not add Qtopia yet, it doesn't work very well.
+-   new DATA TYPES: lists, dictionaries and function references.
+    Add type checking?  See ~/vim/ideas.txt.
+-   Add SPELLCHECKER, with easy to add support for many languages.
+-   REFACTORING: The main() function is very long.  Move parts to separate
+    functions, especially loops.  Ideas from Walter Briscoe (2003 Apr 3, 2004
+    Feb 9).
+-   Store messages to allow SCROLLING BACK for all commands.  And other "less"
+    like commands.
+-   "INTELLISENSE".  First cleanup the Insert-mode completion.
+	http://www.vim.org/scripts/script.php?script_id=747
+	http://sourceforge.net/projects/insenvim
+-   PERSISTENT UNDO: store undo in a file.
+    Support multiple threads.  Show the list of changes in a window to be able
+    to select a version.
+7   SWAP FILE CHANGE: When a dos format file was edited with ":e ++ff=unix",
+    Vim is killed and trying to recover the file, 'ff' will be dos.  Same for
+    non-default fileencoding.  (Miroslaw Dobrzanski-Neumann, Jul 17)
+    Should store the values in block 0 of the swap file, but that is an
+    incompatible change.
+7   Support WINDOW TABS.  Works like several pages, each with their own
+    split windows.  Patch for GTK 1.2 from Christian Michon, 2004 Jan 6.
+    Also for the console!
+-   EMBEDDING: Make it possible to run Vim inside a window of another program.
+    For Xwindows this can be done with XReparentWindow().
+    For GTK Neil Bird has a patch to use Vim like a widget.
+-   Add COLUMN NUMBERS to ":" commands ":line1,line2[col1,col2]cmd".  Block
+    can be selected with CTRL-V.  Allow '$' (end of line) for col2.
+-   Add DEBUGGER INTERFACE.  Implementation for gdb by Xavier de Gaye,
+    assisted by Mikolaj Machowski.  Should work like an IDE.  Try to keep it
+    generic.  Also found here: http://skawina.eu.org/mikolaj/vimgdb
+    To be able to start the debugger from inside Vim: For GUI run a program
+    with a netbeans connection; for console: start a program that splits the
+    terminal, runs the debugger in one window and reconnect Vim I/O to the
+    other window.
+    Wishes for NetBeans commands:
+    - make it possible to have 'defineAnnoType' also handle terminal colors.
+    - send 'balloonText' events for the cursor position (using CursorHold ?)
+      in terminal mode.
+-   STICKY CURSOR: Add a way of scrolling that leaves the cursor where it is.
+    Especially when using the scrollbar.  Typing a cursor-movement command
+    scrolls back to where the cursor is.
+
+
+Vi incompatibility:
+8   With undo/redo only marks in the changed lines should be changed.  Other
+    marks should be kept.  Vi keeps each mark at the same text, even when it
+    is deleted or restored. (Webb)
+    Also: A mark is lost after: make change, undo, redo and undo.
+    Example: "{d''" then "u" then "d''": deletes an extra line, because the ''
+    position is one line down. (Veselinovic)
+8   ":change" in a single-line file adds an empty line. When the file used to
+    be longer a "~" line is displayed, but there really is an empty line.
+    (Haakon Riiser, 2003 Dec 3 and Dec 16)
+8   ":append" and ":insert" in an empty file add an extra empty line. (Haakon
+    Riiser, 2003 Dec 3)  Test for ML_EMPTY.
+8   When stdin is not a tty, and Vim reads commands from it, an error should
+    make Vim exit.
+7   Unix Vim (not gvim): Typing CTRL-C in Ex mode should finish the line
+    (currently you can continue typing, but it's truncated later anyway).
+    Requires a way to make CTRL-C interrupt select() when in cooked input.
+8   When loading a file in the .exrc, Vi loads the argument anyway.  Vim skips
+    loading the argument if there is a file already.  When no file argument
+    given, Vi starts with an empty buffer, Vim keeps the loaded file. (Bearded)
+6   In Insert mode, when using <BS> or <Del>, don't wipe out the text, but
+    only move back the cursor.	Behaves like '$' in 'cpoptions'.  Use a flag
+    in 'cpoptions' to switch this on/off.
+8   When editing a file which is a symbolic link, and then opening another
+    symbolic link on the same file, Vim uses the name of the first one.
+    Adjust the file name in the buffer to the last one used?  Use several file
+    names in one buffer???
+    Also: When first editing file "test", which is symlink to "test2", and
+    then editing "test2", you end up editing buffer "test" again.  It's not
+    logical that the name that was first used sticks with the buffer.
+7   The ":undo" command works differently in Ex mode.  Edit a file, make some
+    changes, "Q", "undo" and _all_ changes are undone, like the ":visual"
+    command was one command.
+7   The ":map" command output overwrites the command.  Perhaps it should keep
+    the ":map" when it's used without arguments?
+7   CTRL-L is not the end of a section?  It is for Posix!  Make it an option.
+7   Implement 'prompt' option.	Init to off when stdin is not a tty.
+7   CTRL-T in Insert mode inserts 'shiftwidth' of spaces at the cursor.  Add a
+    flag in 'cpoptions' for this.
+7   Add a way to send an email for a crashed edit session.  Create a file when
+    making changes (containing name of the swap file), delete it when writing
+    the file.  Supply a program that can check for crashed sessions (either
+    all, for a system startup, or for one user, for in a .login file).
+7   Vi doesn't do autoindenting when input is not from a tty (in Ex mode).
+7   "z3<CR>" should still use the whole window, but only redisplay 3 lines.
+7   ":tag xx" should move the cursor to the first non-blank.  Or should it go
+    to the match with the tag?	Option?
+7   Implement 'autoprint'/'ap' option.
+7   Add flag in 'cpoptions' that makes <BS> after a count work like <Del>
+    (Sayre).
+7   Add flag in 'cpoptions' that makes operator (yank, filter) not move the
+    cursor, at least when cancelled. (default Vi compatible).
+7   Make "5dd" on last-but-one-line not delete anything (Vi compatible).
+    Add flag in 'cpoptions' for this.  When not present, "2dd" in the last
+    line should delete the last line.  Patch from greenx 2002 Apr 11.
+7   This Vi-trick doesn't work: "Q" to go to Ex mode, then "g/pattern/visual".
+    In Vi you can edit in visual mode, and when doing "Q" you jump to the next
+    match.  Nvi can do it too.
+7   Support '\' for line continuation in Ex mode for these commands: (Luebking)
+	g/./a\		    g/pattern1/ s/pattern2/rep1\\
+	line 1\		    line 2\\
+	line 2\		    line 3\\
+	.		    line4/
+6   ":e /tmp/$tty" doesn't work.  ":e $uid" does.  Is $tty not set because of
+    the way the shell is started?
+6   Vi compatibility (optional): make "ia<CR><ESC>10." do the same strange
+    thing.  (only repeat insert for the first line).
+
+
+GTK+ 1 (OK in GTK 2):
+8   When menus are disabled, 'm' removed from 'guioptions', Alt-F still pops
+    up the File menu.  Cannot reproduce this: gives a warning for a NULL
+    pointer if the menu was never displayed.
+8   When using "gvim -geom 40x30" or setting 'columns' in .gvimrc or with a
+    GUIEnter autocommand, the width is still set to fit the toolbar.  Also
+    happens when changing the font.  How to avoid that the toolbar specifies
+    the minimal window width?
+8   When using a theme with different scrollbars (gtkstep), the scrollbars can
+    be too narrow. (Drazen Kacar)
+8   Font "7x14" has a bold version "7x14bold".  Try to find the bold font by
+    appending "bold" when there are not 14 dashes.
+
+GTK+ GUI known bugs:
+8   GTK 2: Combining UTF-8 characters not displayed properly in menus (Mikolaj
+    Machowski)  They are displayed as separate characters.  Problem in
+    creating a label?
+9   Can't paste a Visual selection from GTK-gvim to vim in xterm or Motif gvim
+    when it is longer than 4000 characters.  Works OK from gvim to gvim and
+    vim to vim.  Pasting through xterm (using the shift key) also works.
+    It starts working after GTK gvim loses the selection and gains it again.
+7   DND doesn't work with KDE (also with GTK 1).
+
+
+Win32 GUI known bugs:
+8   On Windows 98 the unicows library is needed to support functions with UCS2
+    file names.  Can we load unicows.dll dynamically?
+8   The -P argument doesn't work very well with many MDI applications.
+    The last argument of CreateWindowEx() should be used, see MSDN docs.
+    Tutorial: http://win32assembly.online.fr/tut32.html
+8   In eval.c, io.h is included when MSWIN32 is defined.  Shouldn't this be
+    WIN32?  Or can including io.h be moved to vim.h? (Dan Sharp)
+7   Windows XP: When using "ClearType" for text smoothing, a column of yellow
+    pixels remains when typing spaces in front of a "D" ('guifont' set to
+    "lucida_console:h8").
+6   Win32 GUI: With "-u NONE -U NONE" and doing "CTRL-W v" "CTRL-W o", the ":"
+    of ":only" is highlighted like the cursor.  (Lipelis)
+7   When font smoothing is enabled, redrawing can become very slow.  The reason
+    appears to be drawing with a transparent background.  Would it be possible
+    to use an opaque background in most places?
+8   Use another default for 'termencoding': the active codepage.  Means that
+    when 'encoding' is changed typing characters still works properly.
+    Alternative: use the Unicode functions to obtain typed characters.
+8   Win32: Multi-byte characters are not displayed, even though the same font
+    in Notepad can display them. (Srinath Avadhanula)  Try with the
+    UTF-8-demo.txt page with Andale Mono.
+7   The cursor color indicating IME mode doesn't work properly. (Shizhu Pan,
+    2004 May 9)
+8   Win32: When clicking on the gvim title bar, which gives it focus, produces
+    a file-changed dialog, after clicking on a button in that dialog the gvim
+    window follows the mouse.  The button-up event is lost.  Only with
+    MS-Windows 98?
+    Try this: ":set sw ts", get enter-prompt, then change the file in a
+    console, go back to Vim and click "reload" in the dialog for the changed
+    file: Window moves with the cursor!
+    Put focus event in input buffer and let generic Vim code handle it?
+8   When activating the Vim window with mouse click, don't move cursor to
+    mouse position.  Catch WM_MOUSEACTIVATE. (Luevelsmeyer)
+9   The print dialog uses a font which doesn't display multi-byte messages.
+    Include patch from Vipin Aravind?  Update from Yasuhiro Matsumoto.
+8   Win32: When mouse is hidden and in the toolbar, moving it won't make it
+    appear. (Sami Salonen)
+8   Windows NT: writing to aux.* makes Vim hang. (Acevedo)
+8   Win32 GUI: With maximized window, ":set go-=r" doesn't use the space that
+    comes available. (Poucet)  It works OK on Win 98 but doesn't work on Win
+    NT 4.0.  Leaves a grey area where the scrollbar was.  ":set go+=r" also
+    doesn't work properly.
+8   When Vim is minimized and when maximizing it a file-changed dialog pops
+    up, Vim isn't maximized.  It should be done before the dialog, so that it
+    appears in the right position. (Webb)
+9   When selecting at the more-prompt or hit-enter-prompt, the right mouse
+    button doesn't give popup menu.
+    At the hit-enter prompt CTRL-Y doesn't work to copy the modeless
+    selection.
+    On the command line, don't get a popup menu for the right mouse button.
+    Let the middle button paste selected text (not the clipboard but the
+    non-Visual selection)?  Otherwise CTRL-Y has to be used to copy the text.
+8   When 'grepprg' doesn't execute, the error only flashes by, the
+    user can hardly see what is wrong. (Moore)
+    Could use vimrun with an "-nowait" argument to only wait when an error
+    occurs, but "command.com" doesn't return an error code.
+8   When the 'shell' cannot be executed, should give an appropriate error msg.
+    Esp. for a filter command, currently it only complains the file could not
+    be read.
+8   MessageBox used for error messages can be too big.	There is no way to
+    scroll it, or even hit the OK button (but you can hit return).
+    Use a scrollable window.
+7   Add an option to add one pixel column to the character width?  Lucida
+    Console italic is wider than the normal font ("d" overlaps with next char).
+    Opposite of 'linespace': 'columnspace'.
+7   At the hit-enter prompt scrolling now no longer works.  Need to use the
+    keyboard to get around this.  Pretend <CR> was hit when the user tries to
+    scroll?  Need to be able to get out of hit-enter prompt with the mouse
+    anyway.
+7   Scrollbar width doesn't change when selecting other windows appearance.
+    Also background color of Toolbar and rectangle below vert. scrollbar.
+7   "!start /min cmd" should run in a minimized window, instead of using
+    "/min" as the command name. (Rogall)
+6   Drawing text transparently doesn't seem to work (when drawing part cursor).
+8   CTRL key doesn't always work in combination with ALT key.  It does work
+    for function keys, not for alphabetic characters.  Perhaps this is because
+    CTRL-ALT is used by Windows as AltGr?
+8   CTRL-- doesn't work for AZERTY, because it's CTRL-[ for QWERTY.  How do we
+    know which keyboard is being used?
+7   When scrolling, and a background color is dithered, the dither pattern
+    doesn't always join correctly between the scrolled area and the new drawn
+    area (Koloseike).
+8   When gui_init_font() is called with "*", p_guifont is freed while it might
+    still be used somewhere.  This is too tricky, do the font selection first,
+    then set the new font by name (requires putting all logfont parameters in
+    the font name).
+
+
+Athena and Motif:
+9   Can configure be changed to disable netbeans if the Xpm library is
+    required and it's missing?
+8   When using the resource "Vim*borderwidth 2" the widgets are positioned
+    wrong.
+9   XIM is disabled by default for SGI/IRIX.  Fix XIM so that 'imdisable' can
+    be off by default.
+9   XIM doesn't work properly for Athena/Motif. (Yasuhiro Matsumoto) For now,
+    keep XIM active at all times when the input method has the preediting
+    flag.
+8   X11: A menu that contains an umlaut is truncated at that character.
+    Happens when the locale is "C", which uses ASCII instead of IS0-8859-1.
+    Is there a way to use latin1 by default?  Gnome_init() seems to do this.
+8   Perhaps use fontsets for everything?
+6   When starting in English and switching the language to Japanese, setting
+    the locale with ":lang", 'guifontset' and "hi menu font=", deleting all
+    menus and setting them again, the menus don't use the new font.  Most of
+    the tooltips work though...
+7   Motif: when using a file selection dialog, the specified file name is not
+    always used (when specifying a filter or another directory).
+8   When 'encoding' is different from the current locale (e.g., utf-8) the
+    menu strings don't work.  Requires conversion from 'encoding' to the
+    current locale.  Workaround: set 'langmenu'.
+
+
+Athena GUI:
+9   When dragging the scrollbar thumb very fast, focus is only obtained in
+    the scrollbar itself.  And the thumb is no longer updated when moving
+    through files.
+7   The file selector is not resizable.  With a big font it is difficult to
+    read long file names. (Schroeder)
+4   Re-write the widget attachments and code so that we will not have to go
+    through and calculate the absolute position of every widget every time the
+    window is refreshed/changes size.  This will help the "flashing-widgets"
+    problem during a refresh.
+5   When starting gvim with all the default colors and then typing
+    ":hi Menu guibg=cyan", the menus change color but the background of the
+    pullright pixmap doesn't change colors.
+    If you type ":hi Menu guibg=cyan font=anyfont", then the pixmap changes
+    colors as it should.
+    Allocating a new pixmap and setting the resource doesn't change the
+    pullright pixmap's colors.  Why?  Possible Athena bug?
+
+
+Motif GUI:
+8   Popup menu ordering is wrong.
+8   Accelerators don't work in a dialog.  Include patch from Martin Dalecki
+    (Jan 3, tested by David Harrison).  Should work with Alt-o then.
+7   Use accelerators for the Motif file selection dialog.  Patch from Martin
+    Dalecki 2002 Jan 11.
+7   Use XmStringCreateLocalized() instead of XmStringCreateSimple()?
+    David Harrison says it's OK (it exists in Motif 1.2).
+8   The texts in the find/replace dialog don't use the right font.
+8   Lesstif: When deleting a menu that's torn off, the torn off menu becomes
+    very small instead of disappearing.  When closing it, Vim crashes.
+    (Phillipps)
+
+
+GUI:
+9   On Solaris, creating the popup menu causes the right mouse button no
+    longer to work for extending the selection. (Halevy)
+9   When running an external program, it can't always be killed with CTRL-C.
+    e.g. on Solaris 5.5, when using "K" (Keech).  Other 'guipty' problems on
+    Solaris 2.6. (Marley)
+9   On Solaris: Using a "-geometry" argument, bigger than the window where Vim
+    is started from, causes empty lines below the cmdline. (raf)
+8   X11 GUI: When menu is disabled by excluding 'm' from 'guioptions', ALT key
+    should not be used to trigger a menu (like the Win32 version).
+8   When setting 'langmenu', it should be effective immediately.  Store both
+    the English and the translated text in the menu structure.  Re-generate
+    the translation when 'langmenu' has changed.
+8   Basic flaw in the GUI code: NextScreen is updated before calling
+    gui_write(), but the GUI code relies on NextScreen to represent the state
+    of where it is processing the output.
+    Need better separation of Vim core and GUI code.
+8   When fontset support is enabled, setting 'guifont' to a single font
+    doesn't work.
+8   Menu priority for sub-menus for: Amiga, BeOS.
+8   Add menu separators for Amiga, RISCOS.
+8   Add a few more command names.  Patch from Jiri Brezina (28 feb 2002).
+8   Add way to specify the file filter for the browse dialog.  At least for
+    browse().
+8   Add dialog for search/replace to other GUIs?  Tk has something for this,
+    use that code?  Or use console dialog.
+8   When selecting a font with the font dialog and the font is invalid, the
+    error message disappears too quick.
+8   gui_check_colors() is not called at the right moment.  Do it much later,
+    to avoid problems.
+8   gui_update_cursor() is called for a cursor shape change, even when there
+    are mappings to be processed.  Only do something when going to wait for
+    input.  Or maybe every 100 ms?
+8   X11: When the window size is reduced to fit on screen, there are blank
+    lines below the text and bottom scrollbar.  "gvim -geometry 80x78+0+0".
+    When the "+0+0" is omitted it works.
+8   When starting an external command, and 'guipty' set, BS and DEL are mixed
+    up.  Set erase character somehow?
+8   A dead circumflex followed by a space should give the '^' character
+    (Rommel).  Look how xterm does this.
+    Also: Bednar has some code for dead key handling.
+    Also: Nedit 5.0.2 with USE_XMIM does it right. (Gaya)
+8   The compose key doesn't work properly (Cepas).  Both for Win32 and X11.
+7   The cursor in an inactive window should be hollow.  Currently it's not
+    visible.
+7   GUI on Solaris 2.5.1, using /usr/dt/..: When gvim starts, cursor is
+    hollow, after window lowered/raised it's OK. (Godfrey)
+7   When starting GUI with ":gui", and window is made smaller because it
+    doesn't fit on the screen, there is an extra redraw.
+8   When setting font with .Xdefaults, there is an extra empty line at the
+    bottom, which disappears when using ":set guifont=<Tab>". (Chadzelek)
+8   When font shape changes, but not the size, doing ":set font=" does not
+    redraw the screen with the new font.  Also for Win32.
+    When the size changes, on Solaris 2.5 there isn't a redraw for the
+    remaining part of the window (Phillipps).
+-   Flashes really badly in certain cases when running remotely from a Sun.
+4   Re-write the code so that the highlighting isn't changed multiple times
+    when doing a ":hi clear".  The color changes happen three or more times
+    currently.  This is very obvious on a 66Mhz 486.
+
+
+MSDOS/DJGPP:
+9   Pressing CTRL-C often crashes the console Vim runs in. (Ken Liao)
+    When 'bioskey' isn't set it doesn't happen.  Could be a problem with the
+    BIOS emulation of the console.  Version 5.6 already had this problem.
+8   DJGPP: "cd c:" can take us to a directory that no longer exists.
+    change_drive() doesn't check this.  How to check for this error?
+9   The 16 bit version runs out of memory very quickly.  Should find unused
+    code and reduce static data.
+9   Crash when running on Windows 98 in a console window and pressing CTRL-C.
+    Happens now and then.  When debugging Vim in gdb this also happens.  Since
+    the console crashes, might be a bug in the DOS console.  Resetting
+    'bioskey' avoids it, but then CTRL-C doesn't work.
+9   DOS: Make CTRL-Fx and ALT-Fx work.
+    CTRL-F1 = CE-5E, CTRL-F2 = CE-5F, .., CTRL-F10 = CE-67
+    ALT-F1 = CE-68, ALT-F2 = CE-69, .., ALT-F10 = CE-71
+    Shifted cursor keys produce same codes as unshifted keys.  Use bioskey(2)
+    to get modifier mask for <S-C-M-Fx>.
+    Use K_SPECIAL/KS_MODIFIER codes to insert modifier mask in input stream?
+    Make this work like in Win32 console.
+    Mapping things like <M-A> doesn't work, because it generates an extended
+    key code.  Use a translation table?
+9   Can't read an opened swap file when the "share" command has not been used.
+    At least ignore the swap files that Vim has opened itself.
+8   Use DJGPP 2.03.
+8   The Dos32 version (DJGPP) can't use long file names on Windows NT.
+    Check if new package can be used (v2misc/ntlfn08[bs].zip).
+8   setlocale() is bogus.
+8   Vim busy waits for new characters or mouse clicks.	Should put in some
+    sort of sleep, to avoid eating 50% of the CPU time.  Test on an unpatched
+    Windows 95 system!
+8   DJGPP: when shell is bash, make fails. (Donahoe)
+7   Hitting CTRL-P twice quickly (e.g. in keyword completion) on a 8088
+    machine, starts printer echo! (John Mullin).
+7   MSDOS 16 bit version can't work with COMSPEC that has an argument, e.g.:
+    COMSPEC=C:\WINDOWS\COMMAND.COM /E:4096    (Bradley)
+    Caused by BCC system() function (Borland "make" has the same problem).
+8   Mouse: handle left&right button pressed as middle button pressed.  Add
+    modifier keys shift, ctrl and alt.
+7   When too many files are open (depends on FILES), strange things happen.
+    The Dos16 version runs out of memory, in the Dos32 version "!ls" causes a
+    crash.  Another symptom: .swp files are not deleted, existing files are
+    "[New file]".
+7   DJGPP version doesn't work with graphics display mode.  Switch to a mode
+    that is supported?
+8   DJGPP: ":mode" doesn't work for many modes.  Disable them.
+8   DJGPP: When starting in Ex mode, shouldn't clear the screen. (Walter
+    Briscoe)
+
+
+MSDOS, OS/2 and Win32:
+8   OS/2: Add backtick expansion.  Undefine NO_EXPANDPATH and use
+    gen_expand_wildcards().
+8   OS/2: Add clipboard support?  See example clipbrd.exe from Alexander
+    Wagner.
+8   OS/2: Add Extended Attributes support and define HAVE_ACL.
+8   OS/2: When editing a file name "foo.txt" that is actually called FOO.txt,
+    writing uses "foo.txt".  Should obtain the real file name.
+8   Should $USERPROFILE be used instead of $HOMEDRIVE/$HOMEPATH?
+8   Win32 console: <M-Up> and <M-Down> don't work. (Geddes)  We don't have
+    special keys for these.  Should use modifier + key.
+8   Win32 console: caps-lock makes non-alpha keys work like with shift.
+    Should work like in the GUI version.
+8   Environment variables in DOS are not case sensitive.  Make a define for
+    STRCMP_ENV(), and use it when comparing environment var names.
+8   Setting 'shellslash' has no immediate effect.  Change all file names when
+    it is set/reset?  Or only use it when actually executing a shell command?
+8   When editing a file on a Samba server, case might matter.  ":e file"
+    followed by ":e FILE" will edit "file" again, even though "FILE" might be
+    another one.  Set last used name in buflist_new()?  Fix do_ecmd(), etc.
+8   ":mksession" generates a "cd" command where "aa\#bb" means directory "#bb"
+    in "aa", but it's used as "aa#bb". (Ronald Hoellwarth)
+8   When a buffer is editing a file like "ftp://mach/file", which is not going
+    to be used like a normal file name, don't change the slashes to
+    backslashes. (Ronald Hoellwarth)
+
+
+Windows 95:
+8   Editing a file by it's short file name and writing it, makes the long file
+    name disappear.  Setting 'backupcopy' helps.
+    Use FindFirstFile()->cAlternateFileName in fname_case() (George Reilly).
+8   Doing wildcard expansion, will match the short filename, but result in the
+    long filename (both DJGPP and Win32).
+
+
+Win32 console:
+9   When editing a file by its short file name, it should be expanded into its
+    long file name, to avoid problems like these: (Mccollister)
+     1) Create a file called ".bashrc" using some other editor.
+     2) Drag that file onto a shortcut or the actual executable.
+     3) Note that the file name is something like BASHRC~1
+     4) Go to File->Save As menu item and type ".bashrc" as the file name.
+     5) Press "Yes" to indicate that I want to overwrite the file.
+     6) Note that the message "File exists (add ! to override)" is displayed
+	and the file is not saved.
+    Use FindFirstFile() to expand a file name and directory in the path to its
+    long name.
+8   Also implement 'conskey' option for the Win32 console version?  Look at
+    how Xvi does console I/O under Windows NT.
+7   Re-install the use of $TERM and support the use of different terminals,
+    besides the console.
+8   Use of <altgr> modifier doesn't work?  5.3 was OK. (Garcia-Suarez/Guckes)
+9   Mapping <C-S-Tab> doesn't work correctly.  How to see the difference with
+    <C-S-i>?
+9   tmpnam() uses file in root of file system: "\asdf".  That doesn't work on
+    a Netware network drive.  Use same function as for Win32 GUI?
+8   In os_win32.h, HAVE_STRICMP and HAVE_STRNICMP are defined only if __GNUC__
+    is not defined.  Shouldn't that be the other way around?
+8   ":winpos" doesn't work.  Patch from Vipin Aravind.
+7   Use SetConsoleCP() and SetConsoleOutputCP() to implement 'termencoding'?
+    Avoids that input and output work differently.  Need to be restored when
+    exiting.
+
+
+Amiga:
+8   In mch_inchar() should use convert_input_safe() to handle incomplete byte
+    sequences.
+9   In mch_expandpath() a "*" is to be expanded, but "\*" isn't.  Remove
+    backslashes in result.
+8   Executing a shell, only one option for 'shell' is separated.  Should do
+    all options, using white space separation.
+
+
+Macintosh:
+9   Mac: The motion type is not stored on the clipboard.  Using ":set
+    clipboard=unnamed" makes "yyp" work characterwise. (Michael DeMoney)
+7   Loading the Perl library only works on OS/X 10.2 or 10.3, never on both.
+    Load the Perl library dynamically see Python sources file dynload_mac
+    (Jack)
+    dynamic linking: http://developer.apple.com/technotes/tn2002/tn2064.html
+8   Inputting Unicode characters does not work in the terminal.  They appear
+    to arrive as upper and lower bytes. (David Brown, 2004 April 17)
+8   Typing Unicode characters doesn't work at all in the GUI.
+8   Patch to add 'transparency' option.  Disadvantage: it's slow. (Eckehard
+    Berns, 2004 May 9) http://ecki.to/vim-icns/TransBack.diff
+8   Patches from "Rain Dog" Cucka:
+    - guifont selector (2002 Dec 15)
+    - scrollbar (2002 Dec 8)
+    - Quartz fonts (2002 Dec 8)
+9   Problems in Carbon version for OS X: (Benji Fisher)
+    - keyboard shortcuts in the menus get lost.
+8   The Vim/About menu doesn't work.
+8   ":gui" doesn't fork.  Enabling the code in gui.c to fork causes a SEGV.
+8   Define vim_mkdir() for Macintosh.
+8   Define mch_writable() for Macintosh.
+9   When DiskLock is running, using a swap file causes a crash.  Appears to be
+    a problem with writing a file that starts with a dot. (Giacalone)
+9   On G3 Mac, OS version 8, control strip causes characters messed up when
+    scrolling (CTRL-L cleans it up). (Benji Fisher)
+9   On G3 Mac, OS version 8, variable-speed scrolling doesn't work, after two
+    seconds of scrolling the screen freezes. (Benji Fisher)
+9   In mac_expandpath() check that handling of backslashes is done properly.
+8   Standard Mac shortcuts are missing.  (Amerige)
+8   Handling of non-fixed width fonts is wrong. (Amerige)
+
+
+"Small" problems:
+8   When an ":edit" is inside a try command and the ATTENTION prompt is used,
+    the :catch commands are always executed, also when the file is edited
+    normally.  Should reset did_emsg and undo side effects.  Also make sure
+    the ATTENTION message shows up.
+9   When using ":e ++enc=foo file" and the file is already loaded with
+    'fileencoding' set to "bar", then do_ecmd() uses that buffer, even though
+    the fileencoding differs.  Reload the buffer in this situation?  Need to
+    check for the buffer to be unmodified.
+8   ":g//" gives "Pattern not found error" with E486.  Should not use the
+    error number, it's not a regular error message.
+7   Vimtutor leaves escape sequence in terminal. This is the xterm response to
+    requesting the version number.  (Yasuhiro Matsumoto)
+8   When redirecting and using ":silent" the current column for displaying and
+    redirection can be different.  Use a separate variable to hold the column
+    for redirection.
+7   There is no way to change directory and go back without changing the local
+    and/or global directory.  Add a way to find out if the current window uses
+    a local directory.  Add cdcmd() that returns ":cd" or ":lcd"?
+7   After running "make test" the window title is sometimes not restored.
+    Mostly sticks at "test3.in", but not always.  Appears to happen more often
+    when compiled with Python (threading).
+7   The messages for "vim --help" and "vim --version" don't use
+    'termencoding'.
+7   ATTENTION dialog choices are more logical when "Delete it' appears before
+    "Quit".  Patch by Robert Webb, 2004 May 3.
+8   When 'scrollbind' is set, a window won't scroll horizontally if the cursor
+    line is too short.  Add a word in 'scrollopt' to allow moving the cursor
+    to longer line that is visible.  A similar thing is done for the GUI when
+    using the horizontal scrollbar.
+7   VisVim can only open one file.  Hard to solve: each opened file is passed
+    with a separate invocation, would need to use timestamps to know the
+    invocations belong together.
+8   When giving a ":bwipeout" command a file-changed dialog may popup for this
+    buffer, which is pointless.  (Mike Williams)
+8   On MS-Windows ":make" doesn't show output while it is working.  Use the
+    tee.exe from  http://unxutils.sourceforge.net/ ?  About 16 Kbyte in the
+    UnxUtils.zip archive.
+    Alternate one: http://www.pramodx.20m.com/tee_for_win32.htm, but Walter
+    Briscoe says it's not as good.
+8   'fillchars' doesn't work for multi-byte characters.
+9   Editing a XML file with a long line is extremely slow.  Example file from
+    Randy Parker (Dec 13).  Editing the dictionaries for engspchk plugin with
+    syntax highlighting is also very slow.
+    Limit the searching for items to a few hundred characters?
+8   Command line completion: buffers "foo.txt" and "../b/foo.txt", completing
+    ":buf foo<Tab>" doesn't find the second one. (George V. Reilly)
+7   Output for ":scriptnames" and ":breaklist" should shorten the file names:
+    use "~/" when possible.
+8   After using diff mode, ":set nodiff" doesn't restore the old foldmethod.
+    (Thomas S. Urban)
+7   mb_off2cells() doesn't work correctly on the tail byte of a double-byte
+    character. (Yasuhiro Matsumoto)  It should return 1 when used on a tail
+    byte, like for utf-8.  Store second byte of double-byte in ScreenLines2[]
+    (like for DBCS_JPNU) and put a zero in the second byte (like for UTF-8).
+8   'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when
+    defined.
+7   Inside a function with "perl <<EOF" a line with "$i++" is recognized as an
+    ":insert" command, causing the following "endfunction" not to be found.
+    Add skipping this perl construction inside function definitions.
+7   When 'ttimeoutlen' is 10 and 'timeoutlen' is 1000, there is a keycode
+    "<Esc>a" and a mapping <Esc>x", when typing "<Esc>a" with half a second
+    delay should not be interpreted as a keycode. (Hans Ginzel)
+7   ":botright 1 new" twice causes all window heights to be changed.  Make the
+    bottom window only bigger as much as needed.
+7   "[p" doesn't work in Visual mode. (David Brown)
+7   The Cygwin and MingW makefiles define "PC", but it's not used anywhere.
+    Remove? (Dan Sharp)
+9   The argument <f-args> of a user command doesn't handle backslashes
+    properly. "Cmd \ e" is one argument, "Cmd \\ e" still is one argument.
+    "Cmd \  e" is two arguments, first one ending in space. (Kontra Gergely)
+9   User commands use the context of the script they were defined in.  This
+    causes a "s:var" argument to unexpectedly use a variable in the defining
+    script, not the calling script.  Add an argument to ":command":
+    "-keepcontext".  Do replace <SID>, so that a function in the defining
+    script can be called.
+8   The Japanese message translations for MS-Windows are called ja.sjis.po,
+    but they use encoding cp932.  Rename the file and check that it still
+    works.
+9   When a syntax region does not use "keepend" and a contained item does use
+    "extend", this makes the outer region stop at the end of the contained
+    region. (Lutz Eymers)  Another example Nov 14 2002.
+8   A very long message in confirm() can't be quit.  Make this possible with
+    CTRL-C.
+7   clip_x11_own_selection() uses CurrentTime, that is not allowed.  VNC X
+    server has a problem with this.  (Mark Waggoner) Remembering the timestamp
+    of events isn't always possible.  We don't get them in an xterm.  GTK
+    doesn't obtain the selection again when the timestamp differs, thus it
+    won't work for GTK anyway.
+8   When the clipboard isn't supported: ":yank*" gives a confusing error
+    message.  Specifically mention that the register name is invalid.
+8   "gf" always excludes trailing punctuation characters. file_name_in_line()
+    is currently fixed to use ".,:;!".  Add an option to make this
+    configurable?
+8   'hkmap' should probably be global-local.
+9   When "$" is in 'cpoptions' and folding is active, a "C" command changes
+    the folds and resets w_lines_valid.  The display updating doesn't work
+    then. (Pritesh Mistry)
+8   ":s!from!to!" works, but ":smagic!from!to!" doesn't.  It sees the "!" as a
+    flag to to the command.  Same for ":snomagic". (Johan Spetz)
+8   Using ":s" in a function changes the previous replacement string.  Save
+    "old_sub" in save_search_patterns()?
+8   When appending to a file and 'patchmode' isn't empty, a backup file is
+    always written, even when the original file already exists.
+7   When using "daw" on the last word in a file and this is a single letter,
+    nothing is deleted.  Should delete the letter and preceding white space.
+9   When getting focus while writing a large file, could warn for this file
+    being changed outside of Vim.  Avoid checking this while the file is being
+    written.
+9   The "Error detected while processing modelines" message should have an
+    error number.
+7   The message in bt_dontwrite_msg() could be clearer.
+8   Unix: When libcall() fails there is no clear error message.  Johannes
+    Zellner has a patch for this.
+8   The script ID that is stored with an option and displayed with ":verbose
+    set" isn't reset when the option is set internally.  For example when
+    'foldlevel' is set from 'foldlevelstart'.
+8   In the fileformat dialog, "Cancel" isn't translated.  Add a global
+    variable for this. (Eduardo Fernandez)
+9   When editing a file with 'readonly' set, there is no check for an existing
+    swap file.  Then using ":write" (without making any changes) doesn't give
+    a warning either.  Should check for an existing swap file without creating
+    one.
+7   On MS-DOS or MS-Windows, when editing the same file over a network, the
+    drive letter is different, thus an existing swap file doesn't generate a
+    warning.  Use some flag to indicate the swap file is in the same directory
+    as the original file?  Could make b0_fname[] start with a special
+    character like ">".
+7   When 'showbreak' is set, the amount of space a Tab occupies changes.
+    Should work like 'showbreak' is inserted without changing the Tabs.
+7   When there is a "help.txt" window in a session file, restoring that
+    session will not get the "LOCAL ADDITIONS" back.
+7   When 'mousefocus' is set and switching to another window with a typed
+    command, the mouse pointer may be moved to a part of the window that's
+    covered by another window and we lose focus.  Only move in the y
+    direction, not horizontally?
+8   When using CTRL-D after ":help", restrict the number of matches to a
+    thousand, otherwise using CTRL-D without an argument takes too long.
+8   ":hardcopy":
+    - Patch to append CTRL-D to PostScript output (Mike Williams, 2004 Jun 11)
+    - Using the cterm_color[] table is wrong when t_colors is > 16.
+    - Need to handle unprintable characters.
+    - Win32: On a B&W printer syntax highlighting isn't visible.  Perform
+      dithering to make grey text?
+    - support printing multi-byte characters.  Patch from Motonobu Ichimura.
+      New (better) patch from Mike Williams (2004 Jan 20)
+    - Add a flag in 'printoptions' to add an empty page to make the total
+      number even.  "addempty"? (Mike Williams)
+    - Should interpreted CTRL-L as a page break.
+    - Grey line numbers are not always readable.  Add field in 'printoptions'.
+      Default to black when no syntax highlighting.
+    - Be able to print a window in diff mode.
+    - Be able to specify a colorscheme to use for printing.  And a separate
+      one for B&W printing (if that can be detected).
+8   In Visual block mode with 'lbr' set, a change command doesn't insert the
+    text in following lines where the linebreak changes.
+9   dosinst.c: The DJGPP version can't uninstall the Uninstall registry key on
+    Windows NT.  How to install a .inf file on Windows NT and how to detect
+    that Windows NT is being used?
+8   When opening the same file on Unix and on MS-Windows, there is no
+    ATTENTION message, because the path in the swap file is different.  Using
+    a relative path name will cause no ATTENTION for Vim 5.8.
+    Somehow add a flag that the swap file is in the same dir as the file?
+8   When 'virtualedit' is "block,insert" and encoding is "utf-8", selecting a
+    block of one double-wide character, then "d" deletes only half of it.
+8   When 'virtualedit' is set, should "I" in blockwise visual mode also insert
+    in lines that don't extend into the block?
+8   With 'virtualedit' set, in Insert mode just after the end of line, CTRL-O
+    yh does not yank the last character of the line. (Pavel Papushev)
+    Doing "hl" first appears to make it work.
+8   With 'virtualedit' set it's possible to move into the blank area from
+    'linebreak'.
+8   With 'virtualedit' set and 'selection' "exclusive", a Visual selection
+    that ends in or after a tab, "d" doesn't delete (part of) the tab.
+    (Helmut Stiegler)
+8   With 'virtualedit' set, a blockwise Visual selection that starts and ends
+    in a tab, "<" shifts too much. (Helmut Stiegler)
+9   When jumping to a tag, the search pattern is put in the history.  When
+    'magic' is on, the pattern may not work.  Translate the pattern depending
+    on p_magic when putting it in the history?  Alternative: Store value of
+    'magic' in history.  (Margo)
+9   optwin.vim: Restoring a mapping for <Space> or <CR> is not correct for
+    ":noremap".  Add "mapcmd({string}, {mode})?  Use code from ":mkexrc".
+9   incsearch is incorrect for "/that/<Return>/this/;//" (last search pattern
+    isn't updated).
+9   term_console is used before it is set (msdos, Amiga).
+9   Get out-of-memory for ":g/^/,$s//@/" on 1000 lines, this is not handled
+    correctly.  Get many error messages while redrawing the screen, which
+    cause another redraw, etc.
+8   [<C-I> doesn't work when '*' is in 'iskeyword'.  find_pattern_in_path()
+    must escape special characters in the pattern.
+8   Vim can overwrite a read-only file with ":w!".  ":w" can't overwrite an
+    existing file, "w!" can, but perhaps not a read-only file?  Then use
+    ":w!!" for that.
+    Or ask for permission to overwrite it (if file can be made writable) and
+    restore file to readonly afterwards.
+7   When compiled with "xterm_clipboard", startup can be slower and might get
+    error message for invalid $DISPLAY.  Try connecting to the X server in the
+    background (forked), so that Vim starts up quicker?  Connect as soon as
+    the clipboard is to be used (Visual select mode starts, paste from
+    clipboard)
+7   X11: Some people prefer to use CLIPBOARD instead of PRIMARY for the normal
+    selection.  Add an "xclipboard" argument to the 'clipboard' option? (Mark
+    Waggoner)
+8   For xterm need to open a connection to the X server to get the window
+    title, which can be slow.  Can also get the title with "<Esc>[21t", no
+    need to use X11 calls.  This returns "<Esc>]l{title}<Esc>\".
+8   When the builtin xterm termcap contains codes that are not wanted, need a
+    way to avoid using the builtin termcap.
+8   Xterm sends ^[[H for <Home> and ^[[F for <End> in some mode.  Also
+    recognize these keys?  Mostly useful for xterm simulators, like gnometerm.
+    See http://dickey.his.com/xterm/xterm.faq.html#xterm_pc_style.
+8   '[ and '] should be set to start/end of line when using a linewise operator
+    (e.g., ":w").
+8   CTRL-A can't handle big "long" numbers, they become negative.  Check for
+    "-" character, if not present, use unsigned long.
+8   Make it possible to disable the special meaning of "#" in the first column
+    for ">>".
+8   Add suspending with CTRL-Z at the "more" prompt, and when executing a long
+    script in do_cmdline().
+8   When using 'hidden', many swap files will be open.  When Vim runs into the
+    maximum number of open files, error messages will appear.  Detect that
+    this problem is present, and close any hidden files that don't have
+    changes.
+8   With 'viminfo' set such that the ".viminfo" file is written on a FAT
+    filesystem, an illegal file name may be created: ".vim".
+8   For each buffer that is opened, the viminfo file is opened and read to
+    check for file marks.  This can be slow.
+7   In xterm, recognize both vt100 and vt220 cursor keys.  Change
+    add_termcode() to not remove an existing entry for a name, when it's
+    needed.
+    Need a generic solution to recognize different codes for the same key.
+8   Core dump within signal function: gdb doesn't show stack backtrace!  Option
+    to skip catch_signals()?
+9   Repeating a "cw" with "." doesn't work if the text was pasted from the
+    clipboard. (Thomas Jones)  It's because the menu/toolbar item exits Insert
+    mode and uses "gP".  How to fix this without breaking inserting a block of
+    text?
+8   In Replace mode pasting from the clipboard (using menu or toolbar) inserts
+    all the text.  Add ":rmenu"?
+8   Pasting with the mouse in Replace mode inserts the text, instead of
+    overwriting, when it is more than one line.  Same for using <C-R>.
+9   CTRL-E and CTRL-Y don't work in small window when 'so' is 4 and lines are
+    wrapping (Acevedo/in.226).  E.g., when using CTRL-E, window height 7,
+    window might actually scroll down when last line of buffer is displayed.
+    --> Remember if the previous command was "cursor follows screen" or
+    "screen follow cursor" and use this in cursupdate().
+7   tilde_replace() can only handle "~/", should also do "~user/".
+    Get the list of home directories (from /etc/passwd?  Use getpwent()) and
+    use some clever algorithm to match a path with that.  Find common strings
+    in the list?
+8   When dragging status line with mouse, sometimes a jump when first clicking
+    on the status line (caused by 'winheight').  Select window on button up,
+    instead of on button down.
+8   Dragging the status line doesn't scroll but redraw.
+9   Evaluating 'statusline' in build_stl_str_hl() does not properly check for
+    reaching the end of the available buffer.
+8   When performing incremental search, should abort searching as soon as a
+    character is typed.
+8   When the value of $MAKE contains a path, configure can't handle this.
+    It's an autoconf bug.  Remove the path from $MAKE to work around it.
+8   How to set VIMRC_FILE to \"something\" for configure?  Why does this not
+    work: CFLAGS='-DVIMRC_FILE=\"/mydir/myfile\"' ./configure
+8   The temporary file is sometimes not writable.  Check for this, and use an
+    alternate name when it isn't.  Or add the 'temptemplate' option: template
+    for the temp file name ":set temptemplate=/usr/tmp/?????.tmp".
+    Also: Win32 version uses Windows temp directory, which might not work for
+    cygwin bash.
+7   Get error "*, \+ or \( operand could be empty" for pattern "\(.\)\1\{3}".
+    Remember flags for backreferences.
+7   When switching to Daylight Saving Time, Vim complains that a file has been
+    changed since last read.  Can we use a function that uses GMT?
+7   When completing an environment variable after a '$', check for file names
+    that contain a '$' after all have been found.
+8   When "cm" termcap entry is missing, starting gvim shouldn't complain about
+    it. (Lohner)  Try out with "vt100" entry, cm replaced with cX.
+7   When an include file starts with "../", the check for already visiting
+    this file doesn't work.  Need to simplify the file name.
+8   On Sinix SYS_NMLN isn't defined.  Include patch from Cristiano De Michele.
+7   The names and comments for the arguments of do_browse() are confusing.
+    "dflt" isn't the default file name when "initdir" is not NULL and
+    "initdir" is the default path to be used.
+7   When 'scrolloff' is exactly half the window height, "j" causes a scroll of
+    two lines at a time.  "k" doesn't do this. (Cory T. Echols)
+8   When write_viminfo() is used while there are many orphaned viminfo
+    tempfiles writing the viminfo file fails.  Give a clear error message so
+    that the user knows he has to delete the files.
+7   It's possible to redefine a script-local function with ":func
+    <SNR>123_Test()". (Krishna)  Disallow this.
+7   After ":%d" an undo reports the number of lines added as if there still
+    was one line.
+
+
+I can't reproduce these (if you can, let me know how!):
+9   NT 4.0 on NTFS file system: Editing ".bashrc" (drag and drop), file
+    disappears.  Editing ".xyz" is OK.  Also, drag&drop only works for three
+    files. (McCollister)
+8   Motif: Tear-off menu item crashes Vim on some machines.  (Netherton)  It
+    works fine for me, maybe it's a Motif problem.
+
+
+Problems that will (probably) not be solved:
+-   In a terminal with 'mouse' set such that the mouse is active when entering
+    a command line, after executing a shell command that scrolls up the
+    display and then pressing ":": Selecting text with the mouse works like
+    the display wasn't scrolled.  Vim doesn't know how much the external
+    command scrolled up the display.  Use Shift to select text.
+-   X windows: When $DISPLAY points to a X server where there is no access
+    permission, trying to connect to the X server causes an error message.
+    XtOpenDisplay() prints this directly, there is no way to avoid it.
+-   X windows: Setting 'guifontset' to an illegal value sometimes crashes Vim.
+    This is caused by a fault in a X library function, can't be solved in Vim.
+-   Motif: When adding a menu item "Find this &Symbol", the "s" in "this" will
+    be underlined, instead of in "Symbol".  Motif doesn't let us specify which
+    character gets the highlighting.
+-   Moving the cursor removes color in color-xterm.  This is a color-xterm
+    problem!  color-xterm ver. 6.1 beta 3 and later work properly.
+-   In zsh, "gvim&" changes the terminal settings.  This is a zsh problem.
+    (Jennings)
+-   Problem with HPterm under X: old contents of window is lost (Cosentino).
+-   Amiga: When using quickfix with the Manx compiler we only get the first 25
+    errors.  How do we get the rest?
+-   Amiga: The ":cq" command does not always abort the Manx compiler.  Why?
+-   Linux: A file with protection r--rw-rw- is seen readonly for others. The
+    access() function in GNU libc is probably wrong.
+-   MSDOS: When using smartdrive with write-back buffering, writing to a
+    readonly floppy will cause problems.  How to test for a writable floppy
+    first?
+-   MSDOS: Both 16 and 32 bit versions: File name expansion doesn't work for
+    names that start with a dot.  These used to be illegal file names.
+-   When doing a CTRL-Z and typing a command for the shell, while Vim is busy
+    (e.g. writing a file), the command for the shell is sometimes eaten by Vim,
+    because the terminal mode is changed from RAW to CBREAK.
+-   An old version of GNU tgoto can't handle the terminfo code for "AF".  The
+    "%p1" is interpreted as "%p" and "1", causing color not to be working.
+    Fix: Change the "%p1" in the "AF" and "AB" terminfo entries to "%p".
+    (Benzinger).
+-   When running an external command from the GUI, typeahead is going to that
+    program, not to Vim.  It looks like the shell eats the characters, Vim
+    can't get back what the external command didn't use.
+-   Win32 GUI: Error code from external command not returned in shell_error.
+    It appears that cmd.exe and command.com don't return an error code.
+-   Win32 GUI: The Toolbar is a bit too high when the flat style is being
+    used.  We don't have control over the height of the Toolbar.
+-   Win32: All files created on the day of switching from winter to summer
+    time cause "changed since editing started" messages.  It goes away when
+    the file is written again the next day, or the timezone is adjusted.
+    DJGPP version is OK. (Zaimi)  Looks like a problem with the Win32 library.
+    Rebooting doesn't help.  Time stamps look OK in directory. (Penn)
+    Is this on FAT (stores wall clock time) or NTFS (stores UTS)?
+-   Win32, MS-Windows XP: $HOME uses the wrong drive when the user profiles
+    are not on the boot disk.  This is caused by a wrong value of $HOMEDRIVE.
+    This is a bug in XP, see MSKB article 818134.
+-   SunOS 5.5.1 with Motif: The file open dialog does not have a horizontal
+    scroll bar for the "files" selection.  This is a problem in the Motif
+    libraries, get a patch from Sun.
+-   Solaris 2.6 with GTK and Perl: gvim crashes when started.  Problem with X
+    input method called from GDK code.  Without Perl it doesn't crash.
+-   VMS: Vimdiff doesn't work with the VMS diff, because the output looks
+    different.  This makes test 47 fail.  Install a Unix-compatible diff.
+-   VMS v7.1 and older: Tests 21 and 32 fail.  From VMS v7.1-2 and newer Vim
+    does not have this behavior. (Zoltan Arpadffy)
+-   Win32 GUI: mouse wheel always scrolls rightmost window.  The events arrive
+    in Vim as if the rightmost scrollbar was used.
+-   GTK with Gnome: Produces an error message when starting up:
+	Gdk-WARNING **: locale not supported by C library
+    This is caused by the gnome library gnome_init() setting $LC_CTYPE to
+    "en_US".  Not all systems support this locale name, thus causing the
+    error.  Hopefully a newer version of GTK/Gnome fixes this problem.
+-   GTK 2: With this mapping the hit-enter prompt is _sometimes_ below the
+    screen, at other times there is a grey area below the command line:
+	:nmap <F11> :if &guioptions=~'m' \| set guioptions-=m \| else \| set guioptions+=m \| endif<cr>
+-   GTK: When pasting a selection from Vim to xclipboard gvim crashes with a
+    ABRT signal.  Probably an error in the file gdkselection.c, the assert
+    always fails when XmbTextListToTextProperty() fails. (Tom Allard)
+-   When using an xterm that supports the termresponse feature, and the 't_Co'
+    termcap option was wrong when Vim started, it will be corrected when the
+    termresponse is received.  Since the number of colors changes, the
+    highlighting needs to be initialized again.  This may cause colors defined
+    in the vimrc file to be lost.
+-   On Windows NT 4.0 the number of files passed to Vim with drag&drop and
+    "Edit with Vim" is limited.  The maximum command line length is 255 chars.
+
+---------------------  extensions and improvements ----------------------
+						    *extensions-improvements*
+
+Documentation:
+8   Extend usr_27.txt a bit. (Adam Seyfarth)
+9   Merge in ideas from ~/vim/patches/tutor.txt (Gabriel Zachmann)
+7   Add a section on debugging scripts in the user manual.
+9   Make the Reference Manual more precise.  For each command mention:
+    - change to cursor position and curswant
+    - if it can be undone (u/CTRL-R) and redone (.)
+    - how it works for folded lines
+    - how it works with multi-byte characters
+9   In change.txt, remark about Javadoc isn't right.  Right alignment would
+    work too.
+8   Spread the windows commands over the other files.  For example, ":stag"
+    should be with ":tag".  Cross-link with tags to avoid too much double
+    text.
+8   Add tags for all features, e.g. "gui_running".
+7   MS-Windows: When a wrong command is typed with an ALT key, give a hint to
+    look at the help for 'winaltkeys'.
+7   Add a help.vim plugin that maps <Tab> to jump to the next tag in || and
+    <C-Tab> (and <S-Tab>) to the previous tag.
+-   Check text editor compendium for vi and Vim remarks.
+
+
+Help:
+-   First try using the ":help" argument literally, before using it as a
+    pattern.  And then match it as part of a tag.
+-   When a help item has multiple matches make it possible to use ":tn" to go
+    to the other matches.
+-   Support a way to view (and edit) .info files.
+-   Default mapping for help files: <Tab> to position cursor on next |:tag|.
+-   Implement a "sticky" help window, some help text lines that are always
+    displayed in a window with fixed height. (Guckes)  Use "~/.vimhelp" file,
+    user can edit it to insert his favorite commands, new account can contain a
+    default contents.
+-   Make 'winminheight' a local option, so that the user can set a minimal
+    height for the help window (and other windows).
+-   ":help :s^I" should expand to ":help :substitute".
+-   Make the help key (<F1>) context sensitive?
+-   Learn mode: show short help while typing commands.
+
+
+User Friendlier:
+8   Windows install with install.exe: Use .exe instead of .bat files for
+    links, so that command line arguments are passed on unmodified? (Walter
+    Briscoe)
+8   Windows install: Be able to associate Vim with a selection of file types?
+8   Windows uninstall: Have uninstal.c delete the vimfiles directories that
+    dosinst.c creates.  List the contents of the directory (recursively) if
+    the user asks for it.  Requires an implementation of "rm -rf".
+8   Remember the name of the vimrc file that was used (~/.vimrc, $VIM/_vimrc,
+    $HOME/_vimrc, etc.) and add "edit vimrc" to the File menu.
+-   Add a way to save local settings and mappings into a new plugin file.
+    ":mkplugin <file>"?
+8   Add ":plugininstall" command.  Can be used to install a plugin file that
+    includes documentation.  Let the user select a directory from
+    'runtimepath'.
+	" Vim plugin
+	<main plugin code>
+	" >>> plugin help start <<<
+	<plugin docs>
+-   Add mappings local to a window: ":map <window> ..."?
+9   Add buffer-local menu.  Should offer a choice between removing the menu or
+    disabling it.  Be careful that tear-offs don't disappear (keep one empty
+    item?).
+    Alternative: use BufEnter and BufLeave autocommands.
+8   Add file locking.  Lock a file when starting to edit it with flock() or
+    fcntl().  This patch has advisory file locking while reading/writing the
+    file: ~/vim/patches/kahn_file_locking .
+8   make a vimtutor script for Amiga and other systems.
+7   Add the arguments for configure to the ":version" output?
+
+
+Diff mode:
+8   Add a command to stop diff mode: ":set nodiff fdc = 0 noscrollbind"
+8   Use diff mode to show the changes made in a buffer (compared to the file).
+    Use an unnamed buffer, like doing:
+	new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
+7   Add cursor-binding: when moving the cursor in one diff'ed buffer, also
+    move it in other diff'ed buffers, so that CTRL-W commands go to the same
+    location.
+
+
+Folding:
+    (commands still available: zg zG zI zJ zK zp zP zq zQ zV zw zW zy zY;
+    secondary: zB zS zT zZ)
+8   Add different highlighting for a fold line depending on the fold level.
+    (Noel Henson)
+8   When a closed fold is displayed open because of 'foldminlines', the
+    behavior of commands is still like the fold is closed.  How to make the
+    user aware of this?
+8   Add an option 'foldskip' with values like 'foldopen' that specifies which
+    commands skip over a closed fold.
+8   "H" and "L" count buffer lines instead of window lines. (Servatius Brandt)
+8   Add a way to add fold-plugins.  Johannes Zellner has one for VB.
+7   When using 2html.vim, also reproduce folds as you can see them.  When
+    someone doesn't want the folds he can disable them before converting.
+    First attempt by Carl Osterwisch, 2004 May 10.
+7   When using manual folding, the undo command should also restore folds.
+-   Allow completely hiding a closed fold.  Require showing a character in
+    'foldcolumn' to avoid the missing line goes unnoticed.
+-   When pressing the down arrow of a scrollbar, a closed fold doesn't scroll
+    until after a long time.  How to make scrolling with closed folds
+    smoother?
+-   When creating a session, also store folds for buffers in the buffer list,
+    using the wininfo in wi_folds.
+-   'foldmethod' "textobject": fold on sections and paragraph text objects.
+-   Add 'hidecomment' option: don't display comments in /* */ and after //.
+-   "zu": undo change in manual fold. "zU" redo change in manual fold.  How to
+    implement this?
+-   "zJ" command: add the line or fold below the fold in the fold under the
+    cursor.
+-   'foldmethod' "syntax": "fold=3": set fold level for a region.
+-   Can set 'foldtext' to empty string: don't display any line.  How to
+    implement this?
+-   Apply a new foldlevel to a range of lines. (Steve Litt)
+-   Have some way to restrict commands to not folded text.  Also commands like
+    searches.
+
+
+Multi-byte characters:
+9   When the tail byte of a double-byte character is illegal (e.g., a CR), the
+    display is messed up (Yasuhiro Matsumoto).  Should check for illegal
+    double-byte characters and display them differently (display each single
+    byte).
+8   Add an item in 'fileencodings' to check the first lines of a file for
+    the encoding.  See Python PEP: http://www.python.org/peps/pep-0263.html.
+    To avoid getting a wrong encoding only accept something Emacs-like:
+    "-*- coding: enc-na_me.foo -*-" and "-*- coding= enc-na_me.foo -*-"
+    Match with "-\*-\s*coding[:=]\s*\([::word::-_.]\+\)\s*-\*-" and use first
+    item.
+8   Add an item in 'fileencodings' to check the first line of an XML file for
+    the encoding. <?xml version="1.0" encoding="UTF-8"?>  Or "charset=UTF-8"?
+8   The quickfix file is read without conversion, thus in 'encoding'.  Add an
+    option to specify the encoding of the errorfile and convert it.  Also for
+    ":grep".
+8   When a file was converted from 'fileencoding' to 'encoding', a tag search
+    should also do this on the search pattern. (Andrzej M. Ostruszka)
+7   When converting a file fails, mention which byte could not be converted,
+    so that the user can fix the problem.
+8   Add configure option to be able to disable using the iconv library. (Udo
+    Schweigert)
+8   Add patch from Muraoka Taro (Mar 16) to support input method on Mac?
+9   'aleph' should be set to 1488 for Unicode. (Zvi Har'El)
+8   Should add test for using various commands with multi-byte characters.
+-   Include flipcase patch: ~/vim/patches/wall.flipcase2 ?  Make it work for
+    multi-byte characters.
+8   'infercase' doesn't work with multi-byte characters.
+8   toupper() function doesn't handle byte count changes.
+8   Support four composing characters, needed for Hebrew. (Ron Aaron)
+8   "ga" should show all composing characters, also if there are more than 2.
+7   When searching, should order of composing characters be ignored?
+8   Should implement 'delcombine' for command line editing.
+8   Detect overlong UTF-8 sequences and handle them like illegal bytes.
+8   ":s/x/\u\1/" doesn't work, making uppercase isn't done for multi-byte
+    characters.
+8   UTF-8: "r" in Visual mode doesn't take composing characters.
+8   UTF-8: When there is a precomposed character in the font, use it instead
+    of a character and a composing character.  See xterm for an example.
+7   When a character can't be displayed, display its digraph instead.
+    'display' option to specify this.
+7   Use ideas for nl_langinfo() from Markus Kuhn in enc_default():
+    (www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c)
+-   GTK and Win32: Allow selecting fonts for 'guifontset' with the
+    fontselector somehow.
+-   GTK and Win32: make it possible to set the font for the menu to make it
+    possible to have 'encoding' different from the current locale.
+-   dbcs_class() only works for Japanese and Korean.  Implement this for
+    other encodings.  The "euc-jp" and "euc-kr" choices might be wrong.
+-   Find some way to automatically select the right GUI font or fontset,
+    depending on the default value of 'encoding'.
+    Irrelevant in the GTK+ 2 GUI so long as UTF-8 is used.
+    For Windows, the charset_pairs[] table could be used.  But how do we know
+    if a font exists?
+-   Do keyboard conversion from 'termencoding' to 'encoding' with
+    convert_input() for Mac GUI, RiscOS GUI, BeOS GUI.
+-   Add mnemonics from RFC1345 longer than two characters.
+    Support CTRL-K _{mnemonic}_
+7   In "-- INSERT (lang) --" show the name of the keymap used instead of
+    "lang". (Ilya Dogolazky)
+-   Make 'langmap' accept multi-byte characters.
+-   Do we need the reverse of 'keymap', like 'langmap' but with files and
+    multi-byte characters?  E.g., when using a Russian keyboard.
+-   Add the possibility to enter mappings which are used whenever normal text
+    could be entered.  E.g., for "f" command.  But not in Normal mode.  Sort
+    of opposite of 'langmap'.  Use ":tmap" command?
+-   When breaking a line, take properties of multi-byte characters into
+    account.  The "linebreak" program from Bruno Haible can do it:
+    ftp://ftp.ilog.fr/pub/Users/haible/gnu/linebreak-0.1.tar.gz
+    But it's very complicated...
+
+
+Printing:
+-   Add "page width" to wrap long lines.
+-   Win32: use a font dialog for setting 'printfont'.  Can reuse the code for
+    the 'guifont' dialog, put the common code in a separate function.
+-   Win32: when 'printfont' is empty use 'guifont'.
+-   Unix: Use some dialog box to do the obvious settings (paper size, printer
+    name, portrait/landscape, etc).
+-   Win32: add options to print dialog.  Patch from Vipin Aravind.
+-   PostScript: only works for 7-bit ASCII and EBCDIC.  Should support
+    different 'encoding' values somehow.
+-   Allow specifying the paper size, instead of using a standard size.  Same
+    units as for the margins.
+-   Support right-to-left text?
+8   Make the foreground color darkening function preserve the hue of the
+    color.
+
+
+Syntax highlighting:
+-   Patch to add highlighting for whitespace. (Tom Schumm, 2003 Jul 5)
+    use the patch that keeps using HLF_8 if HLF_WS has not
+    been given values.
+    Add section in help files for these highlight groups?
+8   Make ":syn off" use 'runtimepath' instead of $VIMRUNTIME. (Gary Johnson)
+    Should do the same for ":syn on" and ":syn manual".
+8   Support "containedin" argument for ":syn include", so that the defined
+    cluster can be added to existing syntax items.
+8   C syntax: Don't highlight {} as errors inside () when used like this:
+    "({ something })", often used in GCC code.
+8   When editing a new file without a name and giving it a name (by writing
+    it) and 'filetype' is not set, detect the filetype.  Avoid doing it for
+    ":wq file".
+8   Make conversion to HTML faster (Write it in C or pre-compile the script).
+9   There is still a redraw bug somewhere.  Probably because a cached state is
+    used in a wrong way.  I can't reproduce it...
+7   Make syntax keyword table configurable.  Set number of bits used with
+    ":syn clear [hashbits]", so that we don't need to reallocate the table.
+    minimal 4 bits, maximal 16. (Campbell)
+7   Be able to change only the background highlighting.  Useful for Diff* and
+    Search highlighting.
+8   Allow the user to add items to the Syntax menu sorted, without having to
+    change this for each release.
+8   Add a "matchcontains" for regions: items contained in the start or end
+    pattern, but not in the body.
+8   Add a "keepend-contained" argument: Don't change the end of an item this
+    one is contained in.  Like "keepend" but specified on the contained item,
+    instead of the containing item.
+8   For keywords, allow to define the size of the hash table with ":syn
+    clear".  Change KHASH_ defines into variables stored in buffer struct.
+    Use something else than linear linked list from the hash table. (Campbell)
+8   cpp.vim: In C++ it's allowed to use {} inside ().
+8   Some syntax files set 'iskeyword'.  When switching to another filetype
+    this isn't reset.  Add a special keyword definition for the syntax rules?
+    When this is done, use vim.vim syntax highlighting for help file examples,
+    but without ":" in 'iskeyword' for syntax.
+8   Add specific syntax item to match with parens/braces that don't have a
+    "%" match.  :syntax nomatch cMatchError (,{,[,),},] [contained]
+8   Highlight the text between two matching parens (e.g., with a grey
+    background) when on one of the parens or in between them.
+    Or highlight the matching paren when the cursor is on one.
+8   Add a command to jump to the next character highlighted with "Error".
+8   When using a cterm, and no ctermfg or ctermbg are defined, use start/stop
+    sequences.	Add remark in docs that :if 'term' == "term-name" should be
+    used.
+8   Add @spell cluster to String and Comment groups for many languages.  Will
+    allow spell checking. (Fleiner)
+8   When listing syntax items, try to sort the keywords alphabetically.  And
+    re-insert the [] if possible.
+8   Make it possible to use color of text for Visual highlight group (like for
+    the Cursor).
+8   "fg" and "bg" don't work in an xterm.  Get default colors from xterm with
+    an ESC sequence.  Ideas in: ~/vim/patches/vikas.xtermcolors .
+8   Make it possible to only highlight a sub-expression of a match.  Like
+    using "\1" in a ":s" command.
+8   Support for deleting syntax items:
+    :syn keyword cTodo remove this
+    :syn match cTodo remove "pattern"
+    :syn region cString remove start="this" end="that"
+8   Add possibility to sync on something else, when the syncing in one way
+    doesn't find match.  For HTML: When no {script} is found, try looking for
+    a '<'.  (Fleiner)
+7   Replace the synchronizing method with a state machine specification?
+    Should be able to start at any line in the file, search forwards or
+    backwards, and use the result of matching a pattern.
+7   Use parsing like awk, so that e.g., a ( without a matching ) can be
+    detected.
+8   Make it possible to use "inverted" highlighting, invert the original
+    character.  For Visual mode. (xterm-selection already does this).
+8   Highlight non-printable characters with "SpecialChar", linked to
+    "Special".  Display them with the digraph characters, if possible.
+7   Add "DefaultFG" and "DefaultBG" for the colors of the menu. (Martin
+    Dalecki has a patch for Motif)
+8   Highlight the clipboard-selection with a highlight group.
+8   Be able to reset highlighting to its original (default) values.
+7   Be able to write current highlighting to a file as commands, similar to
+    ":mkvimrc".
+8   Improve c.vim:
+    - Add check for unterminated strings, with a variable to switch it on:
+      "c_strict_ansi".
+    - Detect unbalanced "#endif".  Requires looking back a long way...
+8   Add an option to restrict the updating of syntax highlighting to the
+    current line while in Insert mode.
+8   When guessing value of 'background', the syntax file has already been
+    loaded (from the .gvimrc).	After changing 'background', load it again?
+8   Add ":syn resync" command, to re-parse the whole file until the current
+    display position.
+8   Should support "me" offset for a region start pattern.  To be used to
+    allow searching for the end pattern inside the match of the end pattern.
+    Example: syn region pikeXX start="([^{]" end=")" should work on "()".
+8   When using a regexp for "contains=", should delay matching with it until
+    redrawing happens.  Set a flag when a group is added, check this flag when
+    highlighting starts.
+7   Add "semitrans": Add highlighting.  E.g., make the text bold, but keep the
+    colors.  And add colors, so that Green+Red becomes Yellow.
+    E.g. for this html:
+	<B> bold text <I> italic+bold text </B> italic text </I>
+7   Wild idea: Not only set highlighting, but also change what is displayed
+    (e.g., remove characters, so that "<B>bold</B>" can be shown as "bold"):
+	:syn region boldstuff start="<B>" display="" end="</B>" display=""
+7   CTRL-] checks the highlight group for finding out what the tag is.
+7   Add an explanation how a list of words can be used to highlight misspelled
+    words.
+8   Add spell checking.  Use "ispell -a" somehow.
+    ~/vim/patches/wm_vim-5_4d.zip  can be used as an example (includes ispell
+    inside Vim).  Gautam Iyer has an example with "aspell".  "engspchk" from
+    Charles Campbell is a good way.  Support for approximate-regexps will help
+    (agrep http://www.tgries.de/agrep/).
+7   Command line completion for ":find" should search in 'path'.
+8   Add more command line completion for :syntax.
+8   Add more command line completion for :highlight.
+8   Add more command line completion for :sign.
+7   Should find a better way to parse the :syntax and :highlight commands.
+    Use tables or lists that can be shared by parsing for execution and
+    completion?
+8   Add ColorSchemePost autocommand event, so that scripts can set up their
+    highlighting. (Salman Halim)
+7   Add a few sets of colors (e.g. Borland Turbo C one).  With a menu to
+    select one of the sets.
+8   Add offsets to sub-matches: "\(a*\) *"he=e1-1
+    'e' is end of match 'e1' is end of sub-match 1, 's2' is start of submatch
+    2, etc.
+8   In Insert mode, when there are typeahead characters, postpone the
+    highlighting (for "." command).
+8   Syncing on comments isn't 100% correct when / / lines mix with / * and * /.
+    For example: What about a line that starts with / / and contains * /?
+8   Ignore / * and  * / inside strings, when syncing.
+7   Build a few more syntax files from the file "/usr/share/misc/vgrindefs":
+    ISP, LDL, Icon, ratfor.  And check "nedit/source/highlight.c".
+6   Add possibility to have background color continue until the right edge of
+    the window.  Useful for comment blocks and function headings. (Rogall)
+-   Make it possible to add "contains" items for all items in a group.	Useful
+    when extending an already existing syntax file.
+-   Add line-continuation pattern for non-syncing items too?
+-   Add possibility to highlight specific columns (for Fortran).  Or put a
+    line in between columns (e.g. for 'textwidth').
+    Patch to add 'hlcolumn' from Vit Stradal, 2004 May 20.
+-   Add possibility to highlight the whole line, including the right margin
+    (for comment blocks).
+-   Add 'hlmatch' option: List of flags:
+    'c': highlight match for character under the cursor.
+    'b': highlight the previous (, and its match.
+    'a': highlight all text from the previous ( until its match.
+	 Also for {}, <>, etc.?
+    'e': highlight all braces without a match (slow?)
+    OR: add an argument "cursor" to the syntax command, which means that the
+    region/match/keyword is only highlighted when the cursor is on it.
+    (Campbell)
+    Or do it like Elvis: define text objects and how to highlight them around
+    the cursor. (Iain Truskett)
+7   Make it possible to use all words in the tags files as Keyword.
+    Can also be done with a script (but it's slow).
+7   Make it possible to call a ":" command when a match is found.  Should
+    allow for adding keywords from the text (e.g. variables that are set).
+    And allows for sections with different highlighting.
+7   Add highlight group for commandline: "Commandline".  Make sure it
+    highlights the command line while typing a command, and any output from
+    messages.  And external commands?
+8   Make a version that works like less, but with highlighting: read stdin for
+    text, exit at end of file, don't allow editing, etc.  moreim?  lessim?
+7   SpecialKey highlighting overrules syntax highlighting.  Can't give an
+    unprintable char another color.  Would be useful for ^M at end of line.
+
+
+Built-in script language:
+8   Add referring to key options with "&t_xx".  Both for "echo &t_xx" and
+    ":let &t_xx =".  Useful for making portable mappings.
+8   Allow range for ":exec".  Pass it on to the executed command. (Webb)
+8   exists("&&option") tests if 'option' is actually implemented.  Useful for
+    'shellslash', for example.
+7   Be able to call a function while passing on a variable number of
+    arguments:
+	:function Foo(abc, ...)
+	:  call Bar(a:abc, a:*)
+    Charles Campbell has a patch for this
+8   Have a look at VSEL.  Would it be useful to include? (Bigham)
+8   Add ":fungroup" command, to group function definitions together.  When
+    encountered, all functions in the group are removed.  Suggest using an
+    obscure name to avoid name clashes.  Require a ":fungroup END" in the same
+    sourced file?  Assume the group ends at the end of the file.  Handle
+    nested packages?
+    Alternative: Support packages.  {package-name}:{function-name}().
+    Packages are loaded automatically when first used, from
+    $VIMRUNTIME/packages (or use a search path).
+7   Make globpath() also work with "**" and upwards search. (Brian Medley)
+7   Pre-parse or compile Vim scripts into a bytecode.
+    1. Put the bytecode with the original script, with an ":if
+       has('bytecode')" around it, so that it's only used with a Vim that
+       supports it.  Update the code with a command, can be used in an
+       autocommand.
+    2. Use a ".vic" file (like Python use .pyc).  Create it when writing a
+       .vim file.  Problem: distribution.
+    3. Use a cache directory for each user.  How to recognize which cached
+       file belongs to a sourced script?
+7   Add "n" flag to search() function, just like searchpair(). (Alexey
+    Marinichev)
+8   Add ":n" to fnamemodify(): normalize path, remove "../" when possible.
+    Aric Blumer has a patch for this.
+7   Add argument to winwidth() to subtract the space taken by 'foldcolumn',
+    signs and/or 'number'.
+8   Add functions:
+	multibyteidx(string, idx) Byte index in multi-byte character.
+				Patch by Ilya Sher, 2004 Feb 25
+	menuprop({name}, {idx}, {what})
+				Get menu property of menu {name} item {idx}.
+				menuprop("", 1, "name") returns "File".
+				menuprop("File", 1, "n") returns "nmenu
+				File.Open..." argument.
+				Patch by Ilya Sher, 2004 Apr 22
+	mapname({idx}, mode)	return the name of the idx'th mapping.
+				Patch by Ilya Sher, 2004 Mar 4.
+	match({pat}, {string} [,start] [,count]) get index of count'th match
+				Patch by Ilya Sher, 2004 Mar 31
+	sprintf(format, arg, ..) How to prevent a crash???
+	mousex() mousey()	get position of mouse pointer (patch by Ross
+				Presser)
+	attributes()		return file protection flags "drwxrwxrwx"
+	mkdir(dir)		Create directory
+	copy(from, to)		Copy a file
+	perl(cmd)		call Perl and return string
+	shorten(fname)		shorten a file name, like home_replace()
+	input(prompt, complete)	like input() but do specified completion
+	inputrl()		like input() but right-to-left
+	virtualmode()		add argument to obtain whether "$" was used in
+				Visual block mode.
+	tagtype(tag)		get type of tag (also checks if it exists)
+	getacp()		Win32: get codepage (Glenn Maynard)
+	tr(expr, from, to)	translate chars (Patch from Ron Aaron, Apr 8
+				2004)
+	find()			find file in 'path' (patch from Johannes
+				Zellner 2001 Dec 20)
+	realname()		Get user name (first, last, full)
+				user_fullname() patch by Nikolai Weibull, Nov
+				3 2002)
+	getfperm()		file permissions, in form "rwxrwxrwx"
+				(patch from Nikolai Weibull 2003 Jan 13)
+	getftype()		"file", "dir", "link", "other"?
+				(patch from Nikolai Weibull 2003 Jan 13)
+	setbufline()		set line in any buffer (patch from Yegappan
+				Lakshmanan, 2003 Jan 21)
+	getbufline()		get line from any buffer
+	deletebufline()		delete line in any buffer
+	appendbufline()		append line in any buffer
+	winnr("$")		Get number of windows.  (patch from Nikolai
+				Weibull 2003 Jan 13) (another patch from
+				Yegappan Lakshmanan, 2003 Aug 31)
+	search()		Add optional offset argument.
+				Add 'n' flag.  (patch from Nikolai Weibull
+				2003 Jan 13)
+	sort()			Sort a newline-separated string.  Also:
+				":sort".
+	libcall()		Allow more than one argument.
+	libcallext()		Like libcall(), but using a callback function
+				to allow the library to execute a command or
+				evaluate an expression.
+	confirm()		add "flags" argument, with 'v' for vertical
+				layout and 'c' for console dialog. (Haegg)
+				Flemming Madsen has a patch for the 'c' flag
+				(2003 May 13)
+	system({cmd}, {expr})	Filter {expr} through the shell command
+				{cmd} and return the result.
+				(Patch from Yegappan Lakshmanan)
+	raisewin()		raise gvim window (see HierAssist patch for
+				Tcl implementation ~/vim/HierAssist/ )
+	gettext()		Translate a message.  (Patch from Yasuhiro
+				Matsumoto) How to get the messages into the
+				.po files?
+	strrep()		Repeat a string (patch from Christophe Poucet,
+				2003 Sep 12, also contains XX)
+	char2hex()		convert char string to hex string.  XX
+	hex2char()		convert hex string to char string. XX
+7   Make bufname("'0") return the buffer name from mark '0.  How to get the
+    column and line number?  col("'0") currently returns zero.
+8   argc() returns 0 when using "vim -t tag".  How to detect that no file was
+    specified in any way?  To be able to jump to the last edited file.
+8   Pass the executable name to the Vim scripts in some way.  As v:argv0?
+8   Add command arguments with three dashes, passed on to Vim scripts.
+8   When starting to source a vim script, delete all functions that it has
+    previously defined?  Avoids using ":fun!" all the time.
+7   Add optional arguments to user functions:
+	:func myFunc(arg1, arg2, arg3 = "blah", arg4 = 17)
+6   User functions: Functions local to buffer "b:func()"?
+8   Add ":let var[{expr}] = {expr}".  When past the end of "var" just ignore.
+8   The "= register should be writable, if followed by the name of a variable,
+    option or environment variable.
+8   ":let &option" should list the value of the option.
+7   Add synIDlist(), making the whole list of syntax items on the
+    stack available (separated with '\n').
+8   Add autocommand-event for when a variable is changed:
+	:au VarChanged {varname} {commands}
+8   Add "has("gui_capable")", to check if the GUI can be started.
+8   Add possibility to use variables like registers: characterwise (default),
+    linewise (when ending in '\n'), blockwise (when ending in '\001').	reg0,
+    rega, reg%, etc.  Add functions linewise({expr}), blockwise({expr}) and
+    charwise({expr}).
+7   Make it possible to do any command on a string variable (make a buffer
+    with one line, containing the string).  Maybe add an (invisible) scratch
+    buffer for this?
+	result = scratch(string, command)
+	result = apply(string, command)
+	result = execute(string, command)
+    "command" would use <> notation.
+    Does scratch buffer have a number?  Or re-use same number?
+7   Add function to generate unique number (date in milliseconds).
+7   Automatically load a function from a file when it is called.  Need an
+    option for the search path. (Sekera)
+7   Persistent variables: "p:var"; stored in viminfo file and sessions files.
+7   Include support for arrays?  Patch from Robert Webb.
+    This is restricted to fixed-size arrays indexed by number.  Better: Use
+    associative arrays: a[5] = 3, a["some"] = 'x'. Implement by translating
+    into ordinary variables: a[5] is "-a-5", a["some"] is "a-some", a[5][6] is
+    "a-5-6".  But how to do array assignment and concatenation?
+    Alternative: use dictionaries, like Python.
+
+
+Robustness:
+8   This pattern in syntax/java.vim causes a recursive call of regmatch():
+	syn match   javaStringError      +"\([^"\\]\|\\.\)*$+
+    A long line with a " in it can cause a crash when it runs out of stack
+    space (on systems where this isn't caught).  How can we catch this for
+    more systems?
+
+
+Performance:
+8   Loading plugins takes startup time.  Only load the part that is used to
+    trigger the rest, and load the rest when it's needed?
+8   Turn b_syn_ic and b_syn_containedin into b_syn_flags.
+9   Loading menu.vim still takes quite a bit of time.  How to make it faster?
+8   in_id_list() takes much time for syntax highlighting.  Cache the result?
+7   setpcmark() shifts the jumplist, this takes quite a bit of time when
+    jumping around.  Instead use an index for the start?
+8   When displaying a space with only foreground highlighting, it's the same
+    as a space without attributes.  Avoid displaying spaces for the "~" lines
+    when starting up in a color terminal.
+8   Avoid alloc() for scratch buffer use, esp. in syntax.c.  It's very slow on
+    Win16.
+9   Setting GUI options in the console (e.g., 'guifont') should not cause a
+    redraw.
+8   Profiling shows that in_id_list() is used very often for C code.  Can this
+    function be improved?
+8   For an existing file, the page size of the swap file is always the
+    default, instead of using the block size of the device, because the swap
+    file is created only after setting the block size in mf_open().  How can
+    this be improved?
+8   Set default for 'ttyscroll' to half a screen height?  Should speed up
+    MS-DOS version. (Negri)
+7   C syntax highlighting gets a lot slower when adding a region for folding
+    from { to }. (Charles Campbell)  Inserting a "{" is very slow. (dman)
+7   HTML syntax highlighting is slow for long lines.  Try displaying
+    http://www.theregister.co.uk/content/4/22908.html. (Andre Pang)
+7   Check how performance of loading the wordlist can be improved (adding a
+    lot of abbreviations).
+7   DOS console: Add t_DL support, to make scrolling faster.
+7   Compile Ex commands to byte codes.  Store byte codes in a vim script file
+    at the end, after "compiled:.  Make it look like a single comment line
+    for old Vim versions.  Insert first line "Vim script compiled <timestamp>.
+    Only used compiled code when timestamp matches the file stat.
+    Add command to compile a vim script and add it to the file in-place.
+    Split Ex command executing into a parsing and executing phase.
+    Use compiled code for functions, while loops, etc.
+8   When editing a file with extremely long lines (e.g., an executable), the
+    "linerest" in readfile() is allocated twice to be able to copy what was
+    read so far.  Use realloc() instead?  Or split the line when allocating
+    memory fails and "linerest" is big (> 100000)?
+8   When defining autocommands (e.g., from $VIMRUNTIME/filetype.vim), need to
+    compare each pattern with all existing patterns.  Use a hash code to avoid
+    using strcmp() too often?
+7   Include turbo_loader patches, speeding up reading a file?
+    Speed up reading a file by reading it into a fixed-size buffer, creating
+    the list of indexes in another buffer, and then copying the result into a
+    memfile block with two copies.  Then read the next block into another
+    fixed-size buffer, create the second list of indexes and copy text from
+    the two blocks to the memfile block.
+7   do_cmdline(): Avoid that the command line is copied to allocated memory
+    and freed again later all the time.  For while loops, and for when called
+    with an argument that can be messed with.
+    Generic solution: Make a struct that contains a pointer and a flag that
+    indicates if the pointer should be freed when replaced.
+7   Check that the file size is not more than "sizeof(long)".
+-   Further improve finding mappings in maphash[] in vgetorpeek()
+8   Syntax highlighting is slow when deleting lines.  Try in
+    $VIMRUNTIME/filetype.vim.
+-   "out of memory" after deleting (1,$d) and changing (:%s/^/> /) a lot of
+    lines (27000) a few times.  Memory fragmentation?
+-   Have a look at how pdksh does memory allocation (alloc.c). (Dalecki)
+-   Do profiling on:
+    - :g/pat/normal cmd
+    - 1000ii<Esc>
+    - deleting 10Mbyte worth of lines (netscape binary)
+    - "[i" and "[d" (Yegappan Lakshmanan)
+    - ":g/^/m0" on a 450Kbyte file.  And the "u".
+    - highlighting "~/vim/test/longline.tex", "~/vim/test/scwoop.tcl" and
+      "~/vim/test/lockup.pl".
+    - loading a syntax file to highlight all words not from a dictionary.
+    - editing a vim script with syntax highlighting on (loading vim.vim).
+7   Screen updating can be further improved by only redrawing lines that were
+    changed (and lines after them, when syntax highlighting was used, and it
+    changed).
+    - On each change, remember start and end of the change.
+    - When inserting/deleting lines, remember begin, end, and line count.
+-   Use macros/duarte/capicua for profiling.  Nvi 1.71 is the fastest!
+-   When using a file with one long line (1Mbyte), then do "$hhhh", is still
+    very slow.  Avoid calling getvcol() for each "h"?
+-   Executing a register, e.g. "10000@@" is slow, because ins_typebuf has to
+    move the previous commands forward each time.  Pass count from
+    normal_cmd() down to do_execreg().
+-   Repeating insert "1000i-<Esc>" displays --INSERT-- all the time, because of
+    the <Esc> at the end.  Make this work faster (disable redrawing).
+-   Avoid calls to plines() for cursor line, use w_cline_height.
+-   After ":set nowrap" remove superfluous redraw with wrong hor. offset if
+    cursor is right of the screen.
+8   Make CTRL-C on Unix generate a signal, avoid using select() to check for a
+    CTRL-C (it's slow).
+
+
+Code size:
+8   GUI: When NO_CONSOLE is defined, more code can be excluded.
+-   Put getline() and cookie in a struct, so only one argument has to be
+    passed to do_cmdline() and other functions.
+8   Make a GUI-only version for Unix?
+8   In buf_write _() isn't needed when setting errmsg, do it once when using
+    it.
+7   When compiling with a GUI-only version, the code for cterm colors can be
+    left out.
+8   When compiled with a GUI-only version, the termcap entries for terminals
+    can be removed.
+8   Can the check for libelf in configure.in be removed?
+
+
+Messages:
+8   When using ":q" in a changed file, the error says to "add !".  Add the
+    command so that beginners understand it: "use :q!".
+8   For 'verbose' level 12 prints commands from source'ed files.  How to skip
+    lines that aren't executed?  Perhaps move the echoing to do_cmdline()?
+8   Use 'report' for ":bdel"?  (Krishna)  To avoid these messages when using a
+    script.
+8   "vim --version" output goes to stderr, should be stdout.  Can all output
+    from messages using printf() go to stdout?
+-   Delete message after new command has been entered and have waited for key.
+    Perhaps after ten seconds?
+-   Make message history available in "msg" variables: msg1, msg2, .. msg9.
+9   Check handling of overwriting of messages and delays:
+    Very wrong: errors while redrawing cause endless loop.
+    When switching to another file and screen scrolls because of the long
+    message and return must be typed, don't scroll the screen back before
+    redrawing.
+7   Add an option, which is a regexp, that disables warning messages which
+    match that regexp (Tsirkin).
+8   When address range is wrong you only get "Invalid range".  Be a bit more
+    specific: Negative, beyond last line, reverse range?  Include the text.
+8   Make it possible to ignore errors for a moment ('errorignore'?).  Another
+    option to switch off giving error messages ('errorquiet'?).  Also an option
+    not to give any messages ('quiet')?  Or ":quiet on", ":quiet off".
+    Careful: For a severe error (out of memory), and when the user starts
+    typing, error messages must be switched back on.
+    Also a flag to ignore error messages for shell commands (for mappings).
+-   Option to set time for emsg() sleep. Interrupt sleep when key is typed?
+    sleep before second message?
+8   In Ex silent mode or when reading commands from a file, what exactly is
+    not printed and what is?  Check ":print", ":set all", ":args", ":vers",
+    etc.  At least there should be no prompt. (Smulders)  And don't clear the
+    screen when reading commands from stdin. (Kendall)
+    --> Make a difference between informative messages, prompts, etc. and
+	error messages, printing text, etc.
+8   Window should be redrawn when resizing at the hit-enter prompt.
+    Also at the ":tselect" prompt.  Find a generic solution for redrawing when
+    a prompt is present (with a callback function?).
+
+
+Screen updating:
+7   Add a string to the 'display' option to make CTRL-E and CTRL-Y scroll one
+    screen line, also if this means the first line doesn't start with the
+    first character (like what happens with a single line that doesn't fit).
+-   screen_line():
+    - insert/delete character stuff.
+    - improve delete rest of line (spaces at end of line).
+-   When moving or resizing window, try to avoid a complete redraw (esp. when
+    dragging the status line with the mouse).
+-   When 'lazyredraw' set, don't echo :ex commands?  Need a flag to redraw when
+    waiting for a character.
+8   Add a ":refresh [winnr]" command, to force updating a window.  Useful from
+    an event handler where ":normal" can't be used.  Also useful when
+    'lazyredraw' is set in a mapping.
+7   Make 'list' and 'linebreak' work together.
+7   Add "nbsp" in 'listchars'?  Patch from David Blanchet, 2003 Jul 28.
+
+
+Scrolling:
+8   Add "zm" command: scroll horizontally to put the cursor in the middle.
+6   Add option to set the overlap for CTRL-F and CTRL-B. (Garhi)
+-   extend 'scrollbind' option: 'scrollopt' words "search", "relative", etc..
+    Also 'e'xecute some commands (search, vertical movements) in all bound
+    windows.
+7   Add 'scrollbind' feature to make the offset of one window with the next
+    one equal to the window height.  When editing one file in both windows it
+    looks like each window displays a page of the buffer.
+-   Allow scrolling by dragging with the mouse (grab a character and move it
+    up/down).  Like the "hand" in Acrobat reader.  Use Alt-LeftMouse for this?
+    (Goldfarb)
+-   Add command to execute some commands (search, vertical movements) in all
+    bound windows.
+-   Add 'search' option to 'scrollopt' to allow 'scrollbind' windows to
+    be bound by regexp searches
+-   Add "z>" and "z<": scroll sideways one screenfull. (Campbell)
+-   Add option to set the number of lines when not to scroll, instead of the
+    fixed number used now (for terminals that scroll slow with a large number
+    of lines but not with a single line).
+
+
+Autoconf:
+8   Should use acconfig.h to define prototypes that are used by autoheader.
+8   Some compilers don't give an error for "-OPT:Olimit" but a warning. (Webb)
+    Add a check for the warning, so that "Olimit" can be added automatically?
+-   Autoconf: Use @datadir@ for the system independent files.  Make sure the
+    system dependent and system independent files are separated. (Leitner).
+-   Add autoconf check for waitpid()/wait4().
+-   Remove fcntl() from autoconf, all systems have it?
+-   Set default for 'dictionary', add search for dictionary to autoconf.
+
+
+Perl interface:
+8   Rename typemap file to something else?
+7   Add patch from Benoit Cerrina to integrate Vim and Perl functions better.
+    Now also works for Ruby (2001 Nov 10)
+7   Make buffers accessed as Perl arrays. (Clark)
+7   Make it possible to compile with non-ANSI C?
+6   Tcl/Tk has the "load" command: load a shared library (.so or .dll).
+
+
+Shared libraries:
+6   Add support for loading shared libraries, and calling functions in it.
+	:libload internal-name libname
+	:libunload internal-name
+	:liblist
+	:libcall internal-name function(arg1, arg2, ...)
+	:libcall function(arg1, arg2, ...)
+    libcall() can have only one integer or String argument at the moment.
+6   Have a look on how Perl handles loading dynamic libraries.
+
+
+Tags:
+8   Add a command to jump to a certain kind of tag.  Allow the user to specify
+    values for the optional fields.  E.g., ":tag size type=m".
+8   Add a function that returns the line in the tags file for a matching tag.
+    Can be used to extract more info (class name, inheritance, etc.) (Rico
+    Hendriks)
+7   Count before CTRL-]: jump to N'th match
+8   Scope arguments for ":tag", e.g.: ":tag class:cPage open", like Elvis.
+8   When output of ":tselect" is long, getting the more-prompt, should be able
+    to type the tag number directly.
+7   Add a tag-select window.  Works like ":cwindow".  (Michal Malecki)
+7   Add the possibility to use the "-t {tag}" argument multiple times.  Open a
+    window for each tag.
+7   Make output of ":tselect" a bit nicer.  Use highlighting?
+7   Highlight the "tag 1 of >2" message.  New highlight group, or same as "hit
+    bottom" search message.
+7   When using ":tag" at the top of the tag stack, should add another entry,
+    so CTRL-T can bring you back to where you are now AND to where you were
+    before the previous ":tag" command. (Webb)
+7   When using CTRL-] on someClass::someMethod, separate class from method and
+    use ":ta class:someClass someMethod".
+    Include C++ tags changes (Bertin).	Change "class::func" tag into "func"
+    with "class=class"?  Docs in oldmail/bertin/in.xxx.
+7   Add ":tagargs", to set values for fields:
+	:tagargs class:someclass file:version.c
+	:tagargs clear
+    These are then the default values (changes the order of priority in tag
+    matching).
+7   Support for "gtags" and "global"?  With ":rtag" command?
+    There is an example for how to do this in Nvi.
+    Or do it like Elvis: 'tagprg' and 'tagprgonce' options. (Yamaguchi)
+    The Elvis method is far more flexible, do it that way.
+7   Support "col:99" extra field, to position the cursor in that column.  With
+    a flag in 'cpoptions' to switch it off again.
+7   Better support for jumping to where a function or variable is used.  Use
+    the id-utils, with a connection to "gid" (Emacs can do it too).  Add
+    ":idselect", which uses an "ID" database (made by "mkid") like "tselect".
+7   Add 'taglistfiles' option, show file name and type when listing matching
+    tags name with CTRL-D completion.  Patch from Yegappan Lakshmanan.
+
+
+Security:
+-   nothing at the moment
+
+
+Win32 GUI:
+8   Make debug mode work while starting up (vim -D).  Open console window for
+    the message and input?
+7   The Python interface only works with one version of Python, selected at
+    compile time.  Can this be made to work with version 2.1 and 2.2
+    dynamically?
+7   GvimExt: when there are several existing Vims, move the list to a submenu.
+    (Mike McCollister)
+8   When using "Edit with Vim" for one file it changes directory, when several
+    files are selected and using "Edit with single Vim" the directory isn't
+    changed.  At least change directory when the path is the same for all
+    files.  Perhaps just use the path of the first file or use the longest
+    common part of the path.
+8   Add font argument to set the lfCharSet. (Bobcik)
+8   Somehow automatically detect the system language and set $LANG, so that
+    gettext and menus work.
+8   Could keep console open to run multiple commands, to avoid the need to hit
+    return in every console.
+    Also: Look at how Emacs does runs external commands:
+	http://www.cs.washington.edu/homes/voelker/ntemacs.html.
+8   Need a separate PopUp menu for modeless selection.  Need two new commands:
+    Copy selection to clipboard, Paste selection (as typed text).
+8   Support copy/paste for other file formats.  At least HTML, perhaps RTF.
+    Add "copy special" and "paste special" commands?
+7   Use different default colors, to match the current Windows color scheme.
+    Sys_WindowText, Sys_Window, etc. (Lionel Schaffhauser)
+7   Use <C-Tab> to cycle through open windows (e.g., the find dialog).
+7   <Esc> should close a dialog.
+7   Keep the console for external commands open.  Don't wait for a key to be
+    hit.  Re-open it when the user has closed it anyway.  Or use a prepended
+    command: ":nowait {cmd}", or ":quiet", which executes {cmd} without any
+    prompts.
+7   Should be able to set an option so that when you double click a file that
+    is associated with Vim, you can either get a new instance of Vim, or have
+    the file added into an already running Vim.
+7   The "-P" argument only works for the current codepage.  Use wide
+    functions to find the window title.
+
+
+GUI:
+8   Add GTK 2.3 file dialog support.  Patch by Grahame Bowland, 2004 Mar 15,
+    but it doesn't use "initdir" or "dflt".
+8   Make inputdialog() work for Photon, Amiga, RiscOS.
+-   <C--> cannot be mapped.  Should be possible to recognize this as a
+    normal "-" with the Ctrl modifier.
+7   Implement ":popup" for other systems than Windows.
+8   Implement ":tearoff" for other systems than Win32 GUI.
+6   Implement ":untearoff": hide a torn-off menu.
+8   When using the scrollbar to scroll, don't move the cursor position.  When
+    moving the cursor: scroll to the cursor position.
+9   Make <S-Insert> paste from the clipboard by default. (Kunze)
+7   Menu local to a buffer, like mappings.  Or local to a filetype?
+8   In Buffers menu, add a choice whether selecting a buffer opens it in the
+    current window, splits the window or uses ":hide".
+8   Dragging the mouse pointer outside of a Vim Window should make the text
+    scroll.  Return a value from gui_send_mouse_event() to the machine
+    specific code to indicate the time in which the event should be repeated.
+8   Make it possible to ignore a mouse click when it's used to give Vim (gvim)
+    window focus.  Also when a mouse click is used to bring a window to front.
+8   Make the split into system independent code and system specific code more
+    explicit.  There are too many #ifdefs in gui.c.
+    If possible, separate the Vim code completely from the GUI code, to allow
+    running them in separate processes.
+8   Support a background bitmap.  Useful for marking a column.  Patch from
+    Heather Downs (GTK) and Vince Negri (Win32).
+7   X11: Support cursorColor resource and "-cr" argument.
+8   X11 (and others): CTRL-; is not different from ';'.  Set the modifier mask
+    to include CTRL for keys where CTRL produces the same ASCII code.
+7   Add some code to handle proportional fonts?  Need to draw each character
+    separately (like xterm).  Also for when a double-width font is not exactly
+    double-width. (Maeda)
+8   Should take font from xterm where gvim was started (if no other default).
+8   Selecting font names in X11 is difficult, make a script or something to
+    select one.  Martin Dalecki has a font selector for Motif, but it needs a
+    bit more work.
+7   Motif: use the menu font consistently.  Patch from Martin Dalecki 2002 Jan
+    11.
+8   Visual highlighting should keep the same font (bold, italic, etc.).
+8   Add flag to 'guioptions' to not put anything in the clipboard at all?
+8   Should support a way to use keys that we don't recognize yet.  Add a
+    command that adds entries to special_keys somehow.	How do we make this
+    portable (X11, Win32, ..)?
+7   Add a flag to 'guioptions' that tells not to remove inactive menu items.
+    For systems where greying-out or removing menu items is very slow.  The
+    menu items would remain visibly normally, but not do anything.
+7   Add ":minimize" and ":maximize", which iconize the window and back.
+    Useful when using gvim to run a script (e.g. 2html.vim).
+7   X11: Is it possible to free allocated colors, so that other programs can
+    use them again?  Otherwise, allow disabling allocating the default colors.
+    Or allocate an own colormap (check UAE).  With an option to use it.  For
+    the commandline, "-install" is mostly used for X11 programs.
+7   Add command line argument for "gvim" not to start the GUI.  Sort of the
+    inverse of "vim -g". (Vikas)
+7   Should support multi-column menus.
+-   Should add option for where to put the "Help" menu: like Motif at the far
+    right, or with the other menus (but still at the right).
+-   Add menu item to "Keep Insert mode".
+8   ":mkgvimrc" command, that includes menus.
+6   Big change: Move GUI to separate program "vimgui", to make startup of vim a
+    lot faster, but still be able to do "vim -g" or ":gui".
+7   More explicit mouse button binding instead of 'mousemodel'?
+7   Add option to set the position of the window on the screen.  'windowpos',
+    which has a value of "123,456": <x>,<y>.
+    Or add a command, like ":winsize"?
+7   Add toolbar for more GUIs.
+8   Make it possible to use "amenu icon=BuiltIn##", so that the toolbar item
+    name can be chosen free.
+7   Make it possible to put the toolbar on top, left, right and/or bottom of
+    the window?  Allows for softkey-like use.
+6   Separate the part of Vim that does the editing from the part that runs the
+    GUI.  Communicate through a pseudo-tty.  Vim starts up, creates a
+    pty that is connected to the terminal.  When the GUI starts, the pty is
+    reconnected to the GUI process.  When the GUI stops, it is connected to
+    the terminal again.  Also use the pty for external processes, it looks
+    like a vt100 terminal to them.  Vim uses extra commands to communicate GUI
+    things.
+7   Motif: For a confirm() dialog <Enter> should be ignored when no default
+    button selected, <Esc> should close the dialog.
+-   Motif steals <F10> from us, to pop up menus with the keyboard.  How do we
+    get it back if we want it?
+-   Motif: add 3D shading for the menu entries?  Patch from Martin Dalecki.
+-   Paste in Insert mode should not do autowrap etc.  Or maybe this should be
+    changeable with an option?
+-   Put a nice picture in the icon (but how do we do that?).
+7   When using a pseudo-tty Vim should behave like some terminal (vt52 looks
+    simple enough). Terminal codes to/from shell should be translated.
+-   Would it be useful to be able to quit the GUI and go back to the terminal
+    where it was started from?
+7   Support "-visual <type>" command line argument.
+
+
+VMS:
+-   Improvement: rewrite term/TTY handling.
+-   Improvement: create VMS GTK runtime libraries on OpenVMS 7.1-2 (today GTK
+    works just on 7.3).
+
+
+Autocommands:
+9   Make sure that side effects of autocommands are handled correctly.  Don't
+    execute autocommands when a buffer or window is halfway some changes.
+    Move all apply_autocmds() calls to a higher level where needed.
+8   Add ScriptReadCmd event: used to load remote Vim scripts, e.g.
+    "vim -u http://mach/path/vimrc".
+8   Use another option than 'updatetime' for the CursorHold event.  The two
+    things are unrelated for the user (but the implementation is more
+    difficult).
+8   Also trigger CursorHold in Insert mode?
+7   Add autocommand event for when a buffer cannot be abandoned.  So that user
+    can define the action taking (autowrite, dialog, fail) based on the kind
+    of file. (Yakov Lerner)  Or is BufLeave sufficient?
+8   Can't use ":normal" in CursorHold autocommands.  Make the CursorHold event
+    insert a special key code, and call the autocommand functions from a
+    higher level, so that vgetc() isn't used recursively.
+8   Autocommands should not change registers.  And marks?  And the jumplist?
+    And anything else?
+8   Autocommand for when modified files have been found, when getting input
+    focus again (e.g., FileChangedFocus).
+    Check when: getting focus, jumping to another buffer, ...
+8   Add autocommands, user functions and user commands to ":mkvimrc".
+8   Add "TagJumpFile" autocommand: When jumping to another file for a tag.
+    Can be used to open "main.c.gz" when "main.c" isn't found.
+6   Add KeymapChanged event, so that the effects of a different keymap can be
+    handled (e.g., other font) (Ron Aaron)
+7   Add a way to skip an autocommand if going from one *.c file to another *.c
+    file.
+7   When trying to open a directory, don't load the file but trigger an
+    autocommand event OpenDirectory.
+7   Add file type in front of file pattern: <d> for directory, <l> for link,
+    <x> for executable, etc.  <&xxx> for Risc OS.  With commas to separate
+    alternatives.  The autocommand is only executed when both the file type
+    AND the file pattern match. (Leonard)
+5   Add option that specifies extensions which are to be discarded from the
+    file name.  E.g. 'ausuffix', with ".gz,.orig".  Such that file.c.gz will
+    trigger the "*.c" autocommands.  (Belabas)
+7   Add something to break the autocommands for the current event, and for
+    what follows.  Useful for a "BufWritePre" that wants to avoid writing the
+    file.
+8   When editing "tt.gz", which is in DOS format, 'fileformat' stays at
+    "unix", thus writing the file changes it.  Somehow detect that the read
+    command used dos fileformat.  Same for 'fileencoding'.
+8   Add buffer-local autocommands?  Reduces overhead for autocommands that
+    trigger often (inserting a character, switching mode).
+	:au Event <buffer> do-something
+    E.g.:
+	:au BufEnter <buffer> menu enable ...
+	:au BufLeave <buffer> menu disable ...
+    Patch from Yakov Lerner, including test (2004 Jan 7).
+-   Add events to autocommands:
+    Error	    - When an error happens
+    NormalEnter	    - Entering Normal mode
+    InsertEnter	    - Entering Insert mode
+    ReplaceEnter    - Entering Replace mode
+    CmdEnter	    - Entering Cmdline mode
+    VisualEnter	    - Entering Visual mode
+    CmdUndefined    - Like FuncUndefined but for user commands.
+    *Leave	    - Leaving the mode
+    SearchPost	    - After doing a search command (e.g. to do "M")
+    PreDirChanged/PostDirChanged
+		    - Before/after ":cd" has been used (for changing the
+		      window title)
+    BufReadAction   - replaces reading a file
+    BufWriteAction  - replaces writing a file
+    ShutDown	    - when the system is about to shut down
+    InsertCharPre   - user typed character Insert mode, before inserting the
+		      char.  Pattern is matched with text before the cursor.
+		      Set v:char to the character, can be changed.
+		      (not triggered when 'paste' is set).
+    InsertCharPost  - user typed a character in Insert mode, after inserting
+		      the char.
+    BufModified	    - When a buffer becomes modified, or unmodified (for
+		      putting a [+] in the window title or checking out the
+		      file from CVS).
+    BufFirstChange  - When making a change, when 'modified' is set.  Can be
+		      used to do a :preserve for remote files.
+    BufChange	    - after a change was made.  Set some variables to indicate
+		      the position and number of inserted/deleted lines, so
+		      that marks can be updated.  HierAssist has patch to add
+		      BufChangePre, BufChangePost and RevertBuf. (Shah)
+    WinResized	    - When a window has been resized
+    VimResized	    - When the Vim window has been resized (SIGWINCH)
+		      patch from Yakov Lerner, 2003 July 24.
+-   Add autocommand to be executed every so many seconds?  For writing the
+    file now and then ('autosave').
+				  *'autosave'* *'as'* *'noautosave'* *'noas'*
+    'autosave' 'aw' number  (default 0)
+	    Automatically write the current buffer to file N seconds after the
+	    last change has been made and when |'modified'| is still set.
+	    Default: 0 = do not autosave the buffer.
+    Alternative: have 'autosave' use 'updatetime' and 'updatecount' but make
+    them save the file itself besides the swapfile.
+
+
+Insert mode completion/expansion:
+8   When there is no word before the cursor but something like "sys." complete
+    with "sys.".  Works well for C and similar languages.
+9   ^X^L completion doesn't repeat correctly.  It uses the first match with
+    the last added line, instead of continuing where the last match ended.
+    (Webb)
+8   The code has become too complex.  Redesign it, or at least add proper
+    comments.
+8   Add option to set different behavior for Insert mode completion:
+    - ignore/match case
+    - different characters than 'iskeyword'
+8   Add expression-expansion, so that the user can define his own kind of
+    completion.  Patch from Taro Muraoka, 2003 Aug 26.
+8   Add a command to undo the completion, go back to the original text.
+8   Use the class information in the tags file to do context-sensitive
+    completion.  After "foo." complete all member functions/variables of
+    "foo".  Need to search backwards for the class definition of foo.
+    Should work for C++ and Java.
+    Even more context would be nice: "import java.^N" -> "io", "lang", etc.
+7   When expanding $HOME/dir with ^X^F keep the $HOME (with an option?).
+7   Add CTRL-X command in Insert mode like CTRL-X CTRL-N, that completes WORDS
+    instead of words.
+8   Add CTRL-X CTRL-R: complete words from register contents.
+8   Add completion of previously inserted texts (like what CTRL-A does).
+    Requires remembering a number of insertions.
+8   Add 'f' flag to 'complete': Expand file names.
+    Also apply 'complete' to whole line completion.
+-   Make it possible to search include files in several places.  Use the
+    'path' option?  Can this be done with the dictionary completion (use
+    wildcards in the file name)?
+-   Make CTRL-X CTRL-K do a binary search in the dictionary (if it's sorted).
+-   Speed up CTRL-X CTRL-K dictionary searching (don't use a regexp?).
+-   Set a mark at the position where the match was found (file mark, could
+    be in another file).
+-   Add CTRL-A command in CTRL-X mode: show all matches.
+-   Make CTRL-X CTRL-L use the 'complete' option?
+-   Add command in CTRL-X mode to add following words to the completed string
+    (e.g. to complete "Pointer->element" with CTRL-X CTRL-P CTRL-W CTRL-W)
+-   CTRL-X CTRL-F: Use 'path' to find completions.
+-   CTRL-X CTRL-F: Option to use forward slashes on MS-Windows?
+-   CTRL-X CTRL-F: Don't replace "$VIM" with the actual value. (Kelly)
+8   Add option 'isexpand', containing characters when doing expansion (so that
+    "." and "\" can be included, without changing 'iskeyword'). (Goldfarb)
+    Also: 'istagword': characters used for CTRL-].
+    When 'isexpand' or 'istagword' are empty, use 'iskeyword'.
+-   Allow listing all matches in some way (and picking one from the list).
+
+
+Command line editing:
+7   Add commands (keys) to delete from the cursor to the end of the command
+    line.
+8   Custom completion of user commands can't use the standard completion
+    functions.  Add a hook to invoke a user function that returns the type of
+    completion to be done: "file", "tag", "custom", etc.
+-   Add flags to 'whichwrap' for command line editing (cursor right at end of
+    lines wraps to start of line).
+-   Make editing the command line work like Insert mode in a single-line view
+    on a buffer that contains the command line history.  But this has many
+    disadvantages, only implement it when these can be solved.  Elvis has run
+    into these, see remarks from Steve (~/Mail/oldmail/kirkendall/in.00012).
+    - Going back in history and editing a line there would change the history.
+      Would still need to keep a copy of the history elsewhere.  Like the
+      cmdwin does now already.
+    - Use CTRL-O to execute one Normal mode command.  How to switch to normal
+      mode for more commands?  <Esc> should cancel the command line.  CTRL-T?
+    - To allow "/" and "= need to recursively call getcmdline(), overwrite the
+      cmdline.  But then we are editing a command-line again.  How to avoid
+      that the user gets confused by the stack of command lines?
+    - Use edit() for normal cmdline editing?  Would have to integrate
+      getcmdline() into edit().  Need to solve conflicts between Insert mode
+      and Command-line mode commands.  Make it work like Korn shell and tcsh.
+      Problems:
+	- Insert: completion with 'wildchar'
+	- Insert: use cmdline abbreviations
+	- Insert: CTRL-D deletes indent instead of listing matches
+	- Normal: no CTRL-W commands
+	- Normal: no ":" commands?
+	- Normal: allow Visual mode only within one line.
+    - where to show insert/normal mode message?  Change highlighting of
+      character in first column?
+    - Implementation ideas:
+      - Set "curwin" and "curbuf" to the command line window and buffer.
+      - curwin->w_topline is always equal to curwin->w_cursor.lnum.
+      - never set 'number', no folding, etc.  No status line.
+      - sync undo after entering a command line?
+      - use NV_NOCL flag for commands that are not allowed in Command-line
+	Mode.
+
+
+Command line completion:
+8   Change expand_interactively into a flag that is passed as an argument.
+8   With command line completion after '%' and '#', expand current/alternate
+    file name, so it can be edited.  Also with modifiers, such as "%:h".
+8   When completing command names, either sort them on the long name, or list
+    them with the optional part inside [].
+7   Completion of network shares, patch by Yasuhiro Matsumoto.
+7   Completion of ":map x ": fill in the current mapping, so that it can be
+    edited. (Sven Guckes)
+7   Add completion for when entering an expression after CTRL-R= and "=.
+    (Servatius Brandt)
+-   For 'wildmenu': Simplify "../bar" when possible.
+-   When using <Up> in wildmenu mode for a submenu, should go back to the
+    current menu, not the first one.  E.g., ":emenu File.Save<Up>".
+8   For ":find" and ":sfind" expand files found in 'path'.
+8   Add cmdline completion for the ":debug" command.
+8   When using backtick expansion, the external command may write a greeting
+    message.  Add an option or commands to remove lines that match a regexp?
+7   When listing matches of files, display the common path separately from the
+    file names, if this makes the listing shorter. (Webb)
+-   Add command line completion for ":ilist" and friends, show matching
+    identifiers (Webb).
+8   Add command line completion for "old value" of a command.  ":args <key>"
+    would result in the current list of arguments, which you can then edit.
+7   Add command line completion with CTRL-X, just like Insert mode completion.
+    Useful for ":s/word/xx/".
+-   Add command to go back to the text as it was before completion started.
+    Also to be used for <Up> in the command line.
+-   Add 'wildlongest' option: Key to use to find longest common match for
+    command line completion (default CTRL-L), like 'wildchar'. (Cregut)
+    Also: when there are several matches, show them line a CTRL-D.
+-   Add completion for Environment variables: ":echo $SH<Tab>" -> "$SHELL".
+
+
+Command line history:
+-   Add "KeyWasTyped" flag: It's reset before each command and set when a
+    character from the keyboard is consumed. Value is used to decide to put a
+    command line in history or not. Put line in history if it didn't
+    completely resulted from one mapping.
+-   When using ":browse", also put the resulting edit command in the history,
+    so that it can be repeated. (Demirel)
+
+
+Insert mode:
+9   When 'autoindent' is set, hitting <CR> twice, while there is text after
+    the cursor, doesn't delete the autoindent in the resulting blank line.
+    (Rich Wales) This is Vi compatible, but it looks like a bug.  Rich has a
+    suggestion for a patch to fix this.
+8   When using CTRL-O in Insert mode, then executing an insert command
+    "a" or "i", should we return to Insert mode after <Esc>? (Eggink)
+    Perhaps it can be allowed a single time, to be able to do
+    "<C-O>10axyz<Esc>".  Nesting this further is confusing.
+    ":map <F2> 5aabc<Esc>" works only once from Insert mode.
+7   Use CTRL-G <count> to repeat what follows.  Useful for inserting a
+    character multiple times or repeating CTRL-Y.
+7   Make ":startinsert" command work directly for functions and scripts?
+    Also make it possible to append (it's difficult at end of line).
+    And add ":startreplace" (patch by Charles Campbell, 2004 Jan 9,
+    http://www.erols.com/astronaut/vim/index.html#Patch)
+7   Use 'matchpairs' for 'showmatch': When inserting a character check if it
+    appears in the rhs of 'matchpairs'.
+-   In Insert mode (and command line editing?): Allow undo of the last typed
+    character.	This is useful for CTRL-U, CTRL-W, delete and backspace, and
+    also for characters that wrap to the next line.
+    Also: be able to undo CTRL-R (insert register).
+    Possibly use 'backspace'="whole" for a mode where at least a <CR> that
+    inserts autoindent is undone by a single <BS>.
+-   Use CTRL-G in Insert mode for an extra range of commands, like "g" in
+    Normal mode.
+-   Make 'paste' work without resetting other options, but override their
+    value.  Avoids problems when changing files and modelines or autocommands
+    are used.
+-   When typing CTRL-V and a digit higher than 2, only expect two digits.
+-   Insert binary numbers with CTRL-V b.
+-   Make it possible to undo <BS>, <C-W> and <C-U>.  Bash uses CTRL-Y.
+
+
+'cindent', 'smartindent':
+8   Wrong indent for ":" after a method with line break in arguments:
+	Foo::Foo (int one,
+		    int two)
+	: something(4)
+	{}
+8   Wrong indent for ":" after a method with multiple lines:
+	Foo::Foo (int one, int two)
+		: something(4),
+	somethingelse(3)
+	{}
+9   Too much indent for "lulu": (Uwe Zeisberger)
+       int main ()
+       {
+	 if (lala)
+	   do
+	     ++(*lolo);
+	   while (lili
+		  && lele);
+	   lulu;
+       }
+9   Function gets extra indent: (Jamax)
+	void function(int param) {
+	     if (false)
+		 return;
+	}
+9   brace not indented correctly:
+	case 'c':   if (cond)
+			{
+    Should align with "if" in case statement.
+7   Allow aligning a closing ")" with the line above, instead of the matching
+    "(": (Riehm) if (asdfasdf &&
+			asdf
+			)
+8   Java: Inside an anonymous class, after an "else" or "try" the indent is
+    too small. (Vincent Bergbauer)
+8   In C++ it's possible to have {} inside (): (Kirshna)
+		func(
+			new String[] {
+			    "asdf",
+			    "asdf"
+			}
+		    );
+7   Separate "(0" option into inside/outside a function (Zellner):
+	func(
+	   int x)	// indent like "(4"
+	{
+	   if (a
+	       && b)	// indent like "(0"
+8   Strange problem with this code, "hello" is indented wrong: (Gary Holloway)
+    main() { char	foo[] = "/*";
+	 /* This is a comment; the indentation of C
+	  * source below this comment gets messed up due to the string above.
+	  */
+	  hello
+9   Using "{" in a comment: (Helmut Stiegler)
+    if (a)
+    {
+	    if (b)
+	    {
+		    // {
+	    }
+	    } <-- this is indented incorrect
+9   Wrong indent for cino=(4, removing the (void) fixes it: (Zellner)
+	(void) MyFancyFunction(
+			       argument);
+-   Make smartindenting configurable. Add 'sioptions', e.g. '#' setting the
+    indent to 0 should be switched on/off.
+7   Support ANSI style function header, with each argument on its own line.
+-   "[p" and "]p" should use 'cindent' code if it's on (only for the first
+    line).
+-   Add option to 'cindent' to set indent for comments outside of {}?
+-   Make a command to line up a comment after a code line with a previous
+    comment after a code line.	Can 'cindent' do this automatically?
+7   Add 'j' flag to 'formatoptions': Remove comment leader when joining lines.
+-   When 'cindent'ing a '}', showmatch is done before fixing the indent.  It
+    looks better when the indent is fixed before the showmatch. (Webb)
+-   Add option to make indenting work in comments too (for commented-out
+    code), unless the line starts with "*".
+-   Don't use 'cindent' when doing formatting with "gq"?
+-   When formatting a comment after some text, insert the '*' for the new line
+    (indent is correct if 'cindent' is set, but '*' doesn't get inserted).
+8   When 'comments' has both "s1:/*,mb:*,ex:*/" and "s1:(*,mb:*,ex:*)", the
+    'x' flag always uses the first match.  Need to continue looking for more
+    matches of "*" and remember all characters that could end the comment.
+-   For smartindent: When typing 'else' line it up with matching 'if'.
+-   'smartindent': allow patterns in 'cinwords', for e.g. TeX files, where
+    lines start with "\item".
+-   Support this style of comments (with an option): (Brown)
+	/* here is a comment that
+	is just autoindented, and
+	nothing else */
+-   Add words to 'cinwords' to reduce the indent, e.g., "end" or "fi".
+7   Use Tabs for the indent of starting lines, pad with spaces for
+    continuation lines.  Allows changing 'tabstop' without messing up the
+    indents.
+    And/or: Add option to copy indent as-is, without changing spaces to tabs.
+    also for 'autoindent'.  'keeptabs': when set don't change the tabs and
+    spaces used for indent, when the indent remains the same or increases.
+
+
+Java:
+8   Can have {} constructs inside parens.  Include changes from Steve
+    Odendahl?
+8   Recognize "import java.util.Vector" and use $CLASSPATH to find files for
+    "[i" commands and friends.
+-   For files found with 'include': handle "*" in included name, for Java.
+    (Jason)
+-   How to make a "package java.util" cause all classes in the package to be
+    searched?  Also for "import java.util.*". (Mark Brophy)
+
+
+'comments':
+8   When formatting C comments that are after code, the "*" isn't repeated
+    like it's done when there is no code.  And there is no automatic wrapping.
+    Recognize comments that come after code.  Should insert the comment leader
+    when it's "#" or "//".
+7   When using "comments=fg:--", Vim inserts three spaces for a new line.
+    When hitting a TAB, these spaces could be removed.
+7   The 'n'esting flag doesn't do the indenting of the last (rightmost) item.
+6   Make strings in 'comments' option a RE, to be able to match more
+    complicated things. (Phillipps)  Use a special flag to indicate that a
+    regexp is used.
+8   Make the 'comments' option with "/* * */" lines only repeat the "*" line
+    when there is a "/*" before it?  Or include this in 'cindent'?
+
+
+Virtual edit:
+8   Make the horizontal scrollbar work to move the text further left.
+7   Add a mode where the cursor is only allowed to go one character after the
+    end of the line?
+7   Allow specifying it separately for Tabs and beyond end-of-line?
+
+
+Text objects:
+8   Add test script for text object commands "aw", "iW", etc.
+7   Add text object for current search pattern: "a/" and "i/".  Makes it
+    possible to turn text highlighted for 'hlsearch' into a Visual area.
+8   Add "gp" and "gP" commands: insert text and make sure there is a single
+    space before it, unless at the start of the line, and after it, unless at
+    the end of the line or before a ".".
+7   Add objects with backwards extension?  Use "I" and "A".  Thus "2dAs"
+    deletes the current and previous sentence. (Jens Paulus)
+7   Add "g{" and "g}" to move to the first/last character of a paragraph
+    (instead of the line just before/after a paragraph as with "{" and "}").
+8   Add "a'" and 'a"': a single or double quoted string. (Tim Chase)
+    Patch from Taro Muraoka (2003 Dec 16).
+6   Ignore comment leaders for objects.  Make "das" work in reply-email.
+5   Make it possible to use syntax group matches as a text object.  For
+    example, define a "ccItem" group, then do "da<ccItem>" to delete one.
+    Or, maybe just define "dai", delete-an-item, to delete the syntax item the
+    cursor is on.
+
+
+Select mode:
+8   In blockwise mode, typed characters are inserted in front of the block,
+    backspace deletes a column before the block. (Steve Hall)
+7   Alt-leftmouse starts block mode selection in MS Word.
+    See http://www.vim.org/tips/tip.php?tip_id=743
+7   Add Cmdline-select mode.  Like Select mode, but used on the command line.
+    - Change gui_send_mouse_event() to pass on mouse events when 'mouse'
+      contains 'C' or 'A'.
+    - Catch mouse events in ex_getln.c.  Also shift-cursor, etc., like in
+      normal_cmd().
+    - remember start and end of selection in cmdline_info.
+    - Typing text replaces the selection.
+
+
+Visual mode:
+-   When dragging the Visual selection with the mouse and 'scrolloff' is zero,
+    behave like 'scrolloff' is one, so that the text scrolls when the pointer
+    is in the top line.
+8   When using "I" or "A" in Visual block mode, short lines do not get the new
+    text.  make it possible to add the text to short lines too, with padding
+    where needed.
+7   With a Visual block selected, "2x" deletes a block of double the width,
+    "3y" yanks a block of triple width, etc.
+7   When selecting linewise, using "itext" should insert "text" at the start
+    of each selected line.
+8   What is "R" supposed to do in Visual mode?
+8   Make Visual mode local to the buffer.  Allow changing to another buffer.
+    When starting a new Visual selection, remove the Visual selection in any
+    other buffer. (Ron Aaron)
+8   Support dragging the Visual area to drop it somewhere else. (Ron Aaron,
+    Ben Godfrey)
+7   Support dragging the Visual area to drop it in another program, and
+    receive dropped text from another program. (Ben Godfrey)
+7   With blockwise Visual mode and "c", "C", "I", "A", etc., allow the use of
+    a <CR>.  The entered lines are repeated over the Visual area.
+7   CTRL-V :s should substitute only in the block, not to whole lines. (David
+    Young is working on this)
+7   Filtering a block should only apply to the block, not to the whole lines.
+    When the number of lines is increased, add lines. When decreased, padd with
+    spaces or delete? Use ":`<,`>" on the command line.
+8   After filtering the Visual area, make "gv" select the filtered text?
+    Currently "gv" only selects a single line, not useful.
+7   Don't move the cursor when scrolling?  Needed when the selection should
+    stay the same.  Scroll to the cursor at any movement command.  With an
+    option!
+7   In Visual block mode, need to be able to define a corner on a position
+    that doesn't have text?  Also: when using the mouse, be able to select
+    part of a TAB.  Even more: Add a mode where the cursor can be on a screen
+    position where there is no text.  When typing, add spaces to fill the gap.
+    Other solution: Always use curswant, so that you can move the cursor to
+    the right column, and then use up/down movements to select the line,
+    without changing the column.
+6   ":left" and ":right" should work in Visual block mode.
+7   For Visual mode: Command to do a search for the string in the marked area.
+    Only when fewer than two lines. Use "g/" and "gb".  Patch from Yegappan
+    Lakshmanan.
+7   CTRL-I and CTRL-O should work in Visual mode, but only jump to marks in the
+    current buffer.
+7   CTRL-A and CTRL-X should increase/decrease all numbers in the Visual area.
+6   In non-Block mode, "I" should insert the same text in front of each line,
+    before the first non-blank, "gI" in column 1.
+6   In non-Block mode, "A" should append the same text after each line.
+6   ":'<,'>source" should read the selected lines and ":source" them.
+6   When in blockwise visual selection (CTRL-V), allow cursor to be placed
+    right of the line. Could also allow cursor to be placed anywhere on a TAB
+    or other special character.
+6   Add commands to move selected text, without deselecting.
+
+
+More advanced repeating commands:
+-   Add "." command for visual mode: redo last visual command (e.g. ":fmt").
+7   Repeating "d:{cmd}" with "." doesn't work. (Benji Fisher) Somehow remember
+    the command line so that it can be repeated?
+-   Add "." command after operator: repeat last command of same operator. E.g.
+    "c." will repeat last change, also when "x" used since then (Webb).
+    "y." will repeat last yank.
+    "c2." will repeat the last but one change?
+    Also: keep history of Normal mode commands, add command to list the history
+    and/or pick an older command.
+-   History stack for . command?  Use "g." command.
+
+
+Mappings and Abbreviations:
+8   Let ":verbose map xx" report where the mapping was set, just like with
+    ":verbose set".
+8   When "0" is mapped (it is a movement command) this mapping should not be
+    used after typing another number, e.g. "20l". (Charles Campbell)
+    Is this possible without disabling the mapping of the following command?
+8   Should mapping <C-A> and <C-S-A> both work?
+7   ":abbr b byte", append "b " to an existing word still expands to "byte".
+    This is Vi compatible, but can we avoid it anyway?
+8   ":verbose map" could show the script where the mapping was defined.
+    m_script_ID can be used.
+8   To make a mapping work with a prepended "x to select a register, store the
+    last _typed_ register name and access it with "&.
+8   Add ":amap", like ":amenu".
+8   Add ":cab!", abbreviations that only apply to Command-line mode and not to
+    entering search strings.
+8   Add a flag to ":abbrev" to eat the character that triggers the
+    abbreviation.  Thus "abb ab xxx" and typing "ab<Space>" inserts "xxx" and
+    not the <Space>.
+8   Allow mapping of CTRL-@ (anywhere in the LHS).
+8   Give a warning when using CTRL-C in the lhs of a mapping.  It will never
+    (?) work.
+7   ":verbose map" should display where a mapping was defined, like ":verbose
+    set".
+8   Add a way to save a current mapping and restore it later.  Use a function
+    that returns the mapping command to restore it: mapcmd()?  mapcheck() is
+    not fool proof.  How to handle ambiguous mappings?
+7   Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
+7   Allow mapping "Q" and "Q}" at the same time.  Need to put a flag with "Q",
+    that it needs an extra character before it can match. See Vile 'maplonger'
+    option.
+7   When someone tries to unmap with a trailing space, and it fails, try
+    unmapping without the trailing space.  Helps for ":unmap xx | unmap yy".
+7   Make it possible to map 'wildchar', but only when it's a special character
+    (like CTRL-E).  Currently it's only recognized when typed.  Useful for
+    mapping a key to do something and then completion.
+7   Add a mapping that works always, for remapping the keyboard.
+6   Context-sensitive abbreviations: Specify syntax group(s) in which the
+    abbreviations are to be used.
+-   Add mappings that take arguments.  Could work like the ":s" command.  For
+    example, for a mouse escape sequence:
+	:mapexp  <Esc>{\([0-9]*\),\([0-9]*\);	H\1j\2l
+-   Make it possible to include a <Nul> in the lhs and rhs of a mapping.
+-   Add command to repeat a whole mapping ("." only repeats the last change in
+    a mapping).  Also: Repeat a whole insert command, including any mappings
+    that it included.  Sort-of automatic recording?
+-   Make it possible to undo all the commands from a mapping, including a
+    trailing unfinished command, e.g. for ":map K iX^[r".
+-   Add an option to ":map" that makes it display the special keys in
+    <> notation (e.g. <CR> instead of ^M).  Or just always do this?
+-   Include an option (or flag to 'cpoptions') that makes errors in mappings
+    not flush the rest of the mapping (like nvi does).
+-   Use context sensitiveness of completion to switch abbreviations and
+    mappings off for :unab and :unmap.
+6   When using mappings in Insert mode, insert characters for incomplete
+    mappings first, then remove them again when a mapping matches.  Avoids
+    that characters that are the start of some mapping are not shown until you
+    hit another character.
+-   Add optional <Number> argument for mappings:
+    :map <Number>q	     ^W^W<Number>G
+    :map <Number>q<Number>t  ^W^W<Number1-1>G<Number2>l
+    :map q<Char>	    :s/<Char>/\u\0/g
+    Or implicit:
+    :map q			<Register>d<Number>$
+-   Add mappings for replace mode: ":rmap".  How do we then enter mappings for
+    non-replace Insert mode?
+-   Add separate mappings for Visual-character/block/line mode?
+6   Alias for Normal mode commands, works like :substitute?  Would allow
+    mappings with arguments.
+-   Add 'mapstop' command, to stop recursive mappings.
+-   List mappings that have a raw escape sequence both with the name of the key
+    for that escape sequence (if there is one) and the sequence itself.
+-   List mappings: Once with special keys listed as <>, once with meta chars as
+    <M-a>, once with the byte values (octal?). Sort of "spell mapping" command?
+-   When entering mappings: Add the possibility to enter meta keys like they
+    are displayed, within <>: <M-a>, <~@> or <|a>.
+-   Allow multiple arguments to :unmap.
+-   Command to show keys that are not used and available for mapping
+    ":freekeys".
+-   Allow any character except white space in abbreviations lhs (Riehm).
+
+
+Incsearch:
+-   Add a limit to the number of lines that are searched for 'incsearch'?
+-   When no match is found and the user types more, the screen is redrawn
+    anyway.  Could skip that.  Esp. if the line wraps and the text is scrolled
+    up every time.
+-   Temporarily open folds to show where the search ends up.  Restore the
+    folds when going to another line.
+-   When incsearch used and hitting return, no need to search again in many
+    cases, saves a lot of time in big files. (Slootman wants to work on this?)
+    When not using special characters, can continue search from the last match
+    (or not at all, when there was no match).  See oldmail/webb/in.872.
+-   With incsearch, use CTRL-N/CTRL-P to go to next/previous match, some other
+    key to copy matched word to search pattern (Alexander Schmid).
+
+
+Searching:
+8   Add a mechanism for recursiveness: "\(([^()]*\@@[^()]*)\)\@r".  \@@ stands
+    for "go recursive here" and \@r marks the recursive atom.
+item stack to allow matching ().  One side is "push X on
+    the stack if previous atom matched".  Other side is "match with top of
+    stack, pop it when it matches".  Use "\@pX" and "\@m"?
+	Example: \((\@p).\{-}\@m\)*
+7   Add an option to accept a match at the cursor position.  Also for
+    search(). (Brett)
+7   Add pattern item to use properties of Unicode characters.  In Perl it's
+    "\p{L}" for a letter.  See Regular Expression Pocket Reference.
+7   When 'rightleft' is set, the search pattern should be displayed right to
+    left as well?  See patch of Dec 26. (Nadim Shaikli)
+8   Would it be possible to allow ":23,45/pat/flags" to search for "pat" in
+    lines 23 to 45?  Or does this conflict with Ex range syntax?
+8   Allow identical pairs in 'matchpairs'.  Restrict the search to the current
+    line.
+7   Allow longer pairs in 'matchpairs'.  Use ~/vim/macros/matchit.vim as an
+    example.
+8   Make it possible to define the character that "%" checks for in
+    #if/#endif.  For nmake it's !if/!endif.
+-   For "%" command: set hierarchy for which things include other things that
+    should be ignored (like "*/" or "#endif" inside /* */).
+    Also: use "%" to jump from start to end of syntax region and back.
+    Alternative: use matchit.vim
+8   "/:/e+1" gets stuck on a match at the end of the line.  Do we care?
+8   A pattern like "\([^a]\+\)\+" takes an awful long time.  Recognize that
+    the recursive "\+" is meaningless and optimize for it.
+    This one is also very slow on "/* some comment */": "^\/\*\(.*[^/]\)*$".
+7   Recognize "[a-z]", "[0-9]", etc. and replace them with the faster "\l" and
+    "\d".
+7   Add a way to specify characters as hex, octal or <C-M> form.  Could be
+    \%1ax, \%200o and \%<C-M>.  Also \%1234u for multi-byte chars.
+8   Flags that apply to the whole pattern.
+    This works for all places where a regexp is used.
+    Add "\q" to not store this pattern as the last search pattern?
+8   Add an argument after ":s/pat/str/" for a range of matches.  For example,
+    ":s/pat/str/#3-4" to replace only the third and fourth "pat" in a line.
+8   Add an option not to use 'hlsearch' highlighting for ":s" and ":g"
+    commands. (Kahn)  It would work like ":noh" is used after that command.
+    Also: An extra flag to do this once, and a flag to keep the existing
+    search pattern.
+-   Add \%h{group-name}; to search for a specific highlight group.
+    Add \%s{syntax-group}; to search for a specific syntax group.
+-   Support Perl regexp.  Use PCRE (Perl Compatible RE) package. (Shade)
+    Or translate the pattern to a Vim one.
+    Don't switch on with an option for typed commands/mappings/functions, it's
+    too confusing.  Use "\@@" in the pattern, to avoid incompatibilities.
+7   Add POSIX regexp, like Nvi, with 'extended' option?  It's like very-magic.
+-   Remember flags for backreferenced items, so that "*" can be used after it.
+    Check with "\(\S\)\1\{3}". (Hemmerling)
+-   Add flags to search command (also for ":s"?):
+    i	ignore case
+    I	use case
+    p	use Perl regexp syntax (or POSIX?)
+    v	use Vi regexp syntax
+    f	forget pattern, don't keep it for "n" command
+    F   remember pattern, keep it for "n" command
+    Perl uses these too:
+    e	evaluate the right side as an expression (Perl only)
+    m	multiple line expression (we don't need it)
+    o	compile only once (Perl only)
+    s	single line expression (we don't need it)
+    x	extended regexp (we don't need it)
+    When used after ":g" command, backslash needed to avoid confusion with the
+    following command.
+    Add 'searchflags' for default flags (replaces 'gdefault').
+-   Add command to display the last used substitute pattern and last used
+    pattern. (Margo)  Maybe make it accessible through a register (like "/
+    for search string)?
+7   Use T-search algorithm, to speed up searching for strings without special
+    characters.  See C't article, August 1997.
+-   Add 'fuzzycase' option, so that case doesn't matter, and '-' and '_' are
+    equivalent (for Unix filenames).
+-   Add 'v' flag to search command: enter Visual mode, with the matching text
+    as Visual area. (variation on idea from Bertin)
+-   Searching: "/this//that/" should find "that" after "this".
+-   Add global search commands: Instead of wrapping at the end of the buffer,
+    they continue in another buffer. Use flag after search pattern:
+    a	for the next file in the argument list
+    f	for file in the buffer list
+    w	for file edited in a window.
+    e.g. "/pat/f". Then "n" and "N" work through files too. "f" flag also for
+    ":s/pat/foo/f"??? Then when 'autowrite' and 'hidden' are both not set, ask
+    before saving files: "Save modified buffer "/path/file"? (Yes/Hide/No
+    Save-all/hide-All/Quit) ".
+-   ":s/pat/foo/3": find 3rd match of "pat", like sed. (Thomas Koehler)
+-   Special characters in patterns:
+    Inside []:
+    \012  octal character
+    \0x1a hex character
+    \0<BS> \0<Esc>: special character
+7   When searching with 'n' give message when getting back where the search
+    first started. Remember start of search in '/ mark.
+7   Add option that scrolls screen to put cursor in middle of screen after
+    search always/when off-screen/never.  And after a ":tag" command.  Maybe
+    specify how many lines below the screen causes a redraw with the cursor in
+    the middle (default would be half a screen, zero means always).
+6   Support multiple search buffers, so macros can be made without side
+    effects.
+7   From xvim: Allow a newline in search patterns (also for :s, can delete
+    newline).  Add BOW, EOW, NEWL, NLORANY, NLBUTANY, magic 'n' and 'r', etc.
+    [not in xvim:] Add option to switch on matches crossing ONE line boundary.
+7   Add ":iselect", a combination of ":ilist" and ":tselect". (Aaron)
+    Also ":dselect".
+
+
+Undo:
+-   When accidentally hitting "R" instead of Ctrl-R, further Ctrl-R is not
+    possible, even when typing <Esc> immediately. (Grahn)  Also for "i", "a",
+    etc.  Postpone saving for undo until something is really inserted?
+8   When Inserting a lot of text, it can only be undone as a whole.  Make undo
+    sync points at every line or word.  Could recognize the start of a new
+    word (white space and then non-white space) and backspacing.
+    Can already use CTRL-G u, but that requires remapping a lot of things.
+8   Make undo more memory-efficient: Compare text before and after change,
+    only remember the lines that really changed.
+7   Add undo for a range of lines.  Can change these back to a previous
+    version without changing the rest of the file.  Stop doing this when a
+    change includes only some of these lines and changes the line count.  Need
+    to store these undo actions as a separate change that can be undone.
+7   Add an undo tree: When making a change, instead of clearing any future
+    undo (thus redo) info, make a new branch.  How to navigate through the
+    undo tree?
+-   For u_save() include the column number. This can be used to set '[ and '].
+    And in the future the undo can be made more efficient (Webb).
+-   In out-of-memory situations: Free allocated space in undo, and reduce the
+    number of undo levels (with confirmation).
+-   Instead of [+], give the number of changes since the last write: [+123].
+    When undoing to before the last write, change this to a negative number:
+    [-99].
+-   With undo with simple line delete/insert: optimize screen updating.
+-   When executing macro's: Save each line for undo only once.
+-   Store undo info in a file that survives until the next edit.  Then it's
+    possible to undo to before the current editing session.  Combined with
+    viminfo?
+-   When doing a global substitute, causing almost all lines to be changed,
+    undo info becomes very big.  Put undo info in swap file??
+
+
+Buffer list:
+8   Add patch from Charles Campbell to have ":0file!" remove the name of the
+    current buffer. (2003 June 17)
+7   Command to execute a command in another buffer: ":inbuf {bufname} {cmd}".
+    Also for other windows: ":inwin {winnr} {cmd}".  How to make sure that
+    this works properly for all commands, and still be able to return to the
+    current buffer/window?  E.g.: ":inbuf xxx only".
+8   Add File.{recent_files} menu entries: Recently edited files.
+    Ron Aaron has a plugin for this: mru.vim.
+8   Unix: Check all uses of fnamecmp() and fnamencmp() if they should check
+    inode too.
+7   Add another number for a buffer, which is visible for the user.  When
+    creating a new buffer, use the lowest number not in use. (or the highest
+    number in use plus one?)
+7   Offer some buffer selection from the command line?  Like using ":ls" and
+    asking for a buffer number. (Zachmann)
+-   When starting to edit a file that is already in the buffer list, use the
+    file name argument for the new short file name. (Webb)
+-   Add an option to make ":bnext" and ":bprev" wrap around the end of the
+    buffer list.  Also for ":next" and ":prev"?
+7   Add argument to ":ls" which is a pattern for buffers to list.
+    E.g. ":ls *.c". (Thompson)
+7   Add expansion of buffer names, so that "*.c" is expanded to all buffer
+    names.  Needed for ":bdel *.c", ":bunload *.c", etc.
+8   Support for <afile> where a buffer name is expected.
+8   Some commands don't use line numbers, but buffer numbers. '$'
+    should then mean the number of the last buffer.  E.g.: "4,$bdel".
+7   Add an option to mostly use slashes in file names.  Separately for
+    internal use and for when executing an external program?
+
+
+Swap (.swp) files:
+8   If writing to the swap file fails, should try to open one in another
+    directory from 'dir'.  Useful in case the file system is full and when
+    there are short file name problems.
+8   Also use the code to try using a short file name for the backup and swap
+    file for the Win32 and Dos 32 bit versions.
+8   When a file is edited by root, add $LOGNAME to know who did su.
+8   When the edited file is a symlink, try to put the swap file in the same
+    dir as the actual file. Adjust FullName().	Avoids editing the same file
+    twice (e.g. when using quickfix).  Also try to make the name of the backup
+    file the same as the actual file?
+    Use the code for resolve()?
+7   Store the options 'fileencoding', 'fileformat', etc. in the swapfile,
+    because they change what will be written to the file.  Requires adding
+    another block to the swapfile.
+7   When using 64 bit inode numbers, also store the top 32 bits.  Add another
+    field for this, using part of bo_fname[], to keep it compatible.
+7   When editing a file on removable media, should put swap file somewhere
+    else.  Use something like 'r' flag in 'viminfo'. 'diravoid'?
+    Also: Be able to specify minimum disk space, skip directory when not
+    enough room.
+7   Add a configure check for which directory should be used: /tmp, /var/tmp
+    or /var/preserve.
+-   Add an option to create a swap file only when making the first change to
+    the buffer.  (Liang)  Or only when the buffer is not read-only.
+-   Add option to set "umask" for backup files and swap files (Antwerpen).
+    'backupumask' and 'swapumask'?  Or 'umaskback' and 'umaskswap'?
+-   When editing a readonly file, don't use a swap file but read parts from the
+    original file.  Also do this when the file is huge (>'maxmem').  We do
+    need to load the file once to count the number of lines?  Perhaps keep a
+    cached list of which line is where.
+
+
+Viminfo:
+7   Can probably remove the code that checks for a writable viminfo file,
+    because we now do the chown() for root, and others can't overwrite someone
+    else's viminfo file.
+8   Add argument to keep the list of buffers when Vim is started with a file
+    name. (Schild)
+8   Keep the last used directory of the file browser (File/Open menu).
+8   Remember the last used register for "@@".
+8   Remember a list of last accessed files.  To be used in the
+    "File.Open Recent" menu.  Default is to remember 10 files or so.
+    Also remember which files have been read and written.  How to display
+    this?
+7   Also store the ". register (last inserted text).
+7   Make it possible to store buffer names in viminfo file relative to some
+    directory, to make them portable over a network. (Aaron)
+6   Store a snapshot of the currently opened windows.  So that when quitting
+    Vim, and then starting again (without a file name argument), you see the
+    same files in the windows.  Use ":mksession" code?
+-   Make marks present in .viminfo usable as file marks: Display a list of
+    "last visited files" and select one to jump to.
+
+
+Modelines:
+8   Before trying to execute a modeline, check that it looks like one (valid
+    option names).  If it's very wrong, silently ignore it.
+    Ignore a line that starts with "Subject: ".
+-   When an option value is coming from a modeline, do not carry it over to
+    another edited file?  Would need to remember the value from before the
+    modeline setting.
+-   Allow setting a variable from a modeline?  Only allow using fixed strings,
+    no function calls, to avoid a security problem.
+-   Allow ":doauto BufRead x.cpp" in modelines, to execute autocommands for
+    .cpp files.
+-   Support the "abbreviate" command in modelines (Kearns).  Careful for
+    characters after <Esc>, that is a security leak.
+-   Add option setting to ask user if he wants to have the modelines executed
+    or not.  Same for .exrc in local dir.
+
+
+Options:
+8   Make ":mksession" store buffer-specific options for the specific buffer.
+8   With ":mksession" always store the 'sessionoptions' option, even when
+    "options" isn't in it. (St-Amant)
+7   Setting an option always sets "w_set_curswant", while this is only
+    required for a few options.  Only do it for those options to avoid the
+    side effect.
+8   When using ":mksession", also store a command to reset all options to
+    their default value, before setting the options that are not at their
+    default value.
+8   Should ":mksession" restore the current directory when writing the
+    session, or the directory where the session file is?  Probably need a word
+    in 'sessionoptions' to make a choice:
+    "curdir" (cd to current directory when session file was generated)
+    "sessiondir" (cd to directory of session file)
+    "nodir" (don't cd at all)
+8   Make "old" number options that really give a number of effects into string
+    options that are a comma separated list.  The old number values should
+    also be supported.
+8   Add commands to save and restore an option, which also preserves the flag
+    that marks if the option was set.  Useful to keep the effect of setting
+    'compatible' after ":syntax on" has been used.
+7   There is 'titleold', why is there no 'iconold'? (Chazelas)
+7   Make 'scrolloff' a global-local option, so that it can be different in the
+    quickfix window, for example. (Gary Holloway)
+7   Add plugins for formatting.  Should be able to make a choice depending on
+    the language of a file (English/Korean/Japanese/etc.).
+
+
+External commands:
+8   When filtering text, redirect stderr so that it can't mess up the screen
+    and Vim doesn't need to redraw it.  Also for ":r !cmd".
+4   Set separate shell for ":sh", piping "range!filter", reading text "r !ls"
+    and writing text "w !wc". (Deutsche)  Allow arguments for fast start (e.g.
+    -f).
+4   Allow direct execution, without using a shell.
+4   Run an external command in the background.  But how about I/O in the GUI?
+    Careful: don't turn Vim into a shell!
+4   Add feature to disable using a shell or external commands.
+
+
+Multiple Windows:
+7   "vim -oO file ..." use both horizontal and vertical splits.
+8   Add CTRL-W T: go to the top window in the column of the current window.
+    And CTRL-W B: go to bottom window.
+7   Use CTRL-W <Tab>, like alt-tab, to switch between buffers.  Repeat <Tab>
+    to select another buffer (only loaded ones?), <BS> to go back, <Enter> to
+    select buffer, <Esc> to go back to original buffer.
+7   Add a 'winfixwidth' option, similar to 'winfixheight'.
+6   Add an option to resize the shell when splitting and/or closing a window.
+    ":vsp" would make the shell wider by as many columns as needed for the new
+    window.  Specify a maximum size (or use the screen size). ":close" would
+    shrink the shell by as many columns as come available. (Demirel)
+7   When starting Vim several times, instantiate a Vim server, that allows
+    communication between the different Vims.  Feels like one Vim running with
+    multiple top-level windows.  Esp. useful when Vim is started from an IDE
+    too.  Requires some form of inter process communication.
+-   Support a connection to an external viewer.  Could call the viewer
+    automatically after some seconds of non-activity, or with a command.
+    Allow some way of reporting scrolling and cursor positioning in the viewer
+    to Vim, so that the link between the viewed and edited text can be made.
+
+
+Marks:
+8   When cursor is first moved because of scrolling, set a mark at this
+    position.  (Rimon Barr)  Use '-.
+8   Add a command to jump to a mark and make the motion inclusive. g'm and g`m?
+8   The '" mark is set to the first line, even when doing ":next" a few times.
+    Only set the '" mark when the cursor was really moved in a file.
+8   Make `` and '', which would position the new cursor position in the middle
+    of the window, restore the old topline (or relative position) from when
+    the mark was set.
+7   Make a list of file marks in a separate window.  For listing all buffers,
+    matching tags, errors, etc.  Normal commands to move around.  Add commands
+    to jump to the mark (in current window or new window).  Start it with
+    ":browse marks"?
+6   Add a menu that lists the Marks like ":marks". (Amerige)
+8   Make it possible to delete marks.  Charles Campbell has a patch that does
+    this with the markclear() function (2004 Jan 9).  And the ":delmark"
+    command (2004 Feb 9)
+7   For ":jumps", ":tags" and ":marks", for not loaded buffers, remember the
+    text at the mark.  Highlight the column with the mark.
+7   Highlight each mark in some way (With "Mark" highlight group).
+    Or display marks in a separate column, like 'number' does.
+7   Use d"m to delete rectangular area from cursor to mark m (like Vile's \m
+    command).
+7   Try to keep marks in the same position when:
+    - replacing with a line break, like in ":s/pat/^M/", move marks after the
+      line break column to the next line. (Acevedo)
+    - inserting/deleting characters in a line.
+5   Include marks for start/end of the current word and section.  Useful in
+    mappings.
+6   Add "unnamed mark" feature: Like marks for the ":g" command, but place and
+    unplace them with commands before doing something with the lines.
+    Highlight the marked lines somehow.
+
+
+Digraphs:
+7   Make "ga" show the digraph for a character, if it exists.
+    Also the keymap?
+-   Make it possible to enter "r<C-E>" and "r<C-Y>" (get character from line
+    below/above).
+-   Use digraph table to tell Vim about the collating sequence of special
+    characters?
+8   Add command to remove (all) digraphs. (Brown)
+7   Support different sets of digraphs (depending on the character set?).  At
+    least Latin1/Unicode, Latin-2, MS-DOS (esp. for Win32).
+
+
+Writing files:
+-   In vim_rename(), should lock "from" file when deleting "to" file for
+    systems other than Amiga.  Avoids problems with unexpected longname to
+    shortname conversion.
+8   write mch_isdevice() for Amiga, Mac, VMS, etc.
+8   When appending to a file, Vim should also make a backup and a 'patchmode'
+    file.
+8   'backupskip' doesn't write a backup file at all, a bit dangerous for some
+    applications.  Add 'backupelsewhere' to write a backup file in another
+    directory?  Or add a flag to 'backupdir'?
+7   The 'directory' option supports changing path separators to "%" to make
+    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
+6   Add an option to write a new, numbered, backup file each time.  Like
+    'patchmode', e.g., 'backupmode'.
+6   Make it possible to write 'patchmode' files to a different directory.
+    E.g., ":set patchmode=~/backups/*.orig". (Thomas)
+6   Add an option to prepend something to the backup file name.  E.g., "#".
+    Or maybe allow a function to modify the backup file name?
+8   Only make a backup when overwriting a file for the first time. Avoids
+    losing the original when writing twice. (Slootman)
+7   On non-Unix machines, also overwrite the original file in some situations
+    (file system full, it's a link on an NFS partition).
+7   When editing a file, check that it has been change outside of Vim more
+    often, not only when writing over it.  E.g., at the time the swap file is
+    flushed.  Or every ten seconds or so (use the time of day, check it before
+    waiting for a character to be typed).
+8   When a file was changed since editing started, show this in the status
+    line of the window, like "[time]".
+    Make it easier to reload all outdated files that don't have changes.
+    Automatic and/or with a command.
+
+
+Substitute:
+8   Make it easier to replace in all files in the argument list. E.g.:
+    ":argsub/oldword/newword/".  Works like ":argdo %s/oldword/newword/g|w".
+-   :s///p prints the line after a substitution.
+-   With :s///c replace \&, ~, etc. when showing the replacement pattern.
+8   With :s///c allow scrolling horizontally when 'nowrap' is effective.
+    Also allow a count before the scrolling keys.
+-   Add number option to ":s//2": replace second occurrence of string? Or:
+    :s///N substitutes N times.
+-   Add answers to ":substitute" with 'c' flag, used in a ":global", e.g.:
+    ":g/pat1/s/pat2/pat3/cg": 'A' do all remaining replacements, 'Q' don't do
+    any replacements, 'u' undo last substitution.
+7   Substitute in a block of text.  Use {line}.{column} notation in an Ex
+    range, e.g.: ":1.3,$.5s" means to substitute from line 1 column 3 to the
+    last line column 5.
+5   Add commands to bookmark lines, display bookmarks, remove bookmarks,
+    operate on lines with bookmarks, etc.  Like ":global" but with the
+    possibility to keep the bookmarks and use them with several commands.
+    (Stanislav Sitar)
+
+
+Mouse support:
+7   Win32: Add patch for 5-button mouse. (Michael Geddes 2001 Nov 26)
+8   Add 'o' flag to 'mouse'?
+7   Be able to set a 'mouseshape' for the popup menu.
+8   Add 'mouse' flag, which sets a behavior like Visual mode, but automatic
+    yanking at the button-up event.  Or like Select mode, but typing gets you
+    out of Select mode, instead of replacing the text. (Bhaskar)
+7   Checkout sysmouse() for FreeBSD console mouse support.
+-   Implement mouse support for the Amiga console.
+-   Using right mouse button to extend a blockwise selection should attach to
+    the nearest corner of the rectangle (four possible corners).
+-   Precede mouse click by a number to simulate double clicks?!?
+-   When mouse click after 'r' command, get character that was pointed to.
+
+
+Crypt and security:
+8   Also crypt the swapfile, each block separately.  Change mf_write() and
+    mf_read().  How to get b_p_key to these functions?
+7   Support a stronger encryption.  Jason Holt implemented AES (May 6 2003).
+8   Lock all used memory so that it doesn't get swapped to disk (uncrypted).
+    Patch by Jason Holt, 2003 May 23.
+
+
+Argument list:
+6   Add command to put all filenames from the tag files in the argument list.
+    When given an argument, only use the files where that argument matches
+    (like `grep -l ident`) and jump to the first match.
+6   Add command to form an args list from all the buffers?
+
+
+Registers:
+8   Don't display empty registers with ":display". (Etienne)
+8   Make the # register writable, so that it can be restored after jumping
+    around in windows.
+8   Add put command that overwrites existing text.  Should also work for
+    blocks.  Useful to move text around in a table.  Works like using "R ^R r"
+    for every line.
+6   When yanking into the unnamed registers several times, somehow make the
+    previous contents also available (like it's done for deleting).  What
+    register names to use?  g"1, g"2, etc.?
+-   When appending to a register, also report the total resulting number of
+    lines.  Or just say "99 more lines yanked", add the "more".
+-   When inserting a register in Insert mode with CTRL-R, don't insert comment
+    leader when line wraps?
+-   The ":@r" commands should take a range and execute the register for each
+    line in the range.
+-   Add "P" command to insert contents of unnamed register, move selected text
+	to position of previous deleted (to swap foo and bar in " + foo")
+8   Should be able to yank and delete into the "/ register.
+    How to take care of the flags (offset, magic)?
+7   Add ! register, for shell commands. (patch from Grenie)
+
+Debug mode:
+7   Add something to enable debugging when a remote message is received.
+8   Add breakpoints for setting an option
+8   Add breakpoits for assigning to a variable.
+7   Add a watchpoint in the debug mode: An expression that breaks execution
+    when evaluating to non-zero.
+7   Store the history from debug mode in viminfo.
+7   Make the debug mode history available with histget() et al.
+
+
+Various improvements:
+8   Add ":rename" command: rename the file of the current buffer and rename
+    the buffer.  Buffer may be modified.
+7   Add the MzScheme interface.  Patch on http://iamphet.nm.ru/scheme/
+    (Sergey Khorev)
+6   In the quickfix window statusline add the command used to get the list of
+    errors, e.g. ":make foo", ":grep something *.c".
+6   Python interface: add vim.message() function. (Michal Vitecek, 2002 Nov 5)
+7   Support using ":vert" with User commands.  Add expandable items <vert>.
+    Do the same for ":browse" and ":confirm"?
+    For ":silent" and ":debug" apply to the whole user command.
+7   Allow a window not to have a statusline.  Makes it possible to use a
+    window as a buffer-tab selection.
+7   Add an invisible buffer which can be edited.  For use in scripts that want
+    to manipulate text without changing the window layout.
+8   Add a command to revert to the saved version of file; undo or redo until
+    all changes are gone.
+8   Make 'statusline' local, so that each window can have a different value.
+    But should it also be local to a buffer? (Yegappan Lakshmanan has a patch,
+    2002 feb 15)
+7   Add a ":cpfile", go in the other direction as ":cnfile".
+6   "vim -q -" should read the list of errors from stdin. (Gautam Mudunuri)
+8   In the gzip plugin, also recognize *.gz.orig, *.gz.bak, etc.  Like it's
+    done for filetype detection.  Patch from Walter Briscoe, 2003 Jul 1.
+8   Add "--remote-fail": When contacting the server fails, exit Vim.
+    Add "--remote-self": When contacting the server fails, do it in this Vim.
+    Overrules the default of "--remote-send" to fail and "--remote" to do it
+    in this Vim.
+8   When Vim was started without a server, make it possible to start one, as
+    if the "--servername" argument was given. ":startserver <name>"?
+8   No address range can be used before the command modifiers.  This makes
+    them difficult to use in a menu for Visual mode.  Accept the range and
+    have it apply to the following command.
+8   Add the possibility to set 'fileformats' to force a format and strip other
+    CR characters.  For example, for "dos" files remove CR characters at the
+    end of the line, so that a file with mixed line endings is cleaned up.
+    To just not display the CR characters: Add a flag to 'display'?
+7   Add a "-@ filelist" argument: read file names from a file. (David Kotchan
+    has a patch for it)
+7   Some compilers give error messages in which the file name does not have a
+    path.  Be able to specify that 'path' is used for these files.
+8   Add term entries for function keys on xterm with alt and ctrl (new in pl
+    94).  E.g., Control adds ";5" in "<Esc>[20;5~".  Find a generic way to
+    prepend a modifier in console mode, to avoid having to specify each
+    individual modified key.
+    Steve Wall has a patch (2002 Mar 12) for adding function keys up to 37,
+    with modifiers.
+7   Xterm sends <Esc>O3F for <M-End>.  Similarly for other <M-Home>, <M-Left>,
+    etc.  Combinations of Alt, Ctrl and Shift are also possible.  Recognize
+    these to avoid inserting the raw byte sequence, handle like the key
+    without modifier (unless mapped).
+8   Add ":breakdel *": delete all breakpoints.
+7   Support ":browse edit" in console, using explorer.vim?
+6   Add "gG": like what "gj" is to "j": go to the N'th window line.
+8   Add command like ":normal" that accepts <Key> notation like ":map".
+9   Support ACLs on more systems.
+7   Add ModeMsgVisual, ModeMsgInsert, etc. so that each mode message can be
+    highlighted differently.
+8   Allow using "**" as a wildcard in commands like ":next" and ":args".
+8   Provide a way to avoid wildcard expansion.  Use double quotes, like in the
+    shell?  :edit "my[file].txt"  (currently works if there is no "myf.txt")
+7   Add a message area for the user.  Set some option to reserve space (above
+    the command line?).  Use an ":echouser" command to display the message
+    (truncated to fit in the space).
+7   Add %s to 'keywordprg': replace with word under the cursor. (Zellner)
+8   Support printing on Unix.  Can use "lpansi.c" as an example. (Bookout)
+8   Add put command that replaces the text under it.  Esp. for blockwise
+    Visual mode.
+7   Enhance termreponse stuff: Add t_CV(?): pattern of term response, use
+    regexp: "\e\[[>?][0-9;]*c", but only check just after sending t_RV.
+7   Add "g|" command: move to N'th column from the left margin (after wrapping
+    and applying 'leftcol').  Works as "|" like what "g0" is to "0".
+7   Add patch from Wall for this one ( ~/Mail/oldmail/wall/in.00019 ):
+    'flipcase' variable: upper/lowercase pairs.
+    Insert comma's between pairs and allow a range, make it look like
+    'isfname'.  E.g. ":set flipcase=a-zA-Z,xX,23-33:143-153".  The colon to
+    separate the from and to part is optional.
+7   Support setting 'equalprg' to a user function name.
+9   Add cursor-column highlighting.  Enable it with 'cursorcolumn' option, set
+    highlighting with "CursorColumn" group.  Useful for aligning text.
+    Also cursor-row highlighting.
+    Patch from Yasuhiro Matsumoto for underlining the cursor line, 2004 Mar 24.
+    Alternatie: when 'number' is set highlight the number of the current line.
+7   Highlight the characters after the end-of-line differently.
+7   When 'whichwrap' contains "l", "$dl" should join lines?
+8   Include a connection to an external program through a pipe?  See patches
+    from Felbinger for a mathematica interface.
+    Or use emacs server kind of thing?
+8   Add an argument to configure to use $CFLAGS and not modify it? (Mooney)
+8   Enabling features is a mix of configure arguments and defines in
+    feature.h.  How to make this consistent?  Feature.h is required for
+    non-unix systems.  Perhaps let configure define CONF_XXX, and use #ifdef
+    CONF_XXX in feature.h?  Then what should min-features and max-features do?
+8   Add "g^E" and "g^Y", to scroll a screen-full line up and down.
+6   Add ":timer" command, to set a command to be executed at a certain
+    interval, or once after some time has elapsed. (Aaron)
+8   Add ":confirm" handling in open_exfile(), for when file already exists.
+8   Use confirm/dialog stuff to ask the user, when a file has changed outside
+    of Vim, if he wants to reload it.  Triggered when focus gained, after
+    shell command, when entering another buffer, etc..
+    Also do this when editing a new file, and another application creates
+    the file before doing ":w" in Vim.
+    Also check if the file protection has changed.  When checking a file into
+    RCS it is made read-only, when checking out it is made read-write.
+8   When quitting with changed files, make the dialog list the changed file
+    and allow "write all", "discard all", "write some".  The last one would
+    then ask "write" or "discard" for each changed file.  Patch in HierAssist
+    does something like this. (Shah)
+7   Use growarray for replace stack.
+7   Have a look at viH (Hellenic or Greek version of Vim).  But a solution
+    outside of Vim might be satisfactory (Haritsis).
+3   Make "2d%" work like "d%d%" instead of "d2%"?
+8   Make "more" prompt accept command characters, like "hit-enter" prompt?
+    Or extend it with more commands, like "less": 'b' for back, 'j' for one
+    line down, etc.
+8   For the "--more--" prompt, support the 'b'ack command for more commands.
+    Possible implementation: Do it at a very low level, caching the lines that
+    are on the screen (with highlight attributes).  Avoids that changes have
+    to be made for all functions that list something.
+7   "g CTRL-O" jumps back to last used buffer.	Skip CTRL-O jumps in the same
+    buffer.  Make jumplist remember the last ten accessed buffers?
+-   Keep a list of most recently used files for each window, use "[o" to go
+    back (older file) and "]n" to go forward (newer file) (like ^O and ^I for
+    jumps) (Webb). Use ":files" and ":ls" to list the files in history order.
+7   Add a history of recently accessed buffer.	Maybe make "2 CTRL-^" jump to
+    the 2nd previously visited buffer, "3 CTRL-^" to the third, etc.  Or use
+    "3 g CTRL-^" for this?
+7   Add an option to set the width of the 'number' column.  Eight positions is
+    often more than needed.  Or adjust the width to the length of the file?
+    Add patch that adds 'numberlen' option. (James Harvey)
+    Other patch with min and max from Emmanuel Renieris (2002 Jul 24)
+    Other patch without an option by Gilles Roy (2002 Jul 25)
+-   Add code to disable the CAPS key when going from Insert to Normal mode.
+-   Set date/protection/etc. of the patchfile the same as the original file.
+-   Use growarray for termcodes[] in term.c
+-   Add <window-99>, like <cword> but use filename of 99'th window.
+7   Add a way to change an operator to always work characterwise-inclusive
+    (like "v" makes the operator characterwise-exclusive).  "x" could be used.
+-   Make a set of operations on list of names: expand wildcards, replace home
+    dir, append a string, delete a string, etc.
+-   Remove mktemp() and use tmpname() only?  Ctags does this.
+-   When replacing environment variables, and there is one that is not set,
+    turn it into an empty string?  Only when expanding options? (Hiebert)
+-   Option to set command to be executed instead of producing a beep (e.g. to
+    call "play newbeep.au").
+-   Add option to show the current function name in the status line.  More or
+    less what you find with "[[k", like how 'cindent' recognizes a function.
+    (Bhatt).
+-   "[r" and "]r": like "p" and "P", but replace instead of insert (esp. for
+    blockwise registers).
+-   Add 'timecheck' option, on by default.  Makes it possible to switch off the
+    timestamp warning and question. (Dodt).
+-   Add an option to set the time after which Vim should check the timestamps
+    of the files.  Only check when an event occurs (e.g., character typed,
+    mouse moved).  Useful for non-GUI versions where keyboard focus isn't
+    noticeable.
+9   When using ":w <fname>" it's possible that this file is loaded in another
+    buffer.  Give a warning right away, don't wait for a shell command.
+-   Make 'smartcase' work even though 'ic' isn't set (Webb).
+7   Add ":justify" command.  Patch from Vit Stradal 2002 Nov 25.
+7   When formatting text, allow to break the line at a number of characters.
+    Use an option for this: 'breakchars'?  Useful for formatting Fortran code.
+-   Add flag to 'formatoptions' to be able to format book-style paragraphs
+    (first line of paragraph has larger indent, no empty lines between
+    paragraphs).  Complements the '2' flag.  Use '>' flag when larger indent
+    starts a new paragraph, use '<' flag when smaller indent starts a new
+    paragraph.	Both start a new paragraph on any indent change.
+8   Add 'formatexpr' option: Used for formatting operator "gq" instead of the
+    builtin formatting or 'formatprg'.
+8   Allow using a trailing space to signal a paragraph that continues on the
+    next line (MIME text/plain; format=flowed, RFC 2646).  Can be used for
+    continuous formatting.  Could use 'autoformat' option, which specifies a
+    regexp which triggers auto-formatting (for one line).
+    ":set autoformat=\\s$".
+-   Be able to redefine where a sentence stops.  Use a regexp pattern?
+7   Add command "g)" to go to the end of a sentence, "g(" to go back to the
+    end of a sentence. (Servatius Brandt)
+-   Be able to redefine where a paragraph starts.  For "[[" where the '{' is
+    not in column 1.
+6   Add ":cdprev": go back to the previous directory.  Need to remember a
+    stack of previous directories.  We also need ":cdnext".
+7   Should ":cd" for MS-DOS go to $HOME, when it's defined?
+-   Make "gq<CR>" work on the last line in the file.  Maybe for every operator?
+8   findmatchlimit() should be able to skip comments.  Solves problem of
+    matching the '{' in /* if (foo) { */ (Fiveash)
+-   findmatch() should be adjusted for Lisp.  See remark at get_lisp_indent().
+    Esp. \( and \) should be skipped. (Dorai Sitaram, incomplete patch Mar 18)
+-   Add more redirecting of Ex commands:
+	:redir @> register  (append)
+	:redir #  bufname
+	:redir #> bufname   (append)
+	:redir =  variable
+	:redir => variable  (append)
+-   Setting of options, specifically for a buffer or window, with
+    ":set window.option" or ":set buffer.option=val".  Or use ":buffer.set".
+    Also: "buffer.map <F1> quit".
+6   Would it be possible to change the color of the cursor in the Win32
+    console?  (Klaus Hast)
+-   Add :delcr command:
+			    *:delcr*
+     :[range]delcr[!]	Check [range] lines (default: whole buffer) for lines
+			ending in <CR>.  If all lines end in <CR>, or [!] is
+			used, remove the <CR> at the end of lines in [range].
+			A CTRL-Z at the end of the file is removed.  If
+			[range] is omitted, or it is the whole file, and all
+			lines end in <CR> 'textmode' is set.  {not in Vi}
+-   Should integrate addstar() and file_pat_to_reg_pat().
+-   When working over a serial line with 7 bit characters, remove meta
+    characters from 'isprint'.
+-   Use fchdir() in init_homedir(), like in FullName().
+-   In win_update(), when the GUI is active, always use the scrolling area.
+    Avoid that the last status line is deleted and needs to be redrawn.
+-   That "cTx" fails when the cursor is just after 'x' is Vi compatible, but
+    may not be what you expect.  Add a flag in 'cpoptions' for this?  More
+    general: Add an option to allow "c" to work with a null motion.
+-   Give better error messages by using errno (strerror()).
+-   Give "Usage:" error message when command used with wrong arguments (like
+    Nvi).
+-   Make 'restorescreen' option also work for xterm (and others), replaces the
+    SAVE_XTERM_SCREEN define.
+7   Support for ":winpos" In xterm: report the current window position.
+-   Give warning message when using ":set t_xx=asdf" for a termcap code that
+    Vim doesn't know about.  Add flag in 'shortmess'?
+6   Add ":che <file>", list all the include paths which lead to this file.
+-   For a commandline that has several commands (:s, :d, etc.) summarize the
+    changes all together instead of for each command (e.g. for the rot13
+    macro).
+-   Add command like "[I" that also shows the tree of included files.
+-   Add command like ":ts" that shows the output of "[I" and asks for a match
+    to jump to. (Zellner)
+-   ":set sm^L" results in ":set s", because short names of options are also
+    expanded.  Is there a better way to do this?
+-   Add ":@!" command, to ":@" like what ":source!" is to ":source".
+8   Add ":@:!": repeat last command with forceit set.
+-   Should be possible to write to a device, e.g. ":w! /dev/null".
+-   Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
+-   ":cab map test ^V| je", ":cunab map" doesn't work.	This is vi compatible!
+-   CTRL-W CTRL-E and CTRL-W CTRL-Y should move the current window up or down
+    if it is not the first or last window.
+-   Include-file-search commands should look in the loaded buffer of a file (if
+    there is one) instead of the file itself.
+7   Change 'nrformats' to include the leader for each format.  Example:
+	nrformats=hex:$,binary:b,octal:0
+    Add setting of 'nrformats' to syntax files.
+-   'path' can become very long, don't use NameBuff for expansion.
+-   When unhiding a hidden buffer, put the same line at top of the window as
+    the one before hiding it. Or: keep the same relative cursor position (so
+    many percent down the windows).
+-   Make it possible for the 'showbreak' to be displayed at the end of the
+    line.  Use a comma to separate the part at the end and the start of the
+    line?  Highlight the linebreak characters, add flag in 'highlight'.
+-   Some string options should be expanded if they have wildcards, e.g.
+    'dictionary' when it is "*.h".
+-   Use a specific type for number and boolean options, making it possible to
+    change it for specific machines (e.g. when a long is 64 bit).
+-   Add option for <Insert> in replace mode going to normal mode. (Nugent)
+-   Add a next/previous possibility to "[^I" and friends.
+-   Add possibility to change the HOME directory.  Use the directory from the
+    passwd file? (Antwerpen)
+-   When doing "[^I" or "[^D" add position to tag stack.
+-   Add command to put current position to tag stack: ":tpush".
+8   Add commands to push and pop all or individual options. ":setpush tw",
+    ":setpop tw", ":setpush all".  Maybe pushing/popping all options is
+    sufficient.  ":setflush" resets the option stack?
+    How to handle an aborted mapping?  Remember position in tag stack when
+    mapping starts, restore it when an error aborts the mapping?
+-   Use a builtin grep command for ":grep"?  Makes it possible to add the
+    column number.  Can use the code of ":helpgrep".
+    Also support using "**" in filename, so that a directory tree can be
+    searched.
+-   Change ":fixdel" into option 'fixdel', t_del will be adjusted each time
+    t_bs is set? (Webb)
+-   "gc": goto character, move absolute character positions forward, also
+    counting newlines. "gC" goes backwards (Weigert).
+-   When doing CTRL-^, redraw buffer with the same topline (Demirel). Store
+    cursor row and window height to redraw cursor at same percentage of window
+    (Webb).
+-   Besides remembering the last used line number of a file, also remember the
+    column. Use it with CTRL-^ et. al.
+-   Check for non-digits when setting a number option (careful when entering
+    hex codes like 0xff).
+-   Add option to make "." redo the "@r" command, instead of the last command
+    executed by it.  Also to make "." redo the whole mapping.  Basically: redo
+    the last TYPED command.
+-   Support URL links for ^X^F in Insert mode, like for "gf".
+-   Support %name% expansion for "gf" on Windows.
+-   Make "gf" work on "file://c:/path/name".  "file:/c:/" and "file:///c:/"
+    should also work?
+-   Add 'urlpath', used like 'path' for when "gf" used on an URL?
+8   When using "gf" on an absolute file name, while editing a remote file
+    (starts with scp:// or http://) should prepend the method and machine
+    name.
+-   When finding an URL or file name, and it doesn't exist, try removing a
+    trailing '.'.
+-   Add ":path" command modifier.  Should work for every command that takes a
+    file name argument, to search for the file name in 'path'.	Use
+    find_file_in_path().
+-   Highlight control characters on the screen: Shows the difference between
+    CTRL-X and "^" followed by "X" (Colon).
+-   Integrate parsing of cmdline command and parsing for expansion.
+-   Create a program that can translate a .swp file from any machine into a
+    form usable by Vim on the current machine.
+-   Add ":noro" command: Reset 'ro' flag for all buffers, except ones that have
+    a readonly file. ":noro!" will reset all 'ro' flags.
+-   Add a variant of CTRL-V that stops interpretation of more than one
+    character.	For entering mappings on the command line where a key contains
+    several special characters, e.g. a trailing newline.
+-   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'. Combine
+    the two into a regex for searching. (Ned Konz)
+-   Make '2' option in 'formatoptions' also work inside comments.
+-   Add 's' flag to 'formatoptions': Do not break when inside a string. (Dodt)
+-   When window size changed (with the mouse) and made too small, set it back
+    to the minimal size.
+-   Add "]>" and "[<", shift comment at end of line (command;  /* comment */).
+-   Should not call cursorcmd() for each vgetc() in getcmdline().
+-   ":split file1 file2" adds two more windows (Webb).
+-   Don't give message "Incomplete last line" when editing binary file.
+-   Add ":a", ":i" for preloading of named buffers.
+-   Allow autowrite when doing ":e file" (with an option 'eaw').
+-   Allow a "+command" argument before each file name in the Vim command line:
+    "vim +123 file1 +234 file2 +345 file3". ???
+-   When entering text, keep other windows on same buffer updated (when a line
+    entered)?
+-   Check out how screen does output optimizing.  Apparently this is possible
+    as an output filter.
+-   In dosub() regexec is called twice for the same line. Try to avoid this.
+-   Window updating from memline.c: insert/delete/replace line.
+-   Optimize ml_append() for speed, esp. for reading a file.
+-   V..c should keep indent when 'ai' is set, just like [count]cc.
+-   Updatescript() can be done faster with a string instead of a char.
+-   Screen updating is inefficient with CTRL-F and CTRL-B when there are long
+    lines.
+-   Uppercase characters in ex commands can be made lowercase?
+8   Add option to show characters in text not as "|A" but as decimal ("^129"),
+    hex ("\x81") or octal ("\201") or meta (M-x).  Nvi has the 'octal' option
+    to switch from hex to octal.  Vile can show unprintable characters in hex
+    or in octal.
+7   Tighter integration with xxd to edit binary files.  Make it more
+    easy/obvious to use.  Command line argument?
+-   How does vi detect whether a filter has messed up the screen? Check source.
+    After ":w !command" a wait_return?
+-   Improve screen updating code for doput() (use s_ins()).
+-   With 'p' command on last line: scroll screen up (also for terminals without
+    insert line command).
+-   Use insert/delete char when terminal supports it.
+-   Optimize screen redraw for slow terminals.
+-   Optimize "dw" for long row of spaces (say, 30000).
+-   Add "-d null" for editing from a script file without displaying.
+-   In Insert mode: Remember the characters that were removed with backspace
+    and re-insert them one at a time with <key1>, all together with <key2>.
+-   Amiga: Add possibility to set a keymap. The code in amiga.c does not work
+    yet.
+-   Implement 'redraw' option.
+-   Add special code to 'sections' option to define something else but '{' or
+    '}' as the start of a section (e.g. one shiftwidth to the right).
+-   Add 'indent' option: Always use this amount of indent when starting a new
+    line and when formatting text.
+-   Use pipes for filtering on Unix.  Requires using fork() to be able to read
+    and write at the same time, or some select() mechanism.
+7   Allow using Vim in a pipe: "ls | vim -u xxx.vim - | yyy".  Only needs
+    implementing ":w" to stdout in the buffer that was read from stdin.
+8   Allow opening an unnamed buffer with ":e !cmd" and ":sp !cmd".  Vile can
+    do it.
+-   Add commands like ]] and [[ that do not include the line jumped to.
+-   When :unab without matching "from" part and several matching "to" parts,
+    delete the entry that was used last, instead of the first in the list.
+-   Add text justification option.
+-   Set boolean options on/off with ":set paste=off", ":set paste=on".
+-   After "inv"ing an option show the value: ":set invpaste" gives "paste is
+    off".
+-   Check handling of CTRL-V and '\' for ":" commands that do not have TRLBAR.
+-   When a file cannot be opened but does exist, give error message.
+-   Amiga: When 'r' protection bit is not set, file can still be opened but
+    gives read errors. Check protection before opening.
+-   When writing check for file exists but no permission, "Permission denied".
+-   If file does not exists, check if directory exists.
+-   MSDOS: although t_cv and t_ci are not set, do invert char under cursor.
+-   Settings edit mode: make file with ":set opt=xx", edit it, parse it as ex
+    commands.
+-   ":set -w all": list one option per line.
+-   Amiga: test for 'w' flag when reading a file.
+-   :table command (Webb)
+-   Add new operator: clear, make area white (replace with spaces): "g ".
+-   Make it possible for a user to define a new operator.  Implementation with
+    internal scripting language or Perl?
+-   Add command to ":read" a file at a certain column (blockwise read?).
+-   Add sort of replace mode where case is taken from the old text (Goldfarb).
+-   Allow multiple arguments for ":read", read all the files.
+-   Support for tabs in specific columns: ":set tabcol=8,20,34,56" (Demirel).
+-   Add 'searchdir' option: Directories to search for file name being edited
+    (Demirel).
+-   Modifier for the put command: Change to linewise, charwise, blockwise, etc.
+-   Add commands for saving and restoring options ":set save" "set restore",
+    for use in macro's and the like.
+-   Keep output from listings in a window, so you can have a look at it while
+    working in another window. Put cmdline in a separate window?
+-   Add possibility to put output of ex commands in a buffer or file, e.g. for
+    ":set all".  ":r :set all"?
+-   'edit' option: When off changing the buffer is not possible (Really
+    read-only mode).
+-   When the 'equalalways' option is set, creating a new window should not
+    result in windows to become bigger. Deleting a window should not result in
+    a window to become smaller (Webb).
+-   When resizing the whole Vim window, the windows inside should be resized
+    proportionally (Webb).
+-   Include options directly in option table, no indirect pointers. Use
+    mkopttab to make option table?
+-   When doing ":w dir", where "dir" is a directory name, write the current
+    file into that directory, with the current file name (without the path)?
+-   Support for 'dictionary's that are sorted, makes access a lot faster
+    (Haritsis).
+-   Add "^Vrx" on the command line, replace with contents of register x. Used
+    instead of CTRL-R to make repeating possible. (Marinichev)
+-   Add "^Vb" on the command line, replace with word before or under the
+    cursor?
+-   Option to make a .swp file only when a change is made (Templeton).
+-   Support mapping for replace mode and "r" command (Vi doesn't do this)?
+5   Add 'ignorefilecase' option: Ignore case when expanding file names.
+    ":e ma<Tab>" would also find "Makefile" on Unix.
+8   Sorting of filenames for completion is wrong on systems that ignore case
+    of filenames.  Add 'ignorefncase' option.  When set, case in filenames is
+    ignored for sorting them. Patch by Mike Williams:
+    ~/vim/patches/ignorefncase.  Also change what matches?  Or use another
+    option name.
+8   Should be able to compile Vim in another directory, with $(srcdir) set to
+    where the sources are. Add $(srcdir) in the Makefile in a lot of places.
+    (Netherton)
+6   Make it configurable when "J" inserts a space or not.  Should not add a
+    space after "(", for example.
+5   When inserting spaces after the end-of-line for 'virtualedit', use tabs
+    when the user wants this (e.g., add a "tab" field to 'virtualedit').
+    (Servatius Brandt)
+
+
+From Elvis:
+-   Use "instman.sh" to install manpages?
+-   Add ":alias" command.
+-   fontchanges recognized "\\fB" etc.
+-   Search patterns:
+      \@	match word under cursor.
+    but do:
+      \@w	match the word under the cursor?
+      \@W	match the WORD under the cursor?
+8   ":window" command:
+    :win +	next window (up)
+    :win ++	idem, wrapping
+    :win -	previous window (down)
+    :win --	idem, wrapping
+    :win nr	to window number "nr"
+    :win name	to window editing buffer "name"
+7   ":cc" compiles a single file (default: current one).  'ccprg'   option is
+    program to use with ":cc".  Use ":compile" instead of ":cc"?
+
+
+From Nvi:
+-   'searchincr' option, alias for 'incsearch'?
+-   'leftright' option, alias for 'nowrap'?
+-   Have a look at "vi/doc/vi.chart", for Nvi specialties.
+8   Add 'keytime', time in 1/10 sec for mapping timeout?
+-   Add 'filec' option as an alternative for 'wildchar'.
+6   Support Nvi command names as an alias:
+    :bg		    :hide
+    :fg	fname	    :buf fname (with 'hidden' set?)
+    :dis b	    :ls
+    :Edit fname	    :split fname
+    :Fg fname	    :sbuf fname (with 'hidden' set?)
+    :Next	    :snext (can't do this, already use :Next)
+    :Previous	    :sprevious
+    :Tag	    :stag
+
+
+From xvi:
+-   CTRL-_ : swap 8th bit of character.
+-   Add egrep-like regex type, like xvi (Ned Konz) or Perl (Emmanuel Mogenet)
+
+
+From vile:
+-   When horizontal scrolling, use '>' for lines continuing right of a window.
+-   Support putting .swp files in /tmp: Command in rc.local to move .swp files
+    from /tmp to some directory before deleting files.
+
+
+Far future and "big" extensions:
+-   Make it easy to setup Vim for groups of users: novice vi users, novice
+    Vim users, C programmers, xterm users, GUI users,...
+-   Change layout of blocks in swap file: Text at the start, with '\n' in
+    between lines (just load the file without changes, except for Mac).
+    Indexes for lines are from the end of the block backwards.  It's the
+    current layout mirrored.
+-   Make it possible to edit a register, in a window, like a buffer.
+-   Add stuff to syntax highlighting to change the text (upper-case keywords,
+    set indent, define other highlighting, etc.).
+-   Mode to keep C-code formatted all the time (sort of on-line indent).
+-   Several top-level windows in one Vim session.  Be able to use a different
+    font in each top-level window.
+-   Allow editing above start and below end of buffer (flag in 'virtualedit').
+-   Smart cut/paste: recognize words and adjust spaces before/after them.
+-   Add open mode, use it when terminal has no cursor positioning.
+-   Special "drawing mode": a line is drawn where the cursor is moved to.
+    Backspace deletes along the line (from jvim).
+-   Implement ":Bset", set option in all buffers.  Also ":Wset", set in all
+    windows, ":Aset, set in all arguments and ":Tset", set in all files
+    mentioned in the tags file.
+    Add buffer/arg range, like in ":2,5B%s/..." (do we really need this???)
+    Add search string: "B/*.c/%s/.."?  Or ":F/*.c/%s/.."?
+-   Support for underlining (underscore-BS-char), bold (char-BS-char) and other
+    standout modes switched on/off with , 'overstrike' option (Reiter).
+-   Add vertical mode (Paul Jury, Demirel): "5vdw" deletes a word in five
+    lines, "3vitextESC" will insert "text" in three lines, etc..
+4   Recognize l, #, p as 'flags' to EX commands:
+    :g/RE/#l shall print lines with line numbers and in list format.
+    :g/RE/dp shall print lines that are deleted.
+    POSIX: Commands where flags shall apply to all lines written: list,
+    number, open, print, substitute, visual, &, z. For other commands, flags
+    shall apply to the current line after the command completes.  Examples:
+    :7,10j #l Join the lines 7-10 and print the result in list
+-   Allow two or more users to edit the same file at the same time.  Changes
+    are reflected in each Vim immediately.  Could work with local files but
+    also over the internet.  See http://www.codingmonkeys.de/subethaedit/.
+
+
+vim:tw=78:sw=4:sts=4:ts=8:ft=help:norl:
+vim: set fo+=n :
