*todo.txt*      For Vim version 7.4.  Last change: 2015 Mar 20


		  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|.

Issues can also be entered online: http://code.google.com/p/vim/issues/list
Updates will be forwarded to the vim_dev maillist.  Issues entered there will
not be repeated below, unless there is extra information.

							*known-bugs*
-------------------- Known bugs and current work -----------------------

Regexp problems:
- The old engine does not find a match for "/\%#=1\(\)\{80}", the new engine
  matches everywhere.
- Using win_linetabsize() can still be slow. Cache the result, store col and
  vcol. Reset them when moving to another line.
- Very slow with a long line and Ruby highlighting. (John Whitley, 2014 Dec 4)
- Bug with pattern: '\vblock (\d+)\.\n.*\d+%(\1)@<!\.$'
  (Lech Lorens, 2014 Feb 3)
- Issue 164: freeze on regexp search.
- Ignorecase not handled properly for multi-byte characters. (Axel Bender,
  2013 Dec 11)
- Using \@> and \?. (Brett Stahlman, 2013 Dec 21) Remark from Marcin Szamotulski
  Remark from Brett 2014 Jan 6 and 7.
- Difference in NFA and old engine. (Brett Stahlman, 2014 Nov 5)
- Bug when using \>. (Ramel, 2014 Feb 2) (Aaron Bohannon, 2014 Feb 13)
- NFA regexp doesn't handle \%<v correctly. (Ingo Karkat, 2014 May 12)
- Does not work with NFA regexp engine:
  \%u, \%x, \%o, \%d followed by a composing character
- Bug relating to back references. (Ingo Karkat, 2014 Jul 24)
- New RE does not give an error for empty group: "\(\)\{2}" (Dominique Pelle,
  2015 Feb 7)
- Using back reference before the capturing group sometimes works with the old
  engine, can we do this with the new engine?  E.g. with
  "/\%(<\1>\)\@<=.*\%(<\/\(\w\+\)>\)\@=" matching text inside HTML tags.
- Strange matching with "\(Hello\n\)\@<=A". (Anas Syed, 2015 Feb 12)
- Problem with \v(A)@<=b+\1c. (Issue 334)
- Diff highlighting can be very slow. (Issue 309)
- Using %> for a virtual column has a check based on 'tabsize'.  Better would
  be to cache the result of win_linetabsize(col), storing both col and vcol,
  and use them to decide whether win_linetabsize() needs to be called.  Reset
  col and vcol when moving to another line.
- this doesn't work: "syntax match ErrorMsg /.\%9l\%>20c\&\%<28c/".  Leaving
  out the \& works.  Seems any column check after \& fails.

Check out neovim bug reports that apply to Vim:
https://github.com/neovim/neovim/issues?q=label%3Abug-vim
Specifically:
https://github.com/neovim/neovim/commit/cf8e175cf54281bcad5e704308e92ebb3e6381d3
https://github.com/neovim/neovim/commit/d7038127ca6b356ad33fdec08aa3b23ac6a817af
https://github.com/neovim/neovim/commit/77ace65bdce379f2d9b13ee81ab3fc01951f92dc
And also:
https://github.com/neovim/neovim/pull/2157/commits

Still using freed memory after using setloclist(). (lcd, 2014 Jul 23)
More info Jul 24.  Not clear why.

Updated Irish translation. (Kevin Scannell, 2015 Mar 13)

Better .ico file for Windows. (Pat Suwalski, 2015 Feb 13)
Waiting for response on remark from Edward Fox.

Patch to make getregtype() return the right size for non-linux systems.
(Yasuhiro Matsumoto, 2014 Jul 8)
Breaks test_eval.  Inefficient, can we only compute y_width when needed?

Problem that a previous silent ":throw" causes a following try/catch not to
work. (ZyX, 2013 Sep 28)

Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)

":cd C:\Windows\System32\drivers\etc*" does not work, even though the
directory exists. (Sergio Gallelli, 2013 Dec 29)

C indent: should recognize C11 raw strings. (Mark Lodato, 2015 Mar 1)
Need to recognize R"string".

Suggested patch to MingW makefiles. (Michael Soyka, 2015 Mar 11)
Feedback from others?

Patch for :tabmove not working as documented. (Hirohito Higashi, 2015 Mar 10)
https://gist.github.com/h-east/ffabb0cdd589a5f9acd2
Updated patch emailed. (Mar 17)  Awaiting comments.

Crash when changing the 'tags' option from a remote command.
(Benjamin Fritz, 2015 Mar 18)

Gvim: when both Tab and CTRL-I are mapped, use CTRL-I not for Tab.

Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)

MS-Windows: When editing a file with a leading space, writing it uses the
wrong name. (Aram, 2014 Nov 7)  Vim 7.4.

Can't recognize the $ProgramFiles(x86) environment variable.  Recognize it
specifically?  First try with the parens, then without.

Value returned by virtcol() changes depending on how lines wrap.  This is
inconsistent with the documentation.

Better greek spell checking.  Issue 299.

When complete() first argument is before where insert started and 'backspace'
is Vi compatible, the completion fails. (Hirohito Higashi, 2015 Feb 19)

Weird encryption problems on Windows. (Ben Fritz, 2015 Feb 13)
Goes away when disabling the swap file. (might1, Feb 16)

Problem caused by patch 7.3.638: window->open does not update window
correctly. Issue 91.  With patch.

MS-Windows: Crash opening very long file name starting with "\\".
(Christian Brock, 2012 Jun 29)

Patch to handle directories better for --remote. (xaizek, 2015 Mar 1)

Cursorline background color not mixed with character highlight.
Patch by Yasuhiro Matsumoto, 2014 Dec 3.

The argument for "-S" is not taken literally, the ":so" command expands
wildcards.  Add a ":nowild" command modifier?  (ZyX, 2015 March 4)

Problem using diff syntax with cp932 encoding.  Idea from Yasuhiro Matsumoto,
patch from Ken Takata (2014 Nov 6)

ml_updatechunk() is slow when retrying for another encoding. (John Little,
2014 Sep 11)

Patch to add counts to zr and zm. (Marcin Szamotulski, 2015 Jan 28)

Patch to add a different escape sequence for replace mode.
(Omar Sandoval, 2014 Nov 30)

Patch on Issue 166, popup drawing with '$' in 'cpo'.

When a session file is created and there are "nofile" buffers, these are not
filled.  Need to trigger BufReadCmd autocommands.  Also handle deleting the
initial empty buffer better. (ZyX, 2015 March 8)

Calling setreg() with an empty list doesn't work.
Patch by Yasuhiro Matsumoto, 2014 Dec 14.

Extended file attributes lost on write (backupcopy=no).  Issue 306.

Patch to add an argument to ":ls" for specific kinds of buffers.
(Marcin Szamotulski, 2015 Jan 31)

Crash when using R syntax. (Jakson Alves de Aquino, 2015 Jan 30)
Memory freed by ":syn clear" but still referenced, syntax items referenced
from two windows?  Stopped happening (Feb 5).

Window height computed incorrectly when Vim is minimized.
Patch to fix this. (Ingo Karkat, 2014 Dec 19)

Patch to fix CTRL-W handling in Insert mode for multi-byte characters.
(Yasuhiro Matsumoto, 2015 Jan 29, update with test)

Patch to allow values greater than 255 for ctermfg/ctermbg on Windows.
(Yasuhiro Matsumoto, 2014 Dec 5)

Patch for an extra argument to matchadd() for conceal. (Christian Brabandt,
2015 Feb 17, update Feb 19)

Mixup of highlighting when there is a match and SpellBad. (ZyX, 2015 Jan 1)

Patch to add 'belloff' option. (Christian Brabandt, 2015 Jan 31)
Update Feb 6.

Patch for drag&drop reordering of GUI tab pages reordering.
(Ken Takata, 2013 Nov 22, second one, also by Masamichi Abe)

Patch on Issue 72: 'autochdir' causes problems for :vimgrep.

When 'balloonexpr' returns a list the result has a trailing newline.
Just remove one trailing newline. (lcd, 2014 Oct 17)

Make comments in the test Makefile silent. (Kartik Agaram, 2014 Sep 24)

Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan
26, update 2013 Dec 14, another 2014 Nov 22)

Result of systemlist() does not show whether text ended in line break.
(Bjorn Linse, 2014 Nov 27)

When in 'comments' "n:x" follows after three-part comment directly it repeats
any one-character from the previous line. (Kartik Agaram, 2014 Sep 19)

Syntax highlighting slow (hangs) in SASS file. (Niek Bosch, 2013 Aug 21)

Patch to add the EndOfBuffer highlight group, used instead of NonText for "~"
lines. (Marco Hinz, 2014 Nov 2)

Adding "~" to 'cdpath' doesn't work for completion?  (Davido, 2013 Aug 19)

Should be easy to highlight all matches with 'incsearch'.  Idea by Itchyny,
2015 Feb 6.

Plugins need to make a lot of effort, lots of mappings, to know what happened
before pressing the key that triggers a plugin action.  How about keeping the
last N pressed keys, so that they do not need to be mapped?

":q!" should reset modified flag for current buffer, if another buffer is
modified no need to abandon it again.
Patch from Yasuhiro Matsumoto, 2014 Nov 21.
Update from Hirohito Higashi, 2014 Nov 21.
With test, Nov 23.

Wrong scrolling when using incsearch.  Patch by Christian Brabandt, 2014 Dec 4.
Is this a good solution?

Can assign to s:type when a function s:type has been defined.
Also the other way around: define a function while a variable with that name
was already defined.
(Yasuhiro Matsumoto, 2014 Nov 3)

Patch to make closed folds line up. (Charles Campbell, 2014 Sep 12)
Remark from Roland Eggner: does it cause crashes? (2014 Dec 12)
Updated patch by Roland Eggner, Dec 16
Updated patch from Charles, Dec 29.

Patch to open folds for 'incsearch'. (Christian Brabandt, 2015 Jan 6)

Patch for building a 32bit Vim with 64bit MingW compiler.
(Michael Soyka, 2014 Oct 15)

Delete old code in os_msdos.c, mch_FullName().

Patch: On MS-Windows shellescape() may have to triple double quotes.
(Ingo Karkat, 2015 Jan 16)

Redo only remembers the last change.  Could use "{count}g." to redo an older
change.  How does the user know which change?  At least have a way to list
them: ":repeats".

Patch for glob(), adding slash to normal files. (Ingo Karkat, 2014 Dec 22)

Using "." to repeat an Ex command puts that command in history.  Probably
should not happen.  If the command is the result of a mapping it's not put in
history either. (Jacob Niehus, 2014 Nov 2)
Patch from Jacob, Nov 2.

"hi link" does not respect groups with GUI settings only. (Mark Lodato, 2014
Jun 8)

Bug: Autocompleting ":tag/pat" replaces "/pat" with a match but does not
insert a space. (Micha Mos, 2014 Nov 7)

Patch to add the :bvimgrep command.  (Christian Brabandt, 2014 Nov 12)
Update Dec 6.

Patch to add argument to :cquit. (Thinca, 2014 Oct 12)

No error for missing endwhile. (ZyX, 2014 Mar 20)

The entries added by matchaddpos() are returned by getmatches() but can't be
set with setmatches(). (lcd47, 2014 Jun 29)

Patch to add :arglocal and :arglists. (Marcin Szamotulski, 2014 Aug 6)

PHP syntax is extremely slow. (Anhad Jai Singh, 2014 Jan 19)

Spell files use a latin single quote. Unicode also has another single quote:
0x2019.  (Ron Aaron, 2014 Apr 4)
New OpenOffice spell files support this with ICONV.  But they are not
compatible with Vim spell files.  The old files can no longer be downloaded.

Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki
Saito, 2013 Apr 24)  Has a problem (email 2015 Jan 7).
Update 2015 Jan 10.

Win32: patch to use 64 bit stat() if possible. (Ken Takata, 2014 May 12)
More tests May 14. Update May 29.  Update Aug 10.

Idea: For a window in the middle (has window above and below it), use
right-mouse-drag on the status line to move a window up/down without changing
its height?  It's like dragging the status bar above it at the same time.

Can we make ":unlet $VAR" use unsetenv() to delete the env var?
What for systems that don't have unsetenv()?

Patch to add a :domodeline command. (Christian Brabandt, 2014 Oct 21)

Patch to add TabNew, TabNewEntered and TabClosed autocommand events.
(Felipe Morales, 2015 Feb 1)

This does not give an error: (Andre Sihera, 2014 Mar 21)
    vim -u NONE 1 2 3 -c 'bufdo if 1 | echo 1'
This neither: (ZyX)
    vim -u NONE 1 2 3 -c 'bufdo while 1 | echo 1'

'viewdir' default on MS-Windows is not a good choice, it's a system directory.
Change 'viewdir' to "$HOME/vimfiles/view" and use 'viewdiralt' to also read
from?

Problem with upwards search on Windows (works OK on Linux). (Brett Stahlman,
2014 Jun 8)

Patch to load TCL dynamically. (Ken Takata, 2014 Sep 20)

Include a plugin manager with Vim? Neobundle seems to be the best currently.
Long message about this from ZyX, 2014 Mar 23.  And following replies.
Also see http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html
User view:
- Support multiple sources, basically any http:// URL.  Be able to look into
  the files before deciding to install.
- Be able to try out a plugin and remove it again with (almost) no traces.
- Each plugin needs a "manifest" file that has the version, dependencies
  (including Vim version and features), conflicts, list of files, etc.
  Updater uses that to decide what/how to update.
  Dependencies can use a URL for specific versions, or short name for scripts
  on vim.org.
- Once a plugin is installed it remembers where it came from, updater checks
  there.  Can manually update when really needed.
- Must be possible to install for one user.  Also system wide?
- Can edit plugin config with Vim. Can temporarily disable a plugin.
- Run the update manually, find latest version and install.
- Be able to download without special tools, must work for 95% of users.
Implementation:
- Avoid the 'runtimepath' getting long.  Need some other way to keep each
  plugin separate.
- When installing or updating, first figure out what needs to be done. This
  may involve recursively fetching manifest files for dependencies.  Then show
  the user what's going to change and ask for OK.
- Scripts on Vim.org must be able to consist of several files.  Is zip format
  sufficient?  Upload the manifest?  Or refer to a site that has the manifest?
- Best is to fetch individual files or use a Vimball. Reduces dependency on
  tools that might be missing and allows inspection of the files before
  installing.
Out of scope:
- Overview of plugins, ratings, comments, etc.  That's another world.
- Development work on plugins (although diff with distributed version would be
  useful).

Setting the spell file in a session only reads the local additions, not the
normal spell file. (Enno Nagel, 2014 Mar 29)

CTRL-] in Visual mode uses the selected text as a tag.  This does not work
when preceded with CTRL-W. (Patrick Hemmer, 2014 Jun 28)

When typing the first character of a command, e.g. "f", then using a menu, the
menu item doesn't work.  Clear typeahead when using a menu?

Editing an ascii file as ucs-2 or ucs-4 causes display errors.
(ZyX, 2014 Mar 30)

":Next 1 some-arg" does not complain about trailing argument.  Also for
various other commands.  (ZyX, 2014 Mar 30)

patch to skip sort if no line matches the expression.
(Christian Brabandt, 2014 Jun 25)

Patch to add sortuniq(). (Cade Forester, 2014 Mar 19)
Or add uniq() instead?  Patch by lcd47, but it has problems.

Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
30)

Patch to support expression argument to sort() instead of a function name.
Yasuhiro Matsumoto, 2013 May 31.
Or should we add a more general mechanism, like a lambda() function?
Patch by Yasuhiro Matsumoto, 2014 Sep 16.

Patch to fix display of listchars on the cursorline. (Nayuri Aohime, 2013)
Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
https://gist.github.com/presuku/d3d6b230b9b6dcfc0477

VMS: Select() doesn't work properly, typing ESC may hang Vim.  Use sys$qiow
instead. (Samuel Ferencik, 2013 Sep 28)

Patch for XDG base directory support. (Jean François Bignolles, 2014 Mar 4)
Remark on the docs.  Should not be a compile time feature.  But then what?

Completion of ":e" is ":earlier", should be ":edit".  Complete to the matching
command instead of doing this alphabetically. (Mikel Jorgensen)

Patch to add v:completed_item. (Shougo Matsu, 2013 Nov 29).

Patch to get MSVC version in a nicer way. (Ken Takata, 2014 Jul 24)

Patch to define macros for hardcoded values. (Elias Diem, 2013 Dec 14)

Several syntax file match "^\s*" which may get underlined if that's in the
highlight group.  Add a "\zs" after it?

Go through more coverity reports.

Patch to add ":undorecover", get as much text out of the undo file as
possible. (Christian Brabandt, 2014 Mar 12, update Aug 22)

Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)

Updated spec ftplugin. (Matěj Cepl, 2013 Oct 16)

Patch to right-align signs. (James Kolb (email james), 2013 Sep 23)

Patch to handle integer overflow. (Aaron Burrow, 2013 Dec 12)

With "$" in 'cpoptions' the popup menu isn't fully drawn. (Matti Niemenmaa,
2013 Sep 5)

Patch to add "ntab" item in 'listchars' to repeat first character. (Nathaniel
Braun, pragm, 2013 Oct 13)  A better solution 2014 Mar 5.

Undo message is not always properly displayed.  Patch by Ken Takata, 2013 oct
3.  Doesn't work properly according to Yukihiro Nakadaira.

/[b-a] gives error E16, should probably be E769.

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").
Patch by Thomas Tuegel, also for GTK, 2013 Nov 24

:help gives example for z?, but it does not work.  m? and t? do work.

Python: Extended funcrefs: use func_T* structure in place of char_u* function
names.
(ZyX, 2013 Jul 15, update Sep 22, 24, 28; Update 2013 Dec 15, 2014 Jan 6)
Also fixes Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)

Patch to add funcref to Lua.  (Luis Carvalho, 2013 Sep 4)
With tests: Sep 5.

Patch to fix that on suckless Terminal mousewheel up does not work.
(Ralph Eastwood, 2013 Nov 25)

Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)

Checking runtime scripts: Thilo Six, 2012 Jun 6.

When evaluating expression in backticks, autoload doesn't work.
(Andy Wokula, 2013 Dec 14)

Using <nr>ifoobar<esc> can slow down Vim.  Patch by Christian Brabandt, 2013
Dec 13.

Fold can't be opened after ":move". (Ein Brown)
Patch from Christian Brabandt doesn't fix it completely.

Patch from Christian Brabandt to preserve upper case marks when wiping out a
buffer. (2013 Dec 9)

GTK: problem with 'L' in 'guioptions' changing the window width.
(Aaron Cornelius, 2012 Feb 6)

Patch to add option that tells whether small deletes go into the numbered
registers. (Aryeh Leib Taurog, 2013 Nov 18)

Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3.

The BufUnload event is triggered when re-using the empty buffer.
(Pokey Rule, 2013 Jul 22)
Patch by Marcin Szamotulski, 2013 Jul 22.

The CompleteDone autocommand needs some info passed to it:
- The word that was selected (empty if abandoned complete)
- Type of completion: tag, omnifunc, user func.

Patch to allow more types in remote_expr(). (Lech Lorens, 2014 Jan 5)
Doesn't work for string in list.  Other way to pass all types of variables
reliably?

Using ":call foo#d.f()" doesn't autoload the "foo.vim" file.
That is, calling a dictionary function on an autoloaded dict.
Works OK for echo, just not for  ":call" and ":call call()". (Ted, 2011 Mar
17)
Patch by Christian Brabandt, 2013 Mar 23.
Not 100% sure this is the right solution.

Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}.
(Christian Brabandt, 2013 Dec 9)

Exception caused by argument of return is not caught by try/catch.
(David Barnett, 2013 Nov 19)

8   'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when
    defined.
Issue 28.

Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt,
2013 Mar 19, later message)

Patch to view coverage of the tests. (Nazri Ramliy, 2013 Feb 15)

Patch to invert characters differently in GTK. (Yukihiro Nakadaira, 2013 May
5)

Patch to add "Q" and "A" responses to interactive :substitute. They are
carried over when using :global. (Christian Brabandt, 2013 Jun 19)

Bug with 'cursorline' in diff mode.  Line being scrolled into view gets
highlighted as the cursor line.  (Alessandro Ivaldi, 2013 Jun 4)

Two highlighting bugs. (ZyX, 2013 Aug 18)

Patch to add the bufferlist() function. (Yegappan Lakshmanan, 2013 May 5)
May 17: with winlist() and tabpagelist().
May 19: with local variables.
May 28: with options

Patch to support 'u' in interactive substitute. (Christian Brabandt, 2012 Sep
28)  With tests: Oct 9.

Patch from Christian Brabandt to make the "buffer" argument for ":sign place"
optional. (2013 Jul 12)

Dialog is too big on Linux too. (David Fishburn, 2013 Sep 2)

Patch to check whether a buffer is quickfix or a location list.
(Yasuhiro Matsumoto, 2014 Dec 9)

Patch to allow setting w:quickfix_title via setqflist() and setloclist()
functions. (Christian Brabandt, 2013 May 8, update May 21)
Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14)
Second one. Update May 22.
Update by Daniel Hahler, 2014 Jul 4, Aug 14, Oct 14, Oct 15.

Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)

Issue 54: document behavior of -complete, also expands arg.

-   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
    the two into a regex for searching. (Ned Konz)
Patch by Christian Brabandt, 2013 Apr 20, unfinished.

Bug: findfile("any", "file:///tmp;") does not work.

Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14)
Needs a different check for CLEARTYPE_QUALITY.

In the ATTENTION message about an existing swap file, mention the name of the
process that is running.  It might actually be some other program, e.g. after
a reboot.

Patch to have text objects defined by arbitrary single characters. (Daniel
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
Ben Fritz: problem with 'selection' set to "exclusive".
Updated to current Vim, not quite right yet. (Ben Fritz, 2014 Mar 27)

Patch to select the next or previous text object if there isn't one under the
cursor. (Daniel Thau, 2013 Nov 20)

patch to add "combine" flag to  syntax commands. (so8res, 2012 Dec 6)

Bug caused by patch 7.3.1288?  Issue 183.
I can't reproduce it.

Syntax update problem in one buffer opened in two windows, bottom window is
not correctly updated. (Paul Harris, 2012 Feb 27)

Patch to add assignments in cscope. (Uli Meis, Estabrooks, 2012 Sep 1)
Alternate patch by Gary Johnson, Sep 4.

Patch to add getsid(). (Tyru, 2011 Oct 2)  Do we want this?  Update Oct 4.
Or use expand('<sid>')?

Patch to make confirm() display colors. (Christian Brabandt, 2012 Nov 9)

Patch to add functions for signs. (Christian Brabandt, 2013 Jan 27)

Do we need some way (option) to show the sign column even when there are no
signs?  Patch by Christian Brabandt, 2013 Aug 22.

Patch to remove flicker from popup menu. (Yasuhiro Matsumoto, 2013 Aug 15)

Patch to add 'completeselect' option.  Specifies how to select a candidate in
insert completion. (Shougo, 2013 May 29)
Update to add to existing 'completeopt'. 2013 May 30

Problem with refresh:always in completion. (Tyler Wade, 2013 Mar 17)

b:undo_ftplugin cannot call a script-local function. (Boris Danilov, 2013 Jan
7)

Win32: 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?

Python: Be able to define a Python function that can be called directly from
Vim script.  Requires converting the arguments and return value, like with
vim.bindeval().

Patch for :tabcloseleft, after closing a tab go to left tab. (William Bowers,
2012 Aug 4)

Patch to improve equivalence classes in regexp patterns.
(Christian Brabandt, 2013 Jan 16, update Jan 17)

Patch with suggestions for starting.txt. (Tony Mechelynck, 2012 Oct 24)
But use Gnome instead of GTK?

Should be possible to enable/disable matchparen per window or buffer.
Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin
Szamotulski, 2012 Nov 8)

Session file creation: 'autochdir' causes trouble.  Keep it off until after
loading all files.

Win32: When 'autochdir' is on and 'encoding' is changed, files on the command
line are opened again, but from the wrong directory.  Apply 'autochdir' only
after starting up?

Patch to add ":ldo" and ":cdo", execute commands over quickfix list and
location list. (Yegappan Lakshmanan, 2013 Jun 2)

8   "stl" and "stlnc" in 'fillchars' don't work for multi-byte characters.
    Patch by Christian Wellenbrock, 2013 Jul 5.

MS-Windows resizing problems:
- Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun
  20.  Uses getWindowRect() instead of GetWindowPlacement()
- Win32: When the taskbar is at the top of the screen creating the tabbar
  causes the window to move unnecessarily. (William E. Skeith III, 2012 Jan
  12) Patch: 2012 Jan 13  Needs more work (2012 Feb 2)

Patch to use Modern UI 2.0 for the Nsis installer. (Guopeng Wen, 2010 Jul 30)
Latest version: 2011 May 18 
8   Windows install with NSIS: make it possible to do a silent install, see
    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
    Version from Guopeng Wen that does this (2010 Dec 27)
Alternative: MSI installer: https://github.com/petrkle/vim-msi/
Or the one on Issue 279

'iminsert' global value set when using ":setlocal iminsert"? (Wu, 2012 Jun 23)

Patch to append regexp to tag commands to make it possible to select one out
of many matches. (Cody Cutler, 2013 Mar 28)

Patch to add tagfunc().  Cleaned up by Christian Brabandt, 2013 Jun 22.

Help for 'b:undo_indent'. (Thilo Six, 2012 May 28)
Also question if examples are correct.

The input map for CTRL-O in mswin.vim causes problems after CTRL-X CTRL-O.
Suggestion for another map. (Philip Mat, 2012 Jun 18)
But use "gi" instead of "a".  Or use CTRL-\ CTRL-O.

Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012
Aug 16)

When there are no command line arguments ":next" and ":argu" give E163, which
is confusing.  Should say "the argument list is empty".

xterm supports escape sequences to mark a paste operation.  Need to be
enabled. (Bruno Sutic, 2014 Jul 11)  How to know the terminal supports this?

URXVT:
- will get stuck if byte sequence does not contain the expected semicolon.
- Use urxvt mouse support also in xterm.  Explanations:
  http://www.midnight-commander.org/ticket/2662

Patch to have the fold and sign column and at the last line of the buffer.
(Marco Hinz, 2014 Sep 25)
Alternate suggestion: let all columns continue, also the number column.

Patch to add tests for if_xcmdsrv.c., Jul 8, need some more work. (Brian Burns)
New tests Jul 13.   Update Jul 17.  Discussion Jul 18.

When running Vim in silent ex mode, an existing swapfile causes Vim to wait
for a user action without a prompt. (Maarten Billemont, 2012 Feb 3)
Do give the prompt? Quit with an error?

Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14)

Patch to add digraph() function. (Christian Brabandt, 2013 Aug 22, update Aug
24)

Patch for input method status. (Hirohito Higashi, 2012 Apr 18)

Update Vim app icon (for Gnome). (Jakub Steiner, 2013 Dec 6)

Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
Apr 18)

Patch for has('unnamedplus') docs. (Tony Mechelynck, 2011 Sep 27)
And one for gui_x11.txt.

":cd" doesn't work when current directory path contains "**".
finddir() has the same problem.  (Yukihiro Nakadaira, 2012 Jan 10)
Requires a rewrite of the file_file_in_path code.

Should use has("browsefilter") in ftplugins.  Requires patch 7.3.593.

Update for vim2html.pl. (Tyru, 2013 Feb 22)

Patch to sort functions starting with '<' after others.  Omit dict functions,
they can't be called. (Yasuhiro Matsumoto, 2011 Oct 11)

Patch to pass list to or(), and() and xor(). (Yasuhiro Matsumoto, 2012 Feb 8)

Patch to improve "it" and "at" text object matching. (Christian Brabandt, 2011
Nov 20)

Patch to improve GUI find/replace dialog. (Christian Brabandt, 2012 May 26)
Update Jun 2.

`] moves to character after insert, instead of the last inserted character.
(Yukihiro Nakadaira, 2011 Dec 9)

Plugin for Modeleasy. (Massimiliano Tripoli, 2011 Nov 29)

BufWinLeave triggers too late when quitting last window in a tab page. (Lech
Lorens, 2012 Feb 21)

Patch for 'transparency' option. (Sergiu Dotenco, 2011 Sep 17)
Only for MS-Windows.  No documentation.  Do we want this?

Patch to support cursor shape in Cygwin console. (Ben bgold, 2011 Dec 27)

Patch to support UTF-8 for Hangul. (Shawn Y.H. Kim, 2011 May 1)
Needs more work.  Pinged 2012 Jan 4.

Issue 64: when 'incsearch' is on can't paste LF on command line.

On MS-Windows a temp dir with a & init causes system() to fail. (Ben Fritz,
2012 Jun 19)

'cursorline' is displayed too short when there are concealed characters and
'list' is set.  (Dennis Preiser)
Patch 7.3.116 was the wrong solution.
Christian Brabandt has another incomplete patch. (2011 Jul 13)

With concealed text mouse click doesn't put the cursor in the right position.
(Herb Sitz)  Fix by Christian Brabandt, 2011 Jun 16.  Doesn't work properly,
need to make the change in where RET_WIN_BUF_CHARTABSIZE() is called.

Syntax region with 'concealends' and a 'cchar' value, 'conceallevel' set to 2,
only one of the two ends gets the cchar displayed. (Brett Stahlman, 2010 Aug
21, Ben Fritz, 2010 Sep 14)

The :syntax cchar value can only be a single character.  It would be useful to
support combining characters. (Charles Campbell)

'cursorline' works on a text line only.  Add 'cursorscreenline' for
highlighting the screen line. (Christian Brabandt, 2012 Mar 31)

Win32: Patch to use task dialogs when available. (Sergiu Dotenco, 2011 Sep 17)
New feature, requires testing.  Made some remarks.

Win32: Patch for alpha-blended icons and toolbar height. (Sergiu Dotenco, 2011
Sep 17)  Asked for feedback from others.

Win32: Cannot cd into a directory that starts with a space. (Andy Wokula, 2012
Jan 19)

Need to escape $HOME on Windows?  (ZyX, 2011 Jul 21, discussion 2013 Jul 4)
Can't simply use a backslash, \$HOME has a different meaning already.
Would be possible to use $$HOME where $HOME is to be used.

"2" in 'formatoptions' not working in comments. (Christian Corneliussen, 2011
Oct 26)

Bug in repeating Visual "u". (Lawrence Kesteloot, 2010 Dec 20)

With "unamedplus" in 'clipboard' pasting in Visual mode causes error for empty
register. (Michael Seiwald, 2011 Jun 28)  I can't reproduce it.

Windows keys not set properly on Windows 7?  (cncyber, 2010 Aug 26)

When using a Vim server, a # in the path causes an error message.
(Jeff Lanzarotta, 2011 Feb 17)

Setting $HOME on MS-Windows is not very well documented.  Suggestion by Ben
Fritz (2011 Oct 27).

Bug: Windows 7 64 bit system freezes  when 'clipboard' set to "unnamed" and
doing ":g/test/d".  Putting every delete on the clipboard? (Robert Chan, 2011
Jun 17)

When there is a ">" in a line that "gq" wraps to the start of the next line,
then the following line will pick it up as a leader.  Should get the leader
from the first line, not a wrapped line. (Matt Ackeret, 2012 Feb 27)

Using ":break" or something else that stops executing commands inside a
":finally" does not rethrow a previously uncaught exception. (ZyX, 2010 Oct
15)

Vim using lots of memory when joining lines. (John Little, 2010 Dec 3)

BT regexp engine: After trying a \@> match and failing, submatches are not
cleared.  See test64.

Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25)

Patch to make "z=" work when 'spell' is off.  Does this have nasty side
effects?  (Christian Brabandt, 2012 Aug 5, Update 2013 Aug 12)
Would also need to do this for spellbadword() and spellsuggest().

Patch for variable tabstops.  On github (Christian Brabandt, 2014 May 15)
Update Aug 16 (email).

On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a
64 bits value.  Change all number options to use nropt_T and define it to the
right type.

string() can't parse back "inf" and "nan".  Fix documentation or fix code?
(ZyX, 2010 Aug 23)

Make 'formatprg' global-local. (Sung Pae)

When doing "redir => s:foo" in a script and then "redir END" somewhere else
(e.g. in a function) it can't find s:foo.
When a script contains "redir => s:foo" but doesn't end redirection, a
following "redir" command gives an error for not being able to access s:foo.
(ZyX, 2011 Mar 27)

When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
doesn't jump to the correct line with :cfirst. (ZyX,  2011 Sep 18)

Behavior of i" and a" text objects isn't logical. (Ben Fritz, 2013 Nov 19)

7   Make "ga" show the digraph for a character, if it exists.
Patch from Christian Brabandt, 2011 Aug 19.

maparg() does not show the <script> flag.  When temporarily changing a
mapping, how to restore the script ID?

Bug in try/catch: return with invalid compare throws error that isn't caught.
(ZyX, 2011 Jan 26)

When setting a local option value from the global value, add a script ID that
indicates this, so that ":verbose set" can give a hint.  Check with options in
the help file.

After patch 7.3.097 still get E15. (Yukihiro Nakadaira, 2011 Jan 18)
Also for another example (ZyX, 2011 Jan 24)

Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24)

"0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22)

Patch to addd TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011
May 24)  Update May 26.

Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30)

Problem with "syn sync grouphere". (Gustavo Niemeyer, 2011 Jan 27)

Loading autoload script even when usage is inside "if 0". (Christian Brabandt,
2010 Dec 18)

With a filler line in diff mode, it isn't displayed in the column with line
number, but it is in the sign column.  Doesn't look right. (ZyX 2011 Jun 5)
Patch by Christian Brabandt, 2011 Jun 5.  Introduces new problems.

Add jump() function. (Marcin Szamotulski, 2013 Aug 29)
Is this needed?  CTRL-O and CTRL-I do the same, just more difficult to use.

8   Add a command to jump to the next character highlighted with "Error".
Patch by Christian Brabandt, uses ]e [e ]t and [t. 2011 Aug 9.

8   Add an event like CursorHold that is triggered repeatedly, not just once
    after typing something.
Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
function that resets did_cursorhold.
Patch by Christian Brabandt, 2011 May 6.

Add event for when the text scrolls.  A bit like CursorMoved.  Also a similar
one for insert mode.  Use the event in matchparen to update the highlight if
the match scrolls into view.

7   Use "++--", "+++--" for different levels instead of "+---" "+----".
Patch by Christian Brabandt, 2011 Jul 27.
Update by Ben Fritz, with fix for TOhtml. (2011 Jul 30)

9   Add %F to 'errorformat': file name without spaces.  Useful on Unix to
    avoid matching something up to a time 11:22:33.
Patch by Christian Brabandt, 2011 Jul 27.

Patch to add up to 99 match groups. (Christian Brabandt, 2010 Dec 22)
Also add named groups: \%{name}(re)  and \%{name}g

In the sandbox it's not allowed to do many things, but it's possible to change
or set variables.  Add a way to prevent variables from being changed in the
sandbox?  E.g.: ":protect g:restore_settings".

GTK: drawing a double-width combining character over single-width characters
doesn't look right. (Dominique Pelle, 2010 Aug 8)

GTK: tear-off menu does not work. (Kurt Sonnenmoser, 2010 Oct 25)

Win32: tear-off menu does not work when menu language is German. (Markus
Bossler, 2011 Mar 2)  Fixed by 7.3.095?

Version of netbeans.c for use with MacVim. (Kazuki Sakamoto, 2010 Nov 18)

7.3.014 changed how backslash at end of line works, but still get a NUL when
there is one backslash. (Ray Frush, 2010 Nov 18)  What does the original ex
do?

Searching mixed with Visual mode doesn't redraw properly. (James Vega, 2010 Nov
22)

New esperanto spell file can't be processed. (Dominique Pelle, 2011 Jan 30)
- move compflags to separate growarray?
- instead of a regexp use a hashtable.  Expand '?', '*', '+'.  What would be
  the maximum repeat for * and +?

"L'Italie" noted as a spell error at start of the sentence. (Dominique Pelle,
2011 Feb 27)

Editing a file with a ^M with 'ff' set to "mac", opening a help file, then the
^M is displayed as ^J sometimes.  Getting 'ff' value from wrong window/buffer?

'colorcolumn' has higher priority than hlsearch.  Should probably be the other
way around. (Nazri Ramliy, 2013 Feb 19)

When Vim is put in the background (SIGTSTP) and then gets a SIGHUP it doesn't
exit.  It exists as soon as back in the foreground. (Stephen Liang, 2011 Jan
9)  Caused by vim_handle_signal(SIGNAL_BLOCK); in ui.c.

g` not working correctly when using :edit.  It works OK when editing a file on
the command line. (Ingo Karkat, 2011 Jan 25)

Since patch 7.2.46 Yankring plugin has become very slow, eventually make Vim
crash? (Raiwil, 2010 Nov 17)

Patch to add FoldedLineNr highlighting: different highlighting for the line
number of a closed fold. (eXerigumo Clanjor, 2013 Jul 15)

Regexp engine performance:
- Profiling:
	./vim -u NONE -s ~/vim/test/ruby.vim
	./vim -u NONE -s ~/vim/test/loop.vim
	./vim -u NONE -s ~/vim/test/alsa.vim
	./vim -s ~/vim/test/todo.vim
	./vim -s ~/vim/test/xml.vim
    Dominique Pelle:  xmlSyncDT is particularly slow (Jun 7)
- More test files from the src/pkg/regexp/testdata directory in the Go repo.
- Performance tests:
  - Using asciidoc syntax. (Marek Schimara, 2013 Jun 6)
  - ~/vim/text/FeiqCfg.xml (file from Netjune)
  - ~/vim/text/edl.svg  (also XML)
  - glts has five tests. (May 25)
  - ~/vim/test/slowsearch
  - ~/vim/test/rgb.vim
  - search for  a.*e*exn  in the vim executable.  Go to last line to use
    'hlsearch'.
  - Slow combination of folding and PHP syntax highlighting.  Script to
    reproduce it.  Caused by "syntax sync fromstart" in combination with patch
    7.2.274.  (Christian Brabandt, 2010 May 27) Generally, folding with
    'foldmethod' set to "syntax" is slow.  Do profiling to find out why.

Patch to add 'systemencoding', convert between 'encoding' and this for file
names, shell commands and the like.  (Kikuchan, 2010 Oct 14)
Assume the system converts between the actual encoding of the filesystem to
the system encoding (usually utf-8).

Problem producing tags file when hebrew.frx is present.  It has a BOM.
Results in E670. (Tony Mechelynck, 2010 May 2)

'beval' option should be global-local.

Ruby: ":ruby print $buffer.number" returns zero.

setpos() does not restore cursor position after :normal. (Tyru, 2010 Aug 11)

7   The 'directory' option supports changing path separators to "%" to make
    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
    Patch by Christian Brabandt, 2010 Oct 21.

With "tw=55 fo+=a" typing space before ) doesn't work well. (Scott Mcdermott,
2010 Oct 24)

Patch to add random number generator. (Hong Xu, 2010 Nov 8, update Nov 10)
Alternative from Christian Brabandt. (2010 Sep 19)

Messages in message.txt are highlighted as examples.

When using cp850 the NBSP (0xff) is not drawn correctly. (Brett Stahlman, 2010
Oct 22)  'isprint' is set to "@,161-255".

":echo "\x85" =~# '[\u0085]'" returns 1 instead of 0. (ZyX, 2010 Oct 3)

'cindent' not correct when 'list' is set. (Zdravi Korusef, 2010 Apr 15)

C-indenting: A matching { in a comment is ignored, but intermediate { are not
checked to be in a comment.  Implement FM_SKIPCOMM flag of findmatchlimit().
Issue 46.

Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)

Using CompilerSet doesn't record where an option was set from.  E.g., in the
gcc compiler plugin. (Gary Johnson, 2010 Dec 13)

":helpgrep" does not put the cursor in the correct column when preceded by
accented character. (Tony Mechelynck, 2010 Apr 15)

Don't call check_restricted() for histadd(), setbufvar(), settabvar(),
setwinvar().

Patch for GVimExt to show an icon. (Dominik Riebeling, 2010 Nov 7)

When writing a file > 2Gbyte, the reported number of bytes is negative.
(Antonio Colombo, 2010 Dec 18)

Patch: Let rare word highlighting overrule good word highlighting.
(Jakson A. Aquino, 2010 Jul 30, again 2011 Jul 2)

When 'lines' is 25 and 'scrolloff' is 12, "j" scrolls zero or two lines
instead of one. (Constantin Pan, 2010 Sep 10)

Gui menu edit/paste in block mode insert only inserts in one line (Bjorn
Winckler, 2011 May 11)
Requires a map mode for Insert mode started from blockwise Visual mode.

Writing nested List and Dict in viminfo gives error message and can't be read
back. (Yukihiro Nakadaira, 2010 Nov 13)

Problem with cursor in the wrong column. (SungHyun Nam, 2010 Mar 11)
Additional info by Dominique Pelle. (also on 2010 Apr 10)

CreateFile and CreateFileW are used without sharing, filewritable() fails when
the file was already open (e.g. script is being sourced).  Add FILE_SHARE_READ|
FILE_SHARE_WRITE in mch_access()? (Phillippe Vaucher, 2010 Nov 2)

Is ~/bin (literally) in $PATH supposed to work?  (Paul, 2010 March 29)
Looks like only bash can do it. (Yakov Lerner)

Cscope "cs add" stopped working somewhat before 7.2.438. (Gary Johnson, 2010
Jun 29)  Caused by 7.2.433?

I often see pasted text (from Firefox, to Vim in xterm) appear twice.
Also, Vim in xterm sometimes loses copy/paste ability (probably after running
an external command).

Jumplist doesn't work properly in Insert mode? (Jean Johner, 2010 Mar 20)

Problem with transparent cmdline.  Also: Terminal title is wrong with
non-ASCII character. (Lily White, 2010 Mar 7)

iconv() doesn't fail on an illegal character, as documented. (Yongwei Wu, 2009
Nov 15, example Nov 26)  Add argument to specify whether iconv() should fail
or replace with a character and continue?

Add local time at start of --startuptime output.
Requires configure check for localtime().
Use format year-month-day hr:min:sec.

Patch to add "combine" to :syntax, combines highlight attributes. (Nate
Soares, 2012 Dec 3)

Patch to make ":hi link" also take arguments. (Nate Soares, 2012 Dec 4)

Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
Find tail?  Might have a / in argument.  Find space?  Might have space in
path.

Test 51 fails when language set to German. (Marco, 2011 Jan 9)
Dominique can't reproduce it.

'ambiwidth' should be global-local.

":function f(x) keepjumps" creates a function where every command is executed
like it has ":keepjumps" before it.

Coverity: ask someone to create new user: Dominique.
Check if there are new reported defects: http://scan.coverity.com/rung2.html

Patch to support :undo absolute jump to file save number. (Christian Brabandt,
2010 Nov 5)

Patch to use 'foldnextmax' also for "marker" foldmethod. (Arnaud Lacombe, 2011
Jan 7)

Bug with 'incsearch' going to wrong line. (Wolfram Kresse, 2009 Aug 17)
Only with "vim -u NONE".

Problem with editing file in binary mode. (Ingo Krabbe, 2009 Oct 8)

With 'wildmode' set to "longest:full,full" and pressing Tab once the first
entry in wildmenu is highlighted, that shouldn't happen. (Yuki Watanabe, 2011
Feb 12)

Display error when 'tabline' that includes a file name with double-width
characters. (2010 Aug 14, bootleq)

Problem with stop directory in findfile(). (Adam Simpkins, 2009 Aug 26)

Using ']' as the end of a range in a pattern requires double escaping:
     /[@-\\]]  (Andy Wokula, 2011 Jun 28)

Syntax priority problem. (Charles Campbell, 2011 Sep 15)

When completion inserts the first match, it may trigger the line to be folded.
Disable updating folds while completion is active? (Peter Odding, 2010 Jun 9)

When a:base in 'completefunc' starts with a number it's passed as a number,
not a string. (Sean Ma)  Need to add flag to call_func_retlist() to force a
string value.

Invalid read error in Farsi mode. (Dominique Pelle, 2009 Aug 2)

For running gvim on an USB stick: avoid the OLE registration.  Use a command
line argument -noregister.

When using an expression in 'statusline' leading white space sometimes goes
missing (but not always). (ZyX, 2010 Nov 1)

When a mapping exists both for insert mode and lang-insert mode, the last one
doesn't work. (Tyru, 2010 May 6)  Or is this intended?

Still a problem with ":make" in the wrong directory.  Caused by ":bufdo".
(Ajit Thakkar, 2009 Jul 1) More information Jul 9, Jul 15.
Caused by "doautoall syntaxset BufEnter *" in syntax/nosyntax.vim ?
There also is a BufLeave/BufEnter aucmd to save/restore view.
Does the patch to save/restore globaldir work?

":bufdo normal gg" while 'hidden' is set leaves buffers without syntax
highlighting.  Don't disable Syntax autocommands then?  Or add a flag/modifier
to avoid changing 'eventignore'?

Patch for displaying 0x200c and 0x200d. (Ali Gholami Rudi, 2009 May 6)
Probably needs a bit of work.

Patch to add farsi handling to arabic.c (Ali Gholami Rudi, 2009 May 2)
Added test, updates, June 23.
Updated for 7.4: http://litcave.rudi.ir/farsi_vim.diff
With modification for Tatweel character: https://dpaste.de/VmFw
Remark from Ameretat Reith (2014 Oct 13)

List of encoding aliases. (Takao Fujiwara, 2009 Jul 18)
Are they all OK?  Update Jul 22.

Win32: Improved Makefile for MSVC. (Leonardo Valeri Manera, 2010 Aug 18)

Win32: Expanding 'path' runs into a maximum size limit. (bgold12, 2009 Nov 15)

Win32: Patch for enabling quick edit mode in console. (Craig Barkhouse, 2010
Sep 1)

Win32: Patch for using .png files for icons. (Charles Peacech, 2012 Feb 5)

Putting a Visual block while 'visualedit' is "all" does not leave the cursor
on the first character. (John Beckett, 2010 Aug 7)

Setting 'tags' to "tagsdir/*" does not find "tagsdir/tags". (Steven K. Wong,
2009 Jul 18)

Patch to add "focusonly" to 'scrollopt', so that scrollbind also applies in
window that doesn't have focus. (Jonathon Mah, 2009 Jan 12)
Needs more work.

Problem with <script> mappings (Andy Wokula, 2009 Mar 8)

When starting Vim with "gvim -f -u non_existent_file > foo.txt" there are a
few control characters in the output. (Dale Wiles, 2009 May 28)

'cmdwinheight' is only used in last window when 'winheight' is a large value.
(Tony Mechelynck, 2009 Apr 15)

Status line containing winnr() isn't updated when splitting the window (Clark
J.  Wang, 2009 Mar 31)

When $VIMRUNTIME is set in .vimrc, need to reload lang files.  Already done
for GTK, how about others? (Ron Aaron, 2010 Apr 10)

Patch for GTK buttons X1Mouse and X2Mouse. (Christian J. Robinson, 2010 Aug 9)

Motif: Build on Ubuntu can't enter any text in dialog text fields.

When 'ft' changes redraw custom status line.

":tab split fname" doesn't set the alternate file in the original window,
because win_valid() always returns FALSE.  Below win_new_tabpage() in
ex_docmd.c.

Space before comma in function definition not allowed: "function x(a , b)"
Give a more appropriate error message.  Add a remark to the docs.

string_convert() should be able to convert between utf-8 and utf-16le.  Used
for GTK clipboard.  Avoid requirement for iconv.

Now that colnr_T is int instead of unsigned, more type casts can be removed.

'delcombine' does not work for the command line. (Tony Mechelynck, 2009 Jul
20)

Don't load macmap.vim on startup, turn it into a plugin. (Ron Aaron,
2009 Apr 7)  Reminder Apr 14.

Add "no_hlsearch" to winsaveview().

Cursorline highlighting combines with Search ('hlsearch') but not with
SpellBad. (Jim Karsten, 2009 Mar 18)

When 'foldmethod' is "indent", adding an empty line below a fold and then
indented text, creates a new fold instead of joining it with the previous one.
(Evan Laforge, 2009 Oct 17)

Bug: When reloading a buffer changed outside of Vim, BufRead autocommands
are applied to the wrong buffer/window. (Ben Fritz, 2009 Apr 2, May 11)
Ignore window options when not in the right window?
Perhaps we need to use a hidden window for applying autocommands to a buffer
that doesn't have a window.

When using "ab foo bar" and mapping <Tab> to <Esc>, pressing <Tab> after foo
doesn't trigger the abbreviation like <Esc> would. (Ramana Kumar, 2009 Sep 6)

getbufvar() to get a window-local option value for a buffer that's not
displayed in a window should return the value that's stored for that buffer.

":he ctrl_u" can be auto-corrected to ":he ctrl-u".

There should be a way after an abbreviation has expanded to go back to what
was typed.  CTRL-G h ?  Would also undo last word or line break inserted
perhaps.  And undo CTRL-W.  CTRL-G l would redo.

Diff mode out of sync. (Gary Johnson, 2010 Aug 4)

Support a 'systemencoding' option (for Unix).  It specifies the encoding of
file names. (Kikuchan, 2010 Oct 5).  Useful on a latin1 or double-byte Asian
system when 'encoding' is "utf-8".

Win32 GUI: last message from startup doesn't show up when there is an echoerr
command. (Cyril Slobin, 2009 Mar 13)

Win32: completion of file name ":e c:\!test" results in ":e c:\\!test", which
does not work. (Nieko Maatjes, 2009 Jan 8, Ingo Karkat, 2009 Jan 22)

opening/closing window causes other window with 'winfixheight' to change
height.  Also happens when there is another window in the frame, if it's not
very high. (Yegappan Lakshmanan, 2010 Jul 22, Michael Peeters, 2010 Jul 22)

Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
(Felix Kater, 2009 Mar 3)

Session file generates error upon loading, cause by --remote-silent-tab.
(7tommm (ytommm) 2010 Nov 24)

Using ~ works OK on 'a' with composing char, but not on 0x0418  with composing
char 0x0301. (Tony Mechelynck, 2009 Mar 4)

Searching for composing char works, but not when inside []. (ZyX, Benjamin R.
Haskell, 2010 Aug 24)

This does not work yet: "a\(%C\)" (get composing characters into a submatch).

A function on a dictionary is not profiled. (ZyX, 2010 Dec 25)

Inconsistent: starting with $LANG set to es_ES.utf-8 gives Spanish
messages, even though locale is not supported.  But ":lang messages
es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
2009 Jan 26)

When $HOME contains special characters, such as a comma, escape them when used
in an option. (Michael Hordijk, 2009 May 5)
Turn "esc" argument of expand_env_esc() into string of chars to be escaped.

Should make 'ignorecase' global-local, so that it makes sense setting it from
a modeline.

Add cscope target to Makefile. (Tony Mechelynck, 2009 Jun 18, replies by
Sergey Khorev)

Consider making YankRing or something else that keeps a list of yanked text
part of standard Vim.  The "1 to "9 registers are not sufficient.

netrw: dragging status line causes selection of entry.  Should check row
number to be below last visible line.

After doing "su" $HOME can be the old user's home, thus ~root/file is not
correct.  Don't use it in the swap file.

Completion for ":buf" doesn't work properly on Win32 when 'shellslash' is off.
(Henrik Ohman, 2009, Jan 29)

shellescape() depends on 'shellslash' for quoting.  That doesn't work when
'shellslash' is set but using cmd.exe. (Ben Fritz)
Use a different option or let it depend on whether 'shell' looks like a
unix-like shell?

Bug: in Ex mode (after "Q") backslash before line break, when yanked into a
register and executed, results in <Nul>: instead of line break.
(Konrad Schwarz, 2010 Apr 16)

Have a look at patch for utf-8 line breaking. (Yongwei Wu, 2008 Mar 1, Mar 23)
Now at: http://vimgadgets.sourceforge.net/liblinebreak/

Greek sigma character should be lower cased depending on the context.  Can we
make this work?  (Dominique Pelle, 2009 Sep 24)

When changing 'encoding' convert all the swap file names, so that we can
still delete them.  Also convert all buffer file names?

"gqip" in Insert mode has an off-by-one error, causing it to reflow text.
(Raul Coronado, 2009 Nov 2)

Update src/testdir/main.aap.

"vim -c 'sniff connect'" hangs Vim. (Dominique Pelle, 2008 Dec 7)

Something wrong with session that has "cd" commands and "badd", in such a way
that Vim doesn't find the edited file in the buffer list, causing the
ATTENTION message?  (Tony Mechelynck, 2008 Dec 1)
Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".

Add v:motion_force. (Kana Natsuno, 2008 Dec 6)
Maybe call it v:motiontype.

MS-Windows: editing the first, empty buffer, 'ffs' set to "unix,dos", ":enew"
doesn't set 'ff' to "unix".  (Ben Fritz, 2008 Dec 5) Reusing the old buffer
probably causes this.

'scrollbind' is not respected when deleting lines or undo. (Milan Vancura,
2009 Jan 16)

Patch to support strikethrough next to bold and italic. (Christian Brabandt,
2013 Jul 30)  Update from Ken Takata, 2013 Oct 12.

Document that default font in Athena can be set with resources:
   XtDefaultFont: "9x15"
   XtDefaultFontSet: "9x15"
(Richard Sherman, 2009 Apr 12)

Having "Syntax" in 'eventignore' for :bufdo may cause problems, e.g. for
":bufdo e" when buffers are open in windows.  ex_listdo(eap) could set the
option only for when jumping to another buffer, not when the command argument
is executed.

":pedit %" with a BufReadPre autocommand causes the cursor to move to the
first line. (Ingo Karkat, 2008 Jul 1)  Ian Kelling is working on this.
Similar problem with ":e". (Marc Montu, 2014 Apr 22)

Wildmenu not deleted: "gvim -u NONE", ":set nocp wildmenu cmdheight=3
laststatus=2", CTRL-D CTRL-H CTRL-H CTRL-H. (A.Politz, 2008 April 1)
Works OK with Vim in an xterm.

Cursor line moves in other window when using CTRL-W J that doesn't change
anything.  (Dasn, 2009 Apr 7)

On Unix "glob('does not exist~')" returns the string.  Without the "~" it
doesn't. (John Little, 2008 Nov 9)
Shell expansion returns unexpanded string?
Don't use shell when "~" is not at the start?

":unlet $VAR" doesn't work.

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.
Unfinished patch by Ian Kelling, 2008 Jul 11.  Followup Jul 14, need to have
another look at it.

c.vim: XXX in a comment is colored yellow, but not when it's after "#if 0".
(Ilya Dogolazky, 2009 Aug 7)

You can type ":w ++bad=x fname", but the ++bad argument is ignored.  Give an
error message?  Or is this easy to implement?  (Nathan Stratton Treadway, 2008
Aug 20)  This is in ucs2bytes(), search for 0xBF.  Using the ++bad argument is
at the other match for 0xBF.

When adding "-complete=file" to a user command this also changes how the
argument is processed for <f-args>. (Ivan Tishchenko, 2008 Aug 19)

Win32: associating a type with Vim doesn't take care of space after a
backslash? (Robert Vibrant, 2008 Jun 5)

When 'rightleft' is set, cursorcolumn isn't highlighted after the end of a
line.  It's also wrong in folds. (Dominique Pelle, 2010 Aug 21)

Using an insert mode expression mapping, cursor is not in the expected
position. (ZyX, 2010 Aug 29)

After using <Tab> for command line completion after ":ta blah" and getting E33
(no tags file), further editing the command to e.g., ":echo 'blah'", the
command is not executed.  Fix by Ian Kelling?

":help s/~" jumps to *s/\~*, while ":help s/\~" doesn't find anything. (Tim
Chase)  Fix by Ian Kelling, 2008 Jul 14.

Use "\U12345678" for 32 bit Unicode characters?  (Tony Mechelynck, 2009
Apr 6)  Or use "\u(123456)", similar to Perl.

When mapping : to ; and ; to :, @; doesn't work like @: and @: doesn't work
either.  Matt Wozniski:  nv_at() calls do_execreg() which uses
put_in_typebuf().  Char mapped twice?

Despite adding save_subexpr() this still doesn't work properly:
Regexp: matchlist('12a4aaa', '^\(.\{-}\)\(\%5c\@<=a\+\)\(.\+\)\?')
Returns ['12a4', 'aaa', '4aaa'], should be ['12a4', 'aaa', '']
Backreference not cleared when retrying after \@<= fails?
(Brett Stahlman, 2008 March 8)

Problem with remote_send(). (Charles Campbell, 2008 Aug 12)

ftplugin for help file should set 'isk' to help file value.

Win32: remote editing fails when the current directory name contains "[".
(Ivan Tishchenko, Liu Yubao)  Suggested patch by Chris Lubinski: Avoid
escaping characters where the backslash is not removed later.  Asked Chris for
an alternate solution, also for src/ex_getln.c.
This also fails when the file or directory name contains "%". (Thoml, 2008
July 7)
Using --remote-silent while the current directory has a # in the name does not
work, the # needs to be escaped. (Tramblay Bruno, 2012 Sep 15)

When using remote-silent the -R flag is not passed on. (Axel Bender, 2012 May
31)

Win32: A --remote command that has a directory name starting with a ( doesn't
work, the backslash is removed, assuming that it escapes the (. (Valery
Kondakoff, 2009 May 13)

Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull,
2008 May 14)

Problem with CTRL-F. (Charles Campbell, 2008 March 21)
Only happens with "gvim -geometry "160x26+4+27" -u NONE -U NONE prop.c".
'lines' is 54. (2008 March 27)

Problem with pointer wrapping around in getvcol(). (Wolfgang Kroworsch, 2008
Oct 19)  Check for "col" being "MAXCOL" separately?

Unexpectedly inserting a double quote. (Anton Woellert, 2008 Mar 23)
Works OK when 'cmdheight' is 2.

8   Use a mechanism similar to omni completion to figure out the kind of tab
    for CTRL-] and jump to the appropriate matching tag (if there are
    several).
    Alternative: be able to define a function that takes the tag name and uses
    taglist() to find the right location.  With indication of using CTRL-] so
    that the context can be taken into account. (Robert Webb)
Patch by Christian Brabandt, 2013 May 31.

Test54 should not use shell commands.  Make it portable.

The utf class table is missing some entries:
	0x2212, minus sign 
	0x2217, star
	0x2500, bar
	0x26ab, circle

Visual line mode doesn't highlight properly when 'showbreak' is used and the
line doesn't fit. (Dasn, 2008 May 1)

GUI: In Normal mode can't yank the modeless selection.  Make "gy" do this?
Works like CTRL-Y in Command line mode.

Mac: Move Carbon todo items to os_mac.txt.  Note that this version is frozen,
try the Cocoa version.

Mac: After a ":vsplit" the left scrollbar doesn't appear until 'columns' is
changed or the window is resized.

GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
the window isn't redrawn properly, see two vertical bars.

Mac: Patch for configure: remove arch from ruby link args. (Knezevic, 2008
Mar 5)  Alternative: Kazuki Sakamoto, Mar 7.

Mac: trouble compiling with Motif, requires --disable-darwin. (Raf, 2008 Aug
1)  Reply by Ben Schmidt.

C't: On utf-8 system, editing file with umlaut through Gnome results in URL
with %nn%nn, which is taken as two characters instead of one.
Try to reproduce at work.

Patch for default choice in file changed dialog. (Bjorn Winckler, 2008 Oct 19)
Is there a way to list all the files first?

When 'smartcase' is set and using CTRL-L to add to the search pattern it may
result in no matches.  Convert chars to lower case? (Erik Wognsen, 2009 Apr
16)

Fail to edit file after failed register access.  Error flag remains set?
(Lech Lorens, 2010 Aug 30)

Patch for redo register. (Ben Schmidt, 2007 Oct 19)
Await response to question to make the register writable.

src/testdir/Make_dos.mak: not all tests are included, e.g., test49, without a
remark why.

Problem with 'ts' set to 9 and 'showbreak' to ">>>". (Matthew Winn, 2007 Oct
1)

In the swapfile dialog, add a H(elp) option that gives more info about what
each choice does.  Similar to  ":help swap-exists-choices"

try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)

try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)

":tab help" always opens a new tab, while ":help" re-uses an existing window.
Would be more consistent when an existing tab is re-used. (Tony Mechelynck)

Add ":nofold".  Range will apply without expanding to closed fold.

Using Aap to build Vim: add remarks about how to set personal preferences.
Example on http://www.calmar.ws/tmp/aap.html

Syntax highlighting wrong for transparent region. (Doug Kearns, 2007 Feb 26)
Bug in using a transparent syntax region. (Hanlen in vim-dev maillist, 2007
Jul 31)

C syntax: {} inside () causes following {} to be highlighted as error.
(Michalis Giannakidis, 2006 Jun 1)

When 'diffopt' has "context:0" a single deleted line causes two folds to merge
and mess up syncing. (Austin Jennings, 2008 Jan 31)

Gnome improvements: Edward Catmur, 2007 Jan 7
    Also use Save/Discard for other GUIs

New PHP syntax file, use it? (Peter Hodge)

":echoe" in catch block stops processing, while this doesn't happen outside of
a catch block. (ZyX, 2011 Jun 2)

'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
Likonen, March 19)

Test 54 uses shell commands, that doesn't work on non-Unix systems.  Use some
other way to test buffer-local autocommands.

The documentation mentions the priority for ":2match" and ":3match", but it
appears the last one wins. (John Beckett, 2008 Jul 22)  Caused by adding
matchadd()?  Suggested patch by John, 2008 Jul 24.

When 'encoding' is utf-8 the command line is redrawn as a whole on every
character typed. (Tyler Spivey, 2008 Sep 3)  Only redraw cmdline for
'arabicshape' when there is a character on the command line for which
(ARABIC_CHAR(u8c)) is TRUE.

Cheng Fang made javacomplete. (2007 Aug 11)
Asked about latest version: 0.77.1 is on www.vim.org.

More AmigaOS4 patches. (Peter Bengtsson, Nov 9)

Amiga patches with vbcc. (Adrien Destugues, 2010 Aug 30)
http://pulkomandy.ath.cx/drop/vim73_vbcc_amiga.diff

Insert mode completion: When editing the text and pressing CTRL-N again goes
back to originally completed text, edited text is gone. (Peng Yu, 2008 Jul 24)
Suggestion by Ben Schmidt, 2008 Aug 6.

Problem with compound words?  (Bert, 2008 May 6)
No warning for when flags are defined after they are used in an affix.

Screen redrawing when continuously updating the buffer and resizing the
terminal. (Yakov Lerner, 2006 Sept 7)

Add option settings to help ftplugin. (David Eggum, 2006 Dec 18)

Autoconf problem: when checking for iconv library we may add -L/usr/local/lib,
but when compiling further tests -liconv is added without the -L argument,
that may fail (e.g., sizeof(int)). (Blaine, 2007 Aug 21)

When opening quickfix window, disable spell checking?

Problem with ".add" files when using two languages and restarting Vim. (Raul
Coronado, 2008 Oct 30)

Popup menu redraw: Instead of first redrawing the text and then drawing the
popup menu over it, first draw the new popup menu, remember its position and
size and then redraw the text, skipping the characters under the popup menu.
This should avoid flicker.  Other solution by A.Politz, 2007 Aug 22.

Windows 98: pasting from the clipboard with text from another application has
a trailing NUL.  (Joachim Hofmann)  Perhaps the length specified for CF_TEXT
isn't right?

When a register contains illegal bytes, writing viminfo in utf-8 and reading
it back doesn't result in utf-8. (Devin Bayer)

Command line completion: Scanning for tags doesn't check for typed key now and
then?  Hangs for about 5 seconds.  Appears to be caused by finding include
files with "foo/**" in 'path'.  (Kalisiak, 2006 July 15)
Additional info: When using the |wildcards| ** globing, vim hangs
indefinitely on lots of directories. The |file-searching| globing, like in
":set path=/**" does not hang as often as with globing with |wildcards|, like
in ":1find /**/file".  This is for files that unix "find" can find very
quickly. Merging the 2 kinds of globing might make this an easier fix. (Ian
Kelling, 2008 July 4)

When the file name has parenthesis, e.g., "foo (bar).txt", ":!ls '%'" has the
parenthesis escaped but not the space.  That's inconsistent.  Either escape
neither or both.  No escaping might be best, because it doesn't depend on
particularities of the shell. (Zvi Har'El, 2007 Nov 10) (Teemu Likonen, 2008
Jun 3)
However, for backwards compatibility escaping might be necessary.  Check if
the user put quotes around the expanded item?

A throw in a function causes missing an endif below the call. (Spiros
Bousbouras, 2011 May 16)

Error E324 can be given when a cron script has wiped out our temp directory.
Give a clear error message about this (and tell them not to wipe out /tmp).

Color for cUserLabel should differ from case label, so that a mistake in a
switch list is noticed:
    switch (i)
    {
    case 1:
    foobar:
    }

Look at http://www.gtk-server.org/ .  It has a Vim script implementation.

Netbeans problem.  Use "nc -l 127.0.0.1 55555" for the server, then run gvim
with "gvim -nb:localhost:55555:foo".  From nc do: '1:editFile!0 "foo"'.  Then
go to Insert mode and add a few lines.  Then backspacing every other time
moves the cursor instead of deleting. (Chris Kaiser, 2007 Sep 25)

Windows installer should install 32-bit version of right-click handler also on
64-bit systems. (Brian Cunningham, 2011 Dec 28)

Windows installer could add a "open in new tab of existing Vim" menu entry.
Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
Just have two choices, always using one Vim and selecting between using an
argument list or opening each file in a separate tab.
(Erik Falor, 2008 May 21, 2008 Jun 26)

Windows installer: licence text should not use indent, causes bad word wrap.
(Benjamin Fritz, 2010 Aug 16)

Dos uninstal may delete vim.bat from the wrong directory (e.g., when someone
makes his own wrapper).  Add a magic string with the version number to the
.bat file and check for it in the uninstaller.  E.g.
          # uninstall key: vim7.3*

Changes for Win32 makefile. (Mike Williams, 2007 Jan 22, Alexei Alexandrov,
2007 Feb 8)

Win32: Can't complete shell command names.  Why is setting xp_context in
set_one_cmd_context() inside #ifndef BACKSLASH_IN_FILENAME?

Win32: Patch for cscope external command. (Mike Williams, 2007 Aug 7)

Win32: XPM support only works with path without spaces.  Patch by Mathias
Michaelis, 2006 Jun 9.  Another patch for more path names, 2006 May 31.
New version: http://members.tcnet.ch/michaelis/vim/patches.zip (also for other
patches by Mathias, see mail Feb 22)

Win32: compiling with normal features and OLE fails.  Patch by Mathias
Michaelis, 2006 Jun 4.

Win16: include patches to make Win16 version work. (Vince Negri, 2006 May 22)

Win32: after "[I" showing matches, scroll wheel messes up screen. (Tsakiridis,
2007 Feb 18)
Patch by Alex Dobrynin, 2007 Jun 3.  Also fixes other scroll wheel problems.

Win32: using CTRL-S in Insert mode doesn't remove the "+" from the tab pages
label.  (Tsakiridis, 2007 Feb 18)  Patch from Ian Kelling, 2008 Aug 6.

Win32: using "gvim --remote-tab-silent fname" sometimes gives an empty screen
with the more prompt.  Caused by setting the guitablabel?  (Thomas Michael
Engelke, 2007 Dec 20 - 2008 Jan 17)

Win64: Seek error in swap file for a very big file (3 Gbyte).  Check storing
pointer in long and seek offset in 64 bit var.
Patches from Ken Takata might help (2014 Apr 17)

Win32: patch for fullscreen mode. (Liushaolin, 2008 April 17)

Win32: When 'shell' is bash shellescape() doesn't always do the right thing.
Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
only takes 'shellslash' into account.

Menu item that does "xxd -r" doesn't work when 'fileencoding' is utf-16.
Check for this and use iconv?  (Edward L. Fox, 2007 Sep 12)
Does the conversion in the other direction work when 'fileencodings' is set
properly?

Cursor displayed in the wrong position when using 'numberwidth'. (James Vega,
2007 Jun 21)

When $VAR contains a backslash expand('$VAR') removes it. (Teemu Likonen, 2008
Jun 18)

If the variable "g:x#y#z" exists completion after ":echo g:x#" doesn't work.

Feature request: Command to go to previous tab, like what CTRL-W p does for
windows. (Adam George)

F1 - F4 in an xterm produce a different escape sequence when used with a
modifier key.  Need to catch three different sequences.  Use K_ZF1, like
K_ZHOME? (Dickey, 2007 Dec 2)

UTF-8: mapping a multi-byte key where the second byte is 0x80 doesn't appear
to work. (Tony Mechelynck, 2007 March 2)

In debug mode, using CTRL-R = to evaluate a function causes stepping through
the function. (Hari Krishna Dara, 2006 Jun 28)

C++ indenting wrong with "=". (James Kanze, 2007 Jan 26)

":lockvar" should use copyID to avoid endless loop.

When using --remote-silent and the file name matches 'wildignore' get an E479
error.  without --remote-silent it works fine. (Ben Fritz, 2008 Jun 20)

Gvim: dialog for closing Vim should check if Vim is busy writing a file.  Then
use a different dialog: "busy saving, really quit? yes / no".

Check other interfaces for changing curbuf in a wrong way.  Patch like for
if_ruby.c.

":helpgrep" should use the directory from 'helpfile'.

The need_fileinfo flag is messy.  Instead make the message right away and put
it in keep_msg?

Editing a file remotely that matches 'wildignore' results in a "no match"
error.  Should only happen when there are wildcards, not when giving the file
name literally, and esp. if there is only one name.

Test 61 fails sometimes.  This is a timing problem: "sleep 2" sometimes takes
longer than 2 seconds.

Using ":au CursorMoved * cmd" invokes mch_FullName(), which can be slow.
Can this be avoided? (Thomas Waba, 2008 Aug 24)
Also for ":w" without a file name.
The buffer has the full path in ffname, should pass this to the autocommand.

"vim -C" often has 'nocompatible', because it's set in some startup script.
Set 'compatible' after startup is done?  Patch by James Vega, 2008 Feb 7.

VMS: while editing a file found in complex, Vim will save file into the first
directory of the path and not to the original location of the file.
(Zoltan Arpadffy)

VMS: VFC files are in some cases truncated during reading (Zoltan Arpadffy)

input() completion should not insert a backslash to escape a space in a file
name?

Ruby completion is insecure.  Can this be fixed?

When 'backupskip' is set from $TEMP special characters need to be escaped.
(patch by Grembowietz, 2007 Feb 26, not quite right)
Another problem is that file_pat_to_reg_pat() doesn't recognize "\\", so "\\(" 
will be seen as a path separator plus "\(".

gvim d:\path\path\(FILE).xml should not remove the \ before the (.
This also fails with --remote.

When doing ":quit" the Netbeans "killed" event isn't sent.  (Xavier de Gaye,
2008 Nov 10)  call netbeans_file_closed() at the end of buf_freeall(), or in
all places where buf_freeall() is called?

aucmd_prepbuf() should also use a window in another tab page.

When unloading a buffer in a BufHidden autocommand the hidden flag is reset?
(Bob Hiestand, 2008 Aug 26, Aug 27)

Substituting an area with a line break with almost the same area does change
the Visual area.  Can this be fixed? (James Vega, 2006 Sept 15)

GUI: When combining fg en bg make sure they are not equal.

Spell checking: Add a way to specify punctuation characters.  Add the
superscript numbers by default: 0x2070, 0xb9, 0xb2, 0xb3, 0x2074 - 0x2079.

Spell checking in popup menu: If the only problem is the case of the first
character, don't offer "ignore" and "add to word list".

Use different pt_br dictionary for spell checking. (Jackson A. Aquino, 2006
Jun 5)

Use different romanian dictionary for spell checking. (Andrei Popescu, Nov
2008)  Use http://downloads.sourceforge.net/rospell/ro_RO.3.2.zip
Or the hunspell-ro.3.2.tar.gz file, it also has a iso-8859-2 list.

In a C file with spell checking, in "% integer" "nteger" is seen as an error,
but "]s" doesn't find it.  "nteger" by itself is found. (Ralf Wildenhues, 2008
Jul 22)

There should be something about spell checking in the user manual.

Spell menu: When using the Popup menu to select a replacement word,
":spellrepeat" doesn't work.  SpellReplace() uses setline().  Can it use "z="
somehow?  Or use a new function.

Mac: Using gvim: netrw window disappears. (Nick Lo, 2006 Jun 21)

Add an option to specify the character to use when a double-width character is
moved to the next line.  Default '>', set to a space to blank it out.  Check
that char is single width when it's set (compare with 'listchars').

The generated vim.bat can avoid the loop for NT. (Carl Zmola, 2006 Sep 3)

When showing a diff between a non-existent file and an existing one, with the
cursor in the empty buffer, the other buffer only shows the last line.  Change
the "insert" into a change from one line to many? (Yakov Lerner, 2008 May 27)

Add autocommand for when a tabpage is being closed.  Also for when a tab page
has been created.

Using ":make" blocks Vim.  Allow running one make in the background (if the
shell supports it), catch errors in a file and update the error list on the
fly.  A bit like "!make > file&" and repeating ":cf file".  ":bgmake",
background make.  ":bgcancel" interrupts it.
A.Politz may work on this.

These two abbreviations don't give the same result:
	let asdfasdf = "xyz\<Left>"
	cabbr XXX <C-R>=asdfasdf<CR>
	cabbr YYY xyz<Left>

Michael Dietrich: maximized gvim sometimes displays output of external command
partly. (2006 Dec 7)

In FileChangedShell command it's no longer allowed to switch to another
buffer.  But the changed buffer may differ from the current buffer, how to
reload it then?

New syntax files for fstab and resolv from Radu Dineiu, David Necas did
previous version.

For Aap: include a config.arg.example file with hints how to use config.arg.

Command line completion when 'cmdheight' is maximum and 'wildmenu' is set,
only one buffer line displayed, causes display errors.

Completing with 'wildmenu' and using <Up> and <Down> to move through directory
tree stops unexpectedly when using ":cd " and entering a directory that
doesn't contain other directories.

Default for 'background' is wrong when using xterm with 256 colors.
Table with estimates from Matteo Cavalleri, 2014 Jan 10.

Setting 'background' resets the Normal background color:
   highlight Normal ctermbg=DarkGray
   set background=dark
This is undesired, 'background' is supposed to tell Vim what the background
color is, not reset it.

Linux distributions:
- Suggest compiling xterm with --enable-tcap-query, so that nr of colors is
  known to Vim.  88 colors instead of 16 works better.  See ":help
  xfree-xterm".
- Suggest including bare "vi" and "vim" with X11, syntax, etc.

Completion menu: For a wrapping line, completing a long file name, only the
start of the path is shown in the menu.  Should move the menu to the right to
show more text of the completions.  Shorten the items that don't fit in the
middle?

When running inside screen it's possible to kill the X server and restart it
(using pty's the program can keep on running).  Vim dies because it loses the
connection to the X server.  Can Vim simply quit using the X server instead of
dying?  Also relevant when running in a console.

Accessing file#var in a function should not need the g: prepended.

When exiting detects a modified buffer, instead of opening the buffer in the
current tab, use an existing tab, if possible.  Like finding a window where
the buffer is displayed. (Antonios Tsakiridis)

When ":cn" moves to an error in the same line the message isn't shortened.
Only skip shortening for ":cc"?

Write "making vim work better" for the docs (mostly pointers): *nice*
    - sourcing $VIMRUNTIME/vimrc_example.vim
    - setting 'mouse' to "a"
    - getting colors in xterm
    - compiling Vim with X11, GUI, etc.

Problem with ":call" and dictionary function. Hari Krishna Dara, Charles
Campbell 2006 Jul 06.

Syntax HL error caused by "containedin". (Peter Hodge, 2006 Oct 6)

A custom completion function in a ":command" cannot be a Funcref. (Andy
Wokula, 2007 Aug 25)

Problem with using :redir in user command completion function? (Hari Krishna
Dara, 2006 June 21)

Another resizing problem when setting 'columns' and 'lines' to a very large
number. (Tony Mechelynck, 2007 Feb 6)

After starting Vim, using '0 to jump somewhere in a file, ":sp" doesn't center
the cursor line.  It works OK after some other commands.

Win32: Is it possible to have both postscript and Win32 printing?

Check: Running Vim in a console and still having connect to the X server for
copy/paste: is stopping the X server handled gracefully?  Should catch the X
error and stop using the connection to the server.

Problem with 'cdpath' on MS-Windows when a directory is equal to $HOME. (2006
Jul 26, Gary Johnson)

Using UTF-8 character with ":command" does not work properly. (Matt Wozniski,
2008 Sep 29)

In the Netbeans interface add a "vimeval" function, so that the other side can
check the result of has("patch13").

Cursor line at bottom of window instead of halfway after saving view and
restoring.  Only with 'nowrap'. (Robert Webb, 2008 Aug 25)

Netrw has trouble executing autocommands only for a directory.  Add <isdir>
and <notisdir> to autocommand patterns?  Also <isfile>?

Add command modifier that skips wildcard expansion, so that you don't need to
put backslashes before special chars, only for white space.

Syntax HL: open two windows on the same C code, delete a ")" in one window,
resulting in highlighted "{" in that window, not in the other.

In mswin.vim: Instead of mapping <C-V> for Insert mode in a complicated way,
can it be done like ":imap <C-V> <MiddleMouse>" without negative side effects?

GTK: when the Tab pages bar appears or disappears while the window is
maximized the window is no longer maximized.  Patch that has some idea but
doesn't work from Geoffrey Antos, 2008 May 5.
Also: the window may no longer fit on the screen, thus the command line is not
visible.

When right after "vim file", "M" then CTRL-W v the windows are scrolled
differently and unexpectedly.  Caused by patch 7.2.398?

The magic clipboard format "VimClipboard2" appears in several places.  Should
be only one.

"vim -C" often has 'nocompatible', because it's set somewhere in a startup
script.  Do "set compatible" after startup?

It's difficult to debug numbered functions (function in a Dictionary).  Print
the function name before resolving it to a number?
	let d = {}
	fun! d.foo()
	  echo "here"
	endfun
	call d.foo(9)

Add a mark for the other end of the Visual area (VIsual pos).  '< and '> are
only set after Visual moded is ended.
Also add a variable for the Visual mode.  So that this mode and '< '> can be
used to set what "gv" selects. (Ben Schmidt)

Win32: When running ":make" and 'encoding' differs from the system locale, the
output should be converted.  Esp. when 'encoding' is "utf-8". (Yongwei Wu)
Should we use 'termencoding' for this?

Win32, NTFS: When editing a specific infostream directly and 'backupcopy' is
"auto" should detect this situation and work like 'backupcopy' is "yes".  File
name is something like "c:\path\foo.txt:bar", includes a colon.  (Alex
Jakushev, 2008 Feb 1)

printf() uses the field width in bytes. Can it be made character width,
perhaps with a modifier?  What does Posix say?

Small problem displaying diff filler line when opening windows with a script.
(David Luyer, 2007 Mar 1 ~/Mail/oldmail/mool/in.15872 )

Is it allowed that 'backupext' is empty?  Problems when backup is in same dir
as original file?  If it's OK don't compare with 'patchmode'. (Thierry Closen)

Patch for supporting count before CR in quickfix window. (AOYAMA Shotaro, 2007
Jan 1)

Patch for adding ":lscscope". (Navdeep Parhar, 2007 Apr 26; update 2008 Apr
23)

":mkview" isn't called with the right buffer argument.  Happens when using
tabs and the autocommand "autocmd BufWinLeave * mkview".  (James Vega, 2007
Jun 18)

xterm should be able to pass focus changes to Vim, so that Vim can check for
buffers that changed.  Perhaps in misc.c, function selectwindow().
Xterm 224 supports it!

When completing from another file that uses a different encoding completion
text has the wrong encoding.  E.g., when 'encoding' is utf-8 and file is
latin1.  Example from Gombault Damien, 2007 Mar 24.

Is it possible to use "foo#var" instead of "g:foo#var" inside a function?

Syntax HL: When using "nextgroup" and the group has an empty match, there is
no search at that position for another match. (Lukas Mai, 2008 April 11)

In gvim the backspace key produces a backspace character, but on Linux the
VERASE key is Delete.  Set VERASE to Backspace? (patch by Stephane Chazelas,
2007 Oct 16)

TermResponse autocommand isn't always triggered when using vimdiff. (Aron
Griffis, 2007 Sep 19)

Create a gvimtutor.1 file and change Makefiles to install it.

When 'encoding' is utf-8 typing text at the end of the line causes previously
typed characters to be redrawn.  Caused by patch 7.1.329. (Tyler Spivey, 2008
Sep 3, 11)

When Vim in an xterm owns the selection and the user does ":shell" Vim doesn't
respond to selection requests.  Invoking XtDisownSelection() before executing
the shell doesn't help.  Would require forking and doing a message loop, like
what happens for the GUI.

X11: Putting more than about 262040 characters of text on the clipboard and
pasting it in another Vim doesn't work.  (Dominique Pelle, 2008 Aug 21-23)
clip_x11_request_selection_cb() is called with zero value and length.
Also: Get an error message from free() in the process that owns the selection.
Seems to happen when the selection is requested the second time, but before
clip_x11_convert_selection_cb() is invoked, thus in X library code.

":vimgrep" does not recognize a recursive symlink.  Is it possible to detect
this, at least for Unix (using device/inode)?

When switching between windows the cursor is often put in the middle.
Remember the relative position and restore that, just like lnum and col are
restored. (Luc St-Louis)

Patch to support horizontal scroll wheel in GTK. Untested. (Bjorn Winckler,
2010 Jun 30)

Add an option for a minimal text length before inserting a line break for
'textwidth'.  Avoids very short lines when a very long word follows.
(Kartik Agaram)


At next release:
-   Build a huge version by default.
-   Improve plugin handling: Automatic updates, handle dependencies?
    E.g. Vundle: https://github.com/gmarik/vundle


More patches:
-   Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
    Needs a few tests.
-   Add 'cscopeignorecase' option. (Liang Wenzhi, 2006 Sept 3)
-   Argument for feedkeys() to prepend to typeahead (Yakov Lerner, 2006 Oct
    21)
-   Load intl.dll too, not only libintl.dll. (Mike Williams, 2006 May 9, docs
    patch May 10)
-   Extra argument to strtrans() to translate special keys to their name (Eric
    Arnold, 2006 May 22)
-   'threglookexp' option: only match with first word in thesaurus file.
    (Jakson A. Aquino, 2006 Jun 14)
-   Mac: indicate whether a buffer was modified. (Nicolas Weber, 2006 Jun 30)
-   Allow negative 'nrwidth' for left aligning. (Nathan Laredo, 2006 Aug 16)
-   ml_append_string(): efficiently append to an existing line. (Brad
    Beveridge, 2006 Aug 26)  Use in some situations, e.g., when pasting a
    character at a time?
-   recognize hex numbers better. (Mark Manning, 2006 Sep 13)
-   Add <AbbrExpand> key, to expand an abbreviation in a mapping. (Kana
    Natsuno, 2008 Jul 17)
-   Add 'wspara' option, also accept blank lines like empty lines for "{" and
    "}". (Mark Lundquist, 2008 Jul 18)
-   Patch to add CTRL-T to delete part of a path on cmdline. (Adek, 2008 Jul
    21)
-   Instead of creating a copy of the tutor in all the shell scripts, do it in
    vimtutor.vim. (Jan Minar, 2008 Jul 20)
-   When fsync() fails there is no hint about what went wrong.  Patch by Ben
    Schmidt, 2008 Jul 22.
-   testdir/Make_dos_sh.mak for running tests with MingW. (Bill Mccarthy, 2008
    Sep 13)
-   Patch for adding "space" item in 'listchars'. (Jérémie Roquet, 2009 Oct 29,
    Docs patch Oct 30, update David Burgin (glts) 2013 Aug 24, 2014 Oct 10)
-   Replace ccomplete.vim by cppcomplete.vim from www.vim.org?  script 1520 by
    Vissale Neang.  (Martin Stubenschrott) Asked Vissale to make the scripts
    more friendly for the Vim distribution.
    New version received 2008 Jan 6.
    No maintenance in two years...
-   Patch to open dropped files in new tabs. (Michael Trim, 2010 Aug 3)

Awaiting updated patches:
9   Mac unicode patch (Da Woon Jung, Eckehard Berns):
    8   Add patch from Muraoka Taro (Mar 16) to support input method on Mac?
	New patch 2004 Jun 16
    - selecting proportional font breaks display
    - UTF-8 text causes display problems.  Font replacement causes this.
    - Command-key mappings do not work. (Alan Schmitt)
    - With 'nopaste' pasting is wrong, with 'paste' Command-V doesn't work.
      (Alan Schmitt)
    - remove 'macatsui' option when this has been fixed.
    - when 'macatsui' is off should we always convert to "macroman" and ignore
      'termencoding'?
9   HTML indenting can be slow.  Caused by using searchpair().  Can search()
    be used instead?  A.Politz is looking into a solution.
8   Win32: Add minidump generation. (George Reilly, 2006 Apr 24)
8   Add ":n" to fnamemodify(): normalize path, remove "../" when possible.
    Aric Blumer has a patch for this.  He will update the patch for 6.3.
7   Completion of network shares, patch by Yasuhiro Matsumoto.
    Update 2004 Sep 6.
    How does this work?  Missing comments.
8   Add a few more command names to the menus.  Patch from Jiri Brezina
    (28 feb 2002).  Will mess the translations...
7   ATTENTION dialog choices are more logical when "Delete it" appears
    before "Quit".  Patch by Robert Webb, 2004 May 3.
-   Include flipcase patch: ~/vim/patches/wall.flipcase2 ?  Make it work
    for multi-byte characters.
-   Win32: add options to print dialog.  Patch from Vipin Aravind.
-   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   "fg" and "bg" don't work in an xterm.  Get default colors from xterm
    with an ESC sequence.
    xterm can send colors for many things.  E.g. for the cursor:
	<Esc>]12;?<Bel>
    Can use this to get the background color and restore the colors on exit.
7   Add "DefaultFG" and "DefaultBG" for the colors of the menu. (Marcin
    Dalecki has a patch for Motif and Carbon)
-   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.
8   Add functions:
    gettext()		Translate a message.  (Patch from Yasuhiro Matsumoto)
			Update 2004 Sep 10
			Another patch from Edward L. Fox (2005 Nov 24)
			Search in 'runtimepath'?
			More docs needed about how to use this.
			How to get the messages into the .po files?
    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)
    raisewin()		raise gvim window (see HierAssist patch for
			    Tcl implementation ~/vim/HierAssist/ )
    taglist()		add argument to specify maximum number of matches.
			useful for interactive things or completion.
    col('^')            column of first non-white character.
			Can use "len(substitute(getline('.'), '\S.*', '', ''))
			+ 1", but that's ugly.
7   Add patch from Benoit Cerrina to integrate Vim and Perl functions
    better.  Now also works for Ruby (2001 Nov 10)
-   Patch from Herculano de Lima Einloft Neto for better formatting of the
    quickfix window (2004 dec 2)
7   When 'rightleft' is set, the search pattern should be displayed right
    to left as well?  See patch of Dec 26. (Nadim Shaikli)
8   Option to lock all used memory so that it doesn't get swapped to disk
    (uncrypted).  Patch by Jason Holt, 2003 May 23.  Uses mlock.
7   Add ! register, for shell commands. (patch from Grenie)
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.
7   Add a "-@ filelist" argument: read file names from a file. (David
    Kotchan has a patch for it)
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?
7   Add ":justify" command.  Patch from Vit Stradal 2002 Nov 25.
-   findmatch() should be adjusted for Lisp.  See remark at
    get_lisp_indent().  Esp. \( and \) should be skipped. (Dorai Sitaram,
    incomplete patch Mar 18)
-   For GUI Find/Replace dialog support using a regexp.  Patch for Motif
    and GTK by degreneir (nov 10 and nov 18).
-   Patch for "paranoid mode" by Kevin Collins, March 7.  Needs much more work.


Vi incompatibility:
-   Try new POSIX tests, made after my comments. (Geoff Clare, 2005 April 7)
    Version 1.5 is in ~/src/posix/1.5. (Lynne Canal)
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   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.
    On the other hand, an ":undo" command in an Ex script only undoes the last
    change (e.g., use two :append commands, then :undo).
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   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+ GUI known bugs:
9   Crash with X command server over ssh. (Ciaran McCreesh, 2006 Feb 6)
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?
8   GTK 2: Combining UTF-8 characters are sometimes not drawn properly.
    Depends on the font size, "monospace 13" has the problem.  Vim seems to do
    everything right, must be a GTK bug.  Is there a way to work around it?
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.
-   Gnome2: When moving the toolbar out of the dock, so that it becomes
    floating, it can no longer be moved.  Therefore making it float has been
    blocked for now.


Win32 GUI known bugs:
-   Win32: tearoff menu window should have a scrollbar when it's taller than
    the screen.
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)
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)
8   When 'encoding' is "utf-8", should use 'guifont' for both normal and wide
    characters to make Asian languages work.  Win32 fonts contain both
    type of characters.
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.
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   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.
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?
7   Scrollbar width doesn't change when selecting other windows appearance.
    Also background color of Toolbar and rectangle below vert. scrollbar.
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:
6   New Motif toolbar button from Marcin Dalecki:
    - When the mouse pointer is over an Agide button the red becomes black.
      Something with the way colors are specified in the .xpm file.
    - The pixmap is two pixels smaller than it should be.  The gap is filled
      with grey instead of the current toolbar background color.
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   The first event for any button in the menu or toolbar appears to get lost.
    The second click on a menu does work.
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:
-   gui_mch_browsedir() is missing, browsedir() doesn't work nicely.
7   Use XmStringCreateLocalized() instead of XmStringCreateSimple()?
    David Harrison says it's OK (it exists in Motif 1.2).
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   When translating menus ignore the part after the Tab, the shortcut.  So
    that the same menu item with a different shortcut (e.g., for the Mac) are
    still translated.
8   Add menu separators for Amiga.
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.
7   More features in the find/replace dialog:
    - regexp on/off
    - search in selection/buffer/all buffers/directory
       when all buffers/directory is used:
	- filter for file name
       when directory is used:
	- subdirectory on/off
	- top directory browser
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.  Resetting 'writebackup' helps to be able to
    write a file.
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 preferred above $HOMEDRIVE/$HOMEPATH?  No, but it's
    a good fallback, thus use:
	    $HOME
	    $HOMEDRIVE$HOMEPATH
	    SHGetSpecialFolderPath(NULL, lpzsPath, CSIDL_APPDATA, FALSE);
	    $USERPROFILE
	    SHGetSpecialFolderPath(NULL, lpzsPath, CSIDL_COMMON_APPDATA, FALSE);
	    $ALLUSERSPROFILE
	    $SYSTEMDRIVE\
	    C:\
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   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 its 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?
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:
-   GUI: gui_mch_browsedir() is missing.
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   inputdialog() doesn't resize when giving more text lines. (David Fishburn,
    2006 Sept 28)
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   In mac_expandpath() check that handling of backslashes is done properly.


"Small" problems:
-   Can't disable terminal flow control, to enable the use of CTRL-S and
    CTRL-Q.  Add an option for it?
-   When using e_secure in do_one_cmd() mention the command being executed,
    otherwise it's not clear where it comes from.
-   When the quickfix window is open and executing ":echo 'hello'" using the
    Command-line window, the text is immediately removed by the redrawing.
    (Michael Henry, 2008 Nov 1)
    Generic solution: When redrawing while there is a message on the
    cmdline, don't erase the display but draw over the existing text.
    Other solution, redraw after closing the cmdline window, before executing
    the command.
9   For Turkish vim_tolower() and vim_toupper() also need to use utf_
    functions for characters below 0x80. (Sertacyildiz)
9   When the last edited file is a help file, using '0 in a new Vim doesn't
    edit the file as a help file.  'filetype' is OK, but 'iskeyword' isn't,
    file isn't readonly, etc.
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.  Servatius Brandt works on this.
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   The messages for "vim --help" and "vim --version" don't use
    'termencoding'.
-   Could the hit-enter prompt be avoided when a message only overlaps the
    'showcmd' area?  Clear that area when the next cmd is typed.
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   When doing Insert mode completion a mapping cannot recursively call
    edit(), because the completion information is global.  Put everything in
    an allocated structure?
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   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).
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   The Cygwin and MingW makefiles define "PC", but it's not used anywhere.
    Remove? (Dan Sharp)
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.
8   A very long message in confirm() can't be quit.  Make this possible with
    CTRL-C.
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   Using ":s" in a function changes the previous replacement string.  Save
    "old_sub" in save_search_patterns()?
8   Should allow multi-byte characters for the delimiter: ":s+a+b+" where "+"
    is a multi-byte character.
8   When appending to a file and 'patchmode' isn't empty, a backup file is
    always written, even when the original file already exists.
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.
7   The message in bt_dontwrite_msg() could be clearer.
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   Also store the line number with the script ID and use it for ":verbose",
    so that "set nocompatible" is found when it changes other option values.
    When an option is set indirectly mention the command?  E.g. when
    ":diffsplit" sets 'foldmethod'.
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. Unfinished patch by Ian Kelling, 2008 July 14.
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 '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   ":hardcopy":
    - 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?
    - Add a flag in 'printoptions' to add an empty page to make the total
      number even.  "addempty"? (Mike Williams)
    - Respect 'linebreak'.  Perhaps also 'showbreak'?
    - Should interpret 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 '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)
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.
    Overwriting a file for which a swap file exists is similar issue.
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>\".
6   When the xterm reports the number of colors, a redraw occurs.  This is
    annoying on a slow connection.  Wait for the xterm to report the number of
    colors before drawing the screen.  With a timeout.
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   For xterm also recognize keypad up/down/left/right and insert.
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.
    Patch to dynamically allocate the buffer for % items. (Eric Arnold, 2006
    May 14)
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.
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.


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)


Problems that will (probably) not be solved:
-   GTK: when using the popup menu with spelling suggestions and releasing the
    right mouse button before the menu appears selecting an item with the
    right mouse button has no effect.  GTK does not produce an event for this.
-   GTK 2: Cannot use the file selector.  When using it many things become
    slow.  This is caused by some code in GTK that writes
    ~/.recently-used.xbel every time an event is handled.  It assumes the main
    loop is never quit, which is a wrong assumption.  Also, it overwrites the
    file with different file permissions, which is a privacy issue.  This
    needs to be fixed in GTK.  A solution in Vim would be really complicated.
    (2008 Jul 31)  This appears to be fixed in Vim 7.3.
-   xterm title: The following scenario may occur (esp. when running the Vim
    test script): Vim 1 sets the title to "file1", then restores the title to
    "xterm" with an ESC sequence when exiting.  Vim 2 obtains the old title
    with an X library call, this may result in "file1", because the window
    manager hasn't processed the "xterm" title yet.  Can apparently only be
    worked around with a delay.
-   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.
-   Win32 tcl: has("tcl") hangs when the tcl84.dll is from cygwin.
-   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.
-   Win32, MS-Windows: expanding plugin/**/*.vim also picks up
    dir/ctags.vim,v.  This is because the short file name is something like
    "ctags~1.vim" and that matches the pattern.
-   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.
-   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)
-   GTK 2: gives an assertion error for every non-builtin icon in the toolbar.
    This is a GTK 2.4.x bug, fixed in GTK 2.4.2. (Thomas de Grenier de Latour)
-   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*

Most interesting new features to be added when all bugs have been fixed:
-   Using ":exe edit fname" has escaping problems.  Use ":edit ++(fname)".
    Thus use "++=" to give arguments as expressions, comma separated as if
    calling a function.
    With options: ":edit ++(['!', '++enc=abc'], ['+/pat'], fname)".
    Alternative: Make a function for Ex commands: cmd_edit().
-   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.
    Should work like an IDE.  Try to keep it generic.  Now found here:
    http://clewn.sf.net.
    And the idevim plugin/script.
    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.
-   ECLIPSE plugin.  Problem is: the interface is very complicated.  Need to
    implement part in Java and then connect to Vim.  Some hints from Alexandru
    Roman, 2004 Dec 15.  Should then also work with Oracle Jdeveloper, see JSR
    198 standard http://www.jcp.org/en/jsr/detail?id=198.
    Eclim does it: http://eclim.sourceforge.net/  (Eric Van Dewoestine)
    Plugin that uses a terminal emulator: http://vimplugin.sf.net
    And another one: http://www.satokar.com/viplugin/index.php
-   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.
-   Scroll commands by screen line. g CTRL-E and g CTRL-Y ?  Requires the
    first line to be able to start halfway.
-   Running a shell command from the GUI still has limitations.  Look into how
    the terminal emulator of the Vim shell project can help:
    http://vimshell.wana.at
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".
    Also allow specifying the file and command, so that the result of
    taglist() can be used.
-   X11: Make it possible to run Vim inside a window of another program.
    This can be done with XReparentWindow().  But how exactly?


Documentation:
8   List of Vim runtime directories.  dotvim.txt from Charles Campbell, 2007
    Feb 20.
8   The GUI help should explain the Find and Find/Replace dialogs.  Add a link
    to it from ":promptrepl" and ":promptfind".
8   List of options should mention whether environment variables are expanded
    or not.
8   Extend usr_27.txt a bit. (Adam Seyfarth)
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.
    Patch by Balazs Kezes, 2007 Dec 30.  Remark from A. Politz.
-   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   make a vimtutor script for Amiga and other systems.
7   Add the arguments for configure to the ":version" output?
7   When Vim detects a file is being edited elsewhere and it's a gvim session
    of the same user it should offer a "Raise" button, so that the other gvim
    window can be displayed. (Eduard)
8   Support saving and restoring session for X windows?  It should work to do
    ":mksession" and use "-S fname" for the restart command.  The
    gui_x11_wm_protocol_handler() already takes care of the rest.
    global_event_filter() for GTK.


Tab pages:
9   GUI implementation for the tab pages line for other systems.
7   GUI: Control over the appearance of the text in the labels (bold, color,
    font, etc.)
8   Make GUI menu in tab pages line configurable.  Like the popup menu.
8   balloons for the tab page labels that are shortened to show the full path.
7   :tabdup	 duplicate the tab with all its windows.
7   Option to put tab line at the left or right?  Need an option to specify
    its width.  It's like a separate window with ":tabs" output.
7   Add local variables for each tab page?
8   Add local options for each tab page?  E.g., 'diffopt' could differ between
    tab pages.
7   Add local highlighting for each tab page?
7   Add local directory for tab pages?  How would this interfere with
    window-local directories?


Spell checking:
-   Support more regions? Caolan McNamara argues it's needed for es_XX.
    https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=219777    
-   Unicode defines another quote character: 0x2019.  Use it as an equivalent
    of a single quote, thus use it as a word character like a quote and match
    with words, replacing the curly quote with a single quote.
-   Could filter &eacute; things for HTML before doing spell checking.
    Similarly for TeX.
-   The Hungarian spell file uses four extra characters in the FOL/UPP/LOW
    items than other spell files with the ISO-8859-2 encoding, that causes
    problem when changing 'spelllang'.  There is no obvious way to fix this.
-   Considering Hunspell 1.1.4:
    What does MAXNGRAMSUGS do?
    Is COMPLEXPREFIXES necessary when we have flags for affixes?
-   Support spelling words in CamelCase as if they were two separate words.
    Requires some option to enable it. (Timothy Knox)
-   There is no Finnish spell checking file.  For openoffice Voikko is now
    used, which is based on Malaga: http://home.arcor.de/bjoern-beutel/malaga/
    (Teemu Likonen)
8   ":mkspell" still takes much too long in Hungarian dictionary from
    hunspell.  Only solution appears to be to postpone secondary suffixes.
8   Handle postponed prefix with COMPOUNDPERMITFLAG or COMPOUNDFORBIDFLAG.
    WFP_COMPPERMIT and WFP_COMPFORBID
8   implement use of <compoptions> in .spl file:
    implement CHECKCOMPOUNDREP: when a compound word seems to be OK apply REP
    items and check if the result is a valid word.
    implement CHECKCOMPOUNDDUP
    implement CHECKCOMPOUNDTRIPLE
    Add CHECKCOMPOUNDCASE: when compounding make leading capital lower case.
    How is it supposed to work?
-   Add a command the repeats ]s and z=, showing the misspelled word in its
    context.  Thus to spell-check a whole file.
-   suggestion for "KG" to "kg" when it's keepcase.
-   For flags on affixes: Use a "AFFCOMPSET" flag; means the compound flags of
    the word are not used.
-   Support breakpoint character ? 0xb7 and ignore it?  Makes it possible to
    use same wordlist for hyphenation.
-   Compound word is accepted if nr of words is <= COMPOUNDWORDMAX OR nr of
    syllables <= COMPOUNDSYLMAX.  Specify using AND in the affix file?
-   NEEDCOMPOUND also used for affix?  Or is this called ONLYINCOMPOUND now?
    Or is ONLYINCOMPOUND only for inside a compound, not at start or end?
-   Do we need a flag for the rule that when compounding is done the following
    word doesn't have a capital after a word character, even for Onecap words?
-   New hunspell home page: http://hunspell.sourceforge.net/
    - Version 1.1.0 is out now, look into that.
    - Lots of code depends on LANG, that isn't right.  Enable each mechanism
      in the affix file separately.
    - Example with compounding dash is bad, gets in the way of setting
      COMPOUNDMIN and COMPOUNDWORDMAX to a reasonable value.
    - PSEUDOROOT == NEEDAFFIX
    - COMPOUNDROOT -> COMPOUNDED?  For a word that already is a compound word
	    Or use COMPOUNDED2, COMPOUNDED3, etc.
-   CIRCUMFIX: when a word uses a prefix marked with the CIRCUMFIX flag, then
    the word must also have a suffix marked with the CIRCUMFIX flag.  It's a
    bit primitive, since only one flag is used, which doesn't allow matching
    specific prefixes with suffixes.
    Alternative:
	PSFX {flag} {pchop} {padd} {pcond} {schop} {sadd}[/flags] {scond}
    We might not need this at all, you can use the NEEDAFFIX flag and the
    affix which is required.
-   When a suffix has more than one syllable, it may count as a word for
    COMPOUNDWORDMAX.
-   Add flags to count extra syllables in a word.  SYLLABLEADD1 SYLLABLEADD2,
    etc.?  Or make it possible to specify the syllable count of a word
    directly, e.g., after another slash: /abc/3
-   MORPHO item in affix file: ignore TAB and morphological field after
    word/flags and affix.
-   Implement multiple flags for compound words and CMP item?
    Await comments from other spell checking authors.
-   Also see tklspell: http://tkltrans.sourceforge.net/
8   Charles Campbell asks for method to add "contained" groups to existing
    syntax items (to add @Spell).
    Add ":syntax contains {pattern} add=@Spell" command?  A bit like ":syn
    cluster" but change the contains list directly for matching syntax items.
-   References: MySpell library (in OpenOffice.org).
	http://spellchecker.mozdev.org/source.html
	http://whiteboard.openoffice.org/source/browse/whiteboard/lingucomponent/source/spellcheck/myspell/
      author: Kevin Hendricks <kevin.hendricks@sympatico.ca>
8   It is currently not possible to mark "can not" as rare, because "can" and
    "not" are good words.  Find a way to let "rare" overrule "good"?
8   Make "en-rare" spell file?  Ask Charles Campbell.
8   The English dictionaries for different regions are not consistent in their
    use of words with a dash.
7   Insert mode completion mechanism that uses the spell word lists.
8   Add hl groups to 'spelllang'?
	:set spelllang=en_us,en-rare/SpellRare,en-math/SpellMath
    More complicated: Regions with different languages?  E.g., comments
    in English, strings in German (po file).


Diff mode:
9   When making small changes, e.g. deleting a character, update the diff.
    Possibly without running diff.
9   Instead invoking an external diff program, use builtin code.  One can be
    found here: http://www.ioplex.com/~miallen/libmba/dl/src/diff.c
    It's quite big and badly documented though.
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
    Also show difference with the file when editing started?  Should show what
    can be undone. (Tom Popovich)
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: zI zJ zK zp zP zq zQ zV zy zY;
    secondary: zB zS zT zZ, z=)
8   Vertical folds: looks like vertically split windows, but the cursor moves
    through the vertical separator, separator moves when scrolling.
8   Add "z/" and "z?" for searching in not folded text only.
9   Add search pattern item to only match in closed or open fold and/or fold
    with certain level.  Allows doing ":g/pat/cmd" to work on closed folds.
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 manual folding, the undo command should also restore folds.
-   Allow completely hiding a closed fold.  E.g., by setting 'foldtext' to an
    empty string.  Require showing a character in 'foldcolumn' to avoid the
    missing line goes unnoticed.
    How to implement this?
-   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.
-   When currently editing the first file in the argument list the session
    file can contain:
	args version.c main.c
	edit version.c
    Can editing version.c twice be avoided?
-   'foldmethod' "textobject": fold on sections and paragraph text objects.
-   "zuf": undo change in manual fold. "zUf" 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" argument: set fold level for a region or
    match.
-   Apply a new foldlevel to a range of lines. (Steve Litt)
8   Have some way to restrict commands to not folded text.  Also commands like
    searches.


Multi-byte characters:
-   When editing a file with both utf-8 and latin1 text Vim always falls back
    to latin1.  Add a command to convert the latin1 characters to utf-8?
	:unmix utf-8,latin1 filename
    Would only work when 'encoding' is utf-8.
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).
9   'fenc' in modeline problem: add option to reload the file when 'fenc' is
    set to a different value in a modeline?  Option can be default on.  Could
    it be done with an autocommand?
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"?
    For HTML look for "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" and ":helpgrep".
    More generic solution: support a filter (e.g., by calling a function).
8   When a file was converted from 'fileencoding' to 'encoding', a tag search
    should also do this on the search pattern. (Andrzej M. Ostruszka)
8   When filtering changes the encoding 'fileencoding' may not work.  E.g.,
    when using xxd and 'fileencoding' is "utf-16".  Add an option to set a
    different fileencoding for filter output?
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)
9   'aleph' should be set to 1488 for Unicode. (Zvi Har'El)
8   Should add test for using various commands with multi-byte characters.
8   'infercase' doesn't work with multi-byte characters.
8   toupper() function doesn't handle byte count changes.
7   Searching and composing characters:
    When searching, should order of composing characters be ignored?
    Add a special item to match with a composing character, so that composing
    characters can be manipulated.
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.
-   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 'breakat' accept multi-byte characters.  Problem: can't use a lookup
    table anymore (breakat_flags[]).
    Simplistic solution: when 'formatoptions' contains "m" also break a line
    at a multi-byte character >= 0x100.
-   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:
7   Implement "undercurl" for 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.
-   Add the file timestamp to the page header (with an option). (George
    Reilly)
-   Win32: when 'printfont' is empty use 'guifont'.
-   Unix: Use some dialog box to do the obvious settings (paper size, printer
    name, portrait/landscape, etc).
-   PostScript: Only works for text that can be converted to an 8-bit
    character set.  How to support Unicode fully?
-   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:
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.
7   Add a "startgroup" to a region.  Used like "nextgroup" inside the region,
    preferred item at the start of the region. (Charles Campbell)
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".
7   For "nextgroup" we have skipwhite, skipnl and skipempty.  It would be
    really nice to be able to skip with a pattern.  Or skip with a syntax
    group. (Nikolai Weibull, 2007 Feb 27)
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   Be able to change only the background highlighting.  Useful for Diff* and
    Search highlighting.
7   When 'number' is set highlight the number of the current line.
    Must be enabled with an option, because it slows down display updating.
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   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.
    Also need a separate 'iskeyword' for the command line, e.g., in a help
    window ":e /asdf/asdf/" CTRL-W works different.
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.
    Option for the matchparen plugin?
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   It would be useful to make the highlight group name an expression.  Then
    when there is a match, the expression would be evaluated to find out what
    highlight group to use.  Could be used to check if the shell used in a
    password file appears in /etc/shells. (Nikolai Weibull)
	syn match =s:checkShell(v:match) contained 'pattern'
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.
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.
8   Some terminals can display colors like the GUI.  Add some setting to use
    GUI colors for the terminal?  With something to define the escape
    sequence.
7   It's possible for an item to be transparent, so that the colors of an item
    lower on the stack is used.  Also do this with highlighting, so that the
    user can set transparent highlighting?  E.g. a number in a C comment would
    get the color of a comment, a number in an assignment Normal. (Nikolai
    Weibull)
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   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 more command line completion for :syntax.
8   Add more command line completion for :highlight.
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 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   Make the filename and line number available to script functions, so that
    they can give useful debugging info.  The whole call stack would be ideal.
    At least use this for error messages.
7   Execute a function with standard option values.  No need to save and
    restore option values.  Especially useful for new options.  Problem: how
    to avoid a performance penalty (esp. for string options)?
8   Add referring to key options with "&t_xx".  Both for "echo &t_xx" and
    ":let &t_xx =".  Useful for making portable mappings.
-   Add ":let var ?= value", conditional assignment.  Patch by Dave Eggum,
    2006 Dec 11.
-   range for ":exec", pass it on to the executed command.  (Webb)
8   ":{range}source": source the lines from the current file.
	You can already yank lines and use :@" to execute them.
	Most of do_source() would not be used, need a new function.
	It's easy when not doing breakpoints or profiling.
    Requires copying the lines into a list and then creating a function to
    execute lines from the list.  Similar to getnextac().
7   ":include" command: just like ":source" but doesn't start a new scriptID?
    Will be tricky for the list of script names.
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   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 argument to winwidth() to subtract the space taken by 'foldcolumn',
    signs and/or 'number'.
6   Add ++ and -- operators?  They only work on variables (lvals), how to
    implement this?
8   Add functions:
	has(":command")		Check if ":command" works.  compare function
				with "ex_ni".  E.g. for ":simalt".
	system()		With a List argument.  Bypasses the shell, use
				exec() directly.  (Bob Hiestand)
	escape()		Add argument to specify what to escape with.
	modestack()		Instead of just the current mode return the
				stack of Insert / CTRL-O / :normal things.
	realname()		Get user name (first, last, full)
				user_fullname() patch by Nikolai Weibull, Nov
				3 2002
				Only add this when also implemented for
				non-Unix systems, otherwise a shell cmd could
				be used.
				get_user_name() gets login name.
	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
				Return a list of menus and/or a dictionary
				with properties instead.
	mapname({idx}, mode)	return the name of the idx'th mapping.
				Patch by Ilya Sher, 2004 Mar 4.
				Return a list instead.
	char2hex()		convert char string to hex string.
	crypt()			encrypt string
	decrypt()		decrypt string
	base64enc()		base 64 encoding
	base64dec()		base 64 decoding
	attributes()		return file protection flags "drwxrwxrwx"
	filecopy(from, to)	Copy a file
	shorten(fname)		shorten a file name, like home_replace()
	perl(cmd)		call Perl and return string
	inputrl()		like input() but right-to-left
	typed()			return the characters typed and consumed (to
				find out what happened)
	virtualmode()		add argument to obtain whether "$" was used in
				Visual block mode.
	getacp()		Win32: get codepage (Glenn Maynard)
	deletebufline()		delete line in any buffer
	appendbufline()		append line in any buffer
	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.
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 command line arguments to Vim scripts in some way.  As v:args
    List?  Or extra parameter to argv()?
8   Add command arguments with three dashes, passed on to Vim scripts.
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   For Strings 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.
8   ":let Func().foo = value" should work, also when "foo" doesn't exist.
    Also: ":let Func()[foo] = value" should work.  Same for a List.
7   Add synIDlist(), making the whole list of syntax items on the syntax stack
    available as a List.
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).


Robustness:
6   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 for Vim 5.4: ~/vim/patches/kahn_file_locking .
    The patch is incomplete (needs support for more systems, autoconf).
    Andy doesn't have time to work on it.
    Disadvantage: Need to find ways to gracefully handle failure to obtain a
    lock.  When to release a lock: When buffer is unloaded?


Performance:
7   For string variables up to 3 bytes don't allocate memory, use v_list
    itself as a character array.  Use VAR_SSTRING (short string).
7   Add 'lazysize' option: Above this size Vim doesn't load everything before
    starting to edit a file.  Things like 'fileencodings' only work up to this
    size, modelines only work at the top.  Useful for large log files where
    you only want to look at the first few pages.  Use zero to disable it.
8   move_lines() copies every line into allocated memory, making reloading a
    buffer a lot slower than re-editing the file.  Can the memline be locked
    so that we don't need to make a copy?  Or avoid invoking ml_updatechunk(),
    that is taking a lot of time.  (Ralf Wildenhues, 2008 Jul 7)
    With a patch, but does it work?
8   Instead of loading rgb.txt every time a color wasn't recognized load it
    once and keep it in memory.  Move the code to a common place to avoid
    repeating it in various system files.
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.
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 after ":set foldmethod=syntax".
    (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   MS-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 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.
-   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.
8   When reading from stdin allow suppressing the "reading from stdin"
    message.
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.
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.


Scrolling:
8   Add "zy" 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 screenful. (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   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:
9   With ":set tags=./tags,../tags" and a tag appears in both tags files it is
    added twice.  Requires figuring out the actual file name for each found
    match.  Remove tag_fname from the match and combine it with the fname in
    the match (without expanding or other things that take time).  When
    'tagrelative' is off tag_fname isn't needed at all.
8   For 'tags' wildcard in the file name is not supported, only in the path.
    This is due to it using |file-searching|. Suboptimal solution would be to
    make the filename or the whole option use |wildcards| globing, better
    would be to merge the 2 kinds of globing. originally (Erik Falor, 2008
    April 18), updated (Ian Kelling, 2008 July 4)
7   Can CTRL-] (jump to tag) include a following "." and "->" to restrict the
    number of possible matches? Check tags file for an item that has members.
    (Flemming Madsen)
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 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)
-   When doing "[^I" or "[^D" add position to tag stack.
-   Add command to put current position to tag stack: ":tpush".
-   Add functions to save and restore the tag stack?  Or a command to switch
    to another tag stack?  So that you can do something else and come back to
    what you were working on.
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".


Win32 GUI:
8   Make debug mode work while starting up (vim -D).  Open console window for
    the message and input?
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 run 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   Make inputdialog() work for Photon, Amiga.
-   <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.
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 on more systems?  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.
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.
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.


Autocommands:
9   Rework the code from FEAT_OSFILETYPE for autocmd-osfiletypes to use
    'filetype'.  Only for when the current buffer is known.
-   Put autocommand event names in a hashtable for faster lookup?
8   When the SwapExists event is triggered, provide information about the
    swap file, e.g., whether the process is running, file was modified, etc.
    Must be possible to check the situation that it's probably OK to delete
    the swap file. (Marc Merlin)
8   When all the patterns for an event are "*" there is no need to expand
    buffer names to a full path.  This can be slow for NFS.
7   For autocommand events that trigger multiple times per buffer (e.g.,
    CursorHold), go through the list once and cache the result for a specific
    buffer.  Invalidate the cache when adding/deleting autocommands or
    changing the buffer name.
7   Add TagJump event: do something after jumping to a tag.
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.
8   Use another option than 'updatetime' for the CursorHold event.  The two
    things are unrelated for the user (but the implementation is more
    difficult).
7   Add autocommand event for when a buffer cannot be abandoned.  So that the
    user can define the action taking (autowrite, dialog, fail) based on the
    kind of file. (Yakov Lerner)  Or is BufLeave sufficient?
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, ...
7   Autocommand for when an option is changed.  Match buffer name or option
    name?
8   Autocommands should not change registers.  And marks?  And the jumplist?
    And anything else?  Add a command to save and restore these things.
8   Add autocommands, user functions and user commands to ":mkvimrc".
6   Add KeymapChanged event, so that the effects of a different keymap can be
    handled (e.g., other font) (Ron Aaron)
7   When trying to open a directory, trigger an OpenDirectory event.
7   Add file type in front of file pattern: <d> for directory, <l> for link,
    <x> for executable, etc.  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'.
-   Add events to autocommands:
    Error	    - When an error happens
    NormalEnter	    - Entering Normal mode
    ReplaceEnter    - Entering Replace mode
    CmdEnter	    - Entering Cmdline mode (with type of cmdline to allow
			different mapping)
    VisualEnter	    - Entering Visual mode
    *Leave	    - Leaving a mode (in pair with the above *Enter)
    VimLeaveCheck    - Before Vim decides to exit, so that it can be cancelled
		      when exiting isn't a good idea.
    CursorHoldC     - CursorHold while command-line editing
    WinMoved	    - when windows have been moved around, e.g, ":wincmd J"
    SearchPost	    - After doing a search command (e.g. to do "M")
    PreDirChanged/PostDirChanged
		    - Before/after ":cd" has been used (for changing the
		      window title)
    ShutDown	    - when the system is about to shut down
    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)
    ViewChanged	    - triggered when the text scrolls and when the window size
		      changes.
    WinResized	    - After a window has been resized
    WinClose	    - Just before closing a window
-   Write the file now and then ('autosave'):
				  *'autosave'* *'as'* *'noautosave'* *'noas'*
    'autosave' 'as' 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.


Omni completion:
-   Add a flag to 'complete' to be able to do omni completion with CTRL-N (and
    mix it with other kinds of completion).
-   Ideas from the Vim 7 BOF at SANE:
	- For interpreted languages, use the interpreter to obtain information.
	  Should work for Java (Eclipse does this), Python, Tcl, etc.
	  Richard Emberson mentioned working on an interface to Java.
	- Check Readline for its completion interface.
-   Ideas from others:
	http://www.wholetomato.com/
	http://www.vim.org/scripts/script.php?script_id=747
	    http://sourceforge.net/projects/insenvim
		or http://insenvim.sourceforge.net
	    Java, XML, HTML, C++, JSP, SQL, C#
	    MS-Windows only, lots of dependencies (e.g. Perl, Internet
		explorer), uses .dll shared libraries.
	    For C++ uses $INCLUDE environment var.
	    Uses Perl for C++.
	    Uses ctags to find the info:
		ctags -f $allTagsFile --fields=+aiKmnsSz --language-force=C++ --C++-kinds=+cefgmnpsut-dlux -u $files
	www.vim.org script 1213 (Java Development Environment) (Fuchuan Wang)
	IComplete: http://www.vim.org/scripts/script.php?script_id=1265
	    and http://stud4.tuwien.ac.at/~e0125672/icomplete/
	http://cedet.sourceforge.net/intellisense.shtml (for Emacs)
	Ivan Villanueva has something for Java.
	Emacs: http://www.xref-tech.com/xrefactory/more_c_completion.html
	Completion in .NET framework SharpDevelop: http://www.icsharpcode.net
-   Pre-expand abbreviations, show which abbrevs would match?


Insert mode completion/expansion:
-   GUI implementation of the popup menu.
7   When searching in other files the name flash by, too fast to read.  Only
    display a name every second or so, like with ":vimgrep".
7   When expanding file names with an environment variable, add the match with
    the unexpanded var.  So $HOME/tm expands to "/home/guy/tmp" and
    "$HOME/tmp"
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   Add option to set different behavior for Insert mode completion:
    - ignore/match case
    - different characters than 'iskeyword'
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'.
    Alternative: Use a pattern so that start and end of a keyword can be
    defined, only allow dash in the middle, etc.
8   Add a command to undo the completion, go back to the original text.
7   Completion of an abbreviation: Can leave letters out, like what Instant
    text does: www.textware.com
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.
-   Add a flag to 'complete' to only scan local header files, not system
    header files. (Andri Moell)
-   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)
-   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 [].
8   Add an option to ignore case when doing interactive completion.  So that
    ":e file<Tab>" also lists "Filelist" (sorted after matching case matches).
7   Completion of ":map x ": fill in the current mapping, so that it can be
    edited. (Sven Guckes)
-   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   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.


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.
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.
8   When using CTRL-G CTRL-O do like CTRL-\ CTRL-O, but when returning with
    the cursor in the same position and the text didn't change continue the
    same change, so that "." repeats the whole insert.
7   Use CTRL-G <count> to repeat what follows.  Useful for inserting a
    character multiple times or repeating CTRL-Y.
-   Make 'revins' work in Replace mode.
9   Can't use multi-byte characters for 'matchpairs'.
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':
9   Wrapping a variable initialization should have extra indent:
	char * veryLongName =
		"very long string"
    Also check if "cino=+10" is used correctly.
8   Lisp indenting: "\\" confuses the indenter. (Dorai Sitaram, 2006 May 17)
8   Why are continuation lines outside of a {} block not indented?  E.g.:
	long_type foo =
	value;
8   Java: Inside an anonymous class, after an "else" or "try" the indent is
    too small. (Vincent Bergbauer)
    Problem of using {} inside (), 'cindent' doesn't work then.
8   In C++ it's possible to have {} inside (): (Kirshna)
		func(
			new String[] {
			    "asdf",
			    "asdf"
			}
		    );
8   In C++ a function isn't recognized inside a namespace:
    (Chow Loong Jin)
	namespace {
	    int
		 func(int arg) {
		 }
	}
6   Add 'cino' flag for this function argument layout: (Spencer Collyer)
	    func( arg1
	        , arg2
		, arg3
		);
7   Add separate "(0" option into inside/outside a function (Zellner):
	func(
	   int x)	// indent like "(4"
	{
	   if (a
	       && b)	// indent like "(0"
9   Using "{" in a comment: (Helmut Stiegler)
    if (a)
    {
	    if (b)
	    {
		    // {
	    }
	    } <-- this is indented incorrect
    Problem is that find_start_brace() checks for the matching brace to be in
    a comment, but not braces in between.  Requires adding a comment check to
    findmatchlimit().
-   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?
-   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.
    Patch by Lech Lorens, 2010 Mar.  Update by James McCoy, 2014 Mar 15.


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 "//".
    Other way around: when a C command starts with "* 4" the "*" is repeated
    while it should not.  Use syntax HL comment recognition?
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   Allow specifying it separately for Tabs and beyond end-of-line?


Text objects:
8   Add text object for fold, so that it can be yanked when it's open.
8   Add test script for text object commands "aw", "iW", etc.
8   Add text object for part of a CamelHumpedWord and under_scored_word.
    (Scott Graham)  "ac" and "au"?
8   Add a text object for any kind of quoting, also with multi-byte
    characters.  Option to specify what quotes are recognized (default: all)
    use "aq" and "iq".  Use 'quotepairs' to define pairs of quotes, like
    'matchpairs'?
8   Add text object for any kind of parens, also multi-byte ones.
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 a way to make an ":omap" for a user-defined text object.  Requires
    changing the starting position in oap->start.
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 "}").
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://vim.wikia.com/wiki/Use_Alt-Mouse_to_select_blockwise.
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:
8   Support using "." in Visual mode. Use the operator applied to the Visual
    selection, if possible.
-   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.
-   Displaying size of Visual area: use 24-33 column display.
    When selecting multiple lines, up to about a screenful, also count the
    characters.
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, pad 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   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   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 to repeat last movement.  Including count.
-   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   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   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".
7   Add a mapping that works always, for remapping the keyboard.
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   Give a warning when using CTRL-C in the lhs of a mapping.  It will never
    (?) work.
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   When someone tries to unmap with a trailing space, and it fails, try
    unmapping without the trailing space.  Helps for ":unmap xx | unmap yy".
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
-   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 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?
-   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 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?
-   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:
9   Should have an option for :vimgrep to find lines without a match.
8   Add "g/" and "gb" to search for a pattern in the Visually selected text?
    "g?" is already used for rot13.
    The vis.vim script has a ":S" command that does something like this.
    Can use "g/" in Normal mode, uses the '< to '> area.
    Use "&/" for searching the text in the Visual area?
9   Add "v" offset: "/pat/v": search for pattern and start Visual mode on the
    matching text.
8   Add a modifier to interpret a space like "\_s\+" to make it much easier to
    search for a phrase.
8   Add a mechanism for recursiveness: "\@(([^()]*\@g[^()]*)\)".  \@g stands
    for "go recursive here" and \@( \) marks the recursive part.
    Perl does it this way:
	    $paren = qr/ \(( [^()] | (??{ $paren }) )* \) /x;
    Here $paren is evaluated when it's encountered.  This is like a regexp
    inside a regexp.  In the above terms it would be:
	    \@((\([^()]\|\@g\)*)\)
8   Show the progress every second.  Could use the code that checks for CTRL-C
    to find out how much time has passed.  Or use SIGALRM.  Where to show the
    number?
8   When using an expression for ":s", set the match position in a v:
    variable.  So that you can do ":%s/^/\=v:lnum/" to put a line number
    before each line.
7   Support for approximate-regexps to find similar words (agrep
    http://www.tgries.de/agrep/ tre: http://laurikari.net/tre/index.html).
8   Add an item for a big character range, so that one can search for a
    chinese character: \z[234-1234]  or \z[XX-YY] or \z[0x23-0x234].
7   Add an 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 a flag to "/pat/" to discard an error.  Useful to continue a mapping
    when a search fails.  Could be "/pat/E" (e is already used for end offset).
7   Add pattern item to use properties of Unicode characters.  In Perl it's
    "\p{L}" for a letter.  See Regular Expression Pocket Reference.
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   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 in <C-M> or <Key> form.  Could be
    \%<C-M>.
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   When 'iskeyword' is changed the matches from 'hlsearch' may change. (Benji
    Fisher)  redraw if some options are set while 'hlsearch' is set?
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.
-   Make 'hlsearch' a local/global option, so that it can be disabled in some
    of the windows.
-   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.
8   Add a way to access the last substitute text, what is used for ":s//~/".
    Can't use the ~ register, it's already used for drag & drop.
-   Remember flags for backreferenced items, so that "*" can be used after it.
    Check with "\(\S\)\1\{3}". (Hemmerling)
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?
-   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)
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) (Zellner)
    Also ":dselect".


Undo:
9   ":gundo" command: global undo.  Undoes changes spread over multiple files
    in the order they were made.  Also ":gredo".  Both with a count.  Useful
    when tests fail after making changes and you forgot in which files.
9   After undo/redo, in the message show whether the buffer is modified or
    not.
8   Use timestamps for undo, so that a version a certain time ago can be found
    and info before some time/date can be flushed. 'undopersist' gives maximum
    time to keep undo: "3h", "1d", "2w", "1y", etc.
8   Search for pattern in undo tree, showing when it happened and the text
    state, so that you can jump to it.
8   Undo tree: visually show the tree somehow (Damian Conway)
    Show only the leaves, indicating how many changed from the branch and the
    timestamp?
    Put branch with most recent change on the left, older changes get more
    indent?
8   See ":e" as a change operation, find the changes and add them to the
    undo info.  Also be able to undo the "Reload file" choice for when a file
    was changed outside of Vim.
    Would require doing a diff between the buffer text and the file and
    storing the differences.
    Alternative: before reloading a buffer, store it somewhere.  Keep a list
    of about 10 last reloaded buffers.
-   Make it possible to undo all the commands from a mapping, including a
    trailing unfinished command, e.g. for ":map K iX^[r".
-   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.
-   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.
-   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:
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?
8   Some file systems are case-sensitive, some are not.  Besides
    'wildignorecase' there might be more parts inside
    CASE_INSENSITIVE_FILENAME that are useful on Unix.


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   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   When there is no .viminfo file and someone does "su", runs Vim, a
    root-owned .viminfo file is created.  Is there a good way to avoid this?
    Perhaps check the owner of the directory.  Only when root?
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 the redo buffer, so that "." works after restarting.
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: ".
-   Add an option to whitelist options that are allowed in a modeline.  This
    would allow careful users to use modelines, e.g., only allowing
    'shiftwidth'.
-   Add an option to let modelines only set local options, not global ones
    such as 'encoding'.
-   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.


Sessions:
8   DOS/Windows: ":mksession" generates a "cd" command where "aa\#bb" means
    directory "#bb" in "aa", but it's used as "aa#bb". (Ronald Hoellwarth)
7   When there is a "help.txt" window in a session file, restoring that
    session will not get the "LOCAL ADDITIONS" back.
8   With ":mksession" always store the 'sessionoptions' option, even when
    "options" isn't in it. (St-Amant)
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.
7   With ":mksession" also store the tag stack and jump history. (Michal
    Malecki)
7   Persistent variables: "p:var"; stored in viminfo file and sessions files.


Options:
7   ":with option=value | command": temporarily set an option value and
    restore it after the command has executed.
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)
    Also do 'sidescrolloff'.


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   Make it possible to edit a new buffer in the preview window.  A script can
    then fill it with something.  ":popen"?
7   Add a 'tool' window: behaves like a preview window but there can be
    several.  Don't count it in only_one_window(). (Alexei Alexandrov)
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   Add ten marks for last changed files: ':0, ':1, etc.  One mark per file.
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)
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 keymap for a character, if it exists.
    Also show the code of the character after conversion to 'fileencoding'.
-   Use digraph table to tell Vim about the collating sequence of special
    characters?
8   Add command to remove one or more (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'?
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   Substitute with hex/unicode number "\%xff" and "\%uabcd".  Just like
    "\%uabcd" in search pattern.
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:
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)
-   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.


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   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)?


Debug mode:
7   Add something to enable debugging when a remote message is received.
8   Add breakpoints for setting an option
8   Add breakpoints for assigning to a variable.
7   Add a watchpoint in the debug mode: An expression that breaks execution
    when evaluating to non-zero.  Add the "watchadd expr" command, stop when
    the value of the expression changes.  ":watchdel" deletes an item,
    ":watchlist" lists the items. (Charles Campbell)
7   Store the history from debug mode in viminfo.
7   Make the debug mode history available with histget() et al.


Various improvements:
7   Add plugins for formatting?  Should be able to make a choice depending on
    the language of a file (English/Korean/Japanese/etc.).
    Setting the 'langformat' option to "chinese" would load the
    "format/chinese.vim" plugin.
    The plugin would set 'formatexpr' and define the function being called.
    Edward L. Fox explains how it should be done for most Asian languages.
    (2005 Nov 24)
    Alternative: patch for utf-8 line breaking. (Yongwei Wu, 2008 Feb 23)
7   [t to move to previous xml/html tag (like "vatov"), ]t to move to next
    ("vatv").
7   [< to move to previous xml/html tag, e.g., previous <li>. ]< to move to
    next <li>, ]< to next </li>, [< to previous </li>.
8   Add ":rename" command: rename the file of the current buffer and rename
    the buffer.  Buffer may be modified.
7   Instead of filtering errors with a shell script it should be possible to
    do this with Vim script.  A function that filters the raw text that comes
    from the 'makeprg'?
-   Add %b to 'errorformat': buffer number. (Yegappan Lakshmanan / Suresh
    Govindachar)
7   Add a command that goes back to the position from before jumping to the
    first quickfix location.  ":cbefore"?
7   Allow a window not to have a statusline.  Makes it possible to use a
    window as a buffer-tab selection.
8   Allow non-active windows to have a different statusline. (Yakov Lerner)
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.
    More general: need a way to access command modifiers in a user command.
    Assign them to a v: variable?
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.
6   "vim -q -" should read the list of errors from stdin. (Gautam Mudunuri)
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   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.
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).
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.
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 termresponse 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   Support setting 'equalprg' to a user function name.
7   Highlight the characters after the end-of-line differently.
7   When 'whichwrap' contains "l", "$dl" should join lines?
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)
    Perhaps an autocommand event like CursorHold is better?
    Patch to add async functionality. (Geoff Greer, 2013 Sep 1 and later)
8   Add ":confirm" handling in open_exfile(), for when file already exists.
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%"?
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?
7   Make it possible to set the size of the jumplist (also to a smaller number
    than the default). (Nikolai Weibull)
-   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 using 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.
-   Make 'smartcase' work even though 'ic' isn't set (Webb).
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   The 'a' flag in 'formatoptions' is too dangerous.  In some way only do
    auto-formatting in specific regions, e.g. defined by syntax highlighting.
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?
-   Support multi-byte characters for sentences.  Example from Ben Peterson.
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?
-   Add more redirecting of Ex commands:
	:redir #>  bufname
	:redir #>> bufname   (append)
-   Give error message when starting :redir: twice or using END when no
    redirection was active.
-   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.
-   ":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.
-   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'.
    Make 'showbreak' local to a window.
-   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)
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?
-   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.
-   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.
-   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).
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.
    Perhaps writing to stdout will work, since stderr is used for the terminal
    I/O.
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 exist, 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 ".
-   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"?
-   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.
-   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 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:
-   Instead of using a Makefile and autoconf, use a simple shell script to
    find the C compiler and do everything with C code.  Translate something
    like an Aap recipe and configure.in to C.  Avoids depending on Python,
    thus will work everywhere.  With batch file to find the C compiler it
    would also work on MS-Windows.
-   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/.

When using "do" or ":diffget" in a buffer with changes in every line an extra
empty line would appear.

vim:tw=78:sw=4:sts=4:ts=8:ft=help:norl:
vim: set fo+=n :
