*todo.txt*      For Vim version 9.0.  Last change: 2022 Oct 03


		  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 older 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: https://github.com/vim/vim/issues
Only use this for bug reports, not for questions!  Those belong on the
maillist.  Updates will be forwarded to the |vim_dev| maillist.  Issues
entered there will not be repeated below, unless there is extra information.

The #1234 numbers refer to an issue or pull request on github.  To see it in a
browser use: https://github.com/vim/vim/issues/1234
(replace 1234 with the issue/pull number)
							*known-bugs*
-------------------- Known bugs and current work -----------------------

'smoothscroll':
- computing 'scrolloff' position row use w_skipcol

Add a string to the 'display' option ("smoothscroll" ?) 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 last line that doesn't
fit).  Display "<<<" at the start of the first visible line (like "@@@" is
displayed in the last line). (Arseny Nasokin,  #5154)
Neovim PR: https://github.com/neovim/neovim/pull/11014

Use :defer command:
    - Use "D" flag of writefile() and mkdir() in tests.
	(testdir/test_p*.vim done)

Fix for powershell: #11257

Change boolean 'splitscroll' into string 'splitkeep'. #11258


Further Vim9 improvements, possibly after launch:
- Use Vim9 for more runtime files.
- implement :type
- implement :enum
- implement :class and :interface: See |vim9-classes|
- Inline call to map() and filter(), better type checking.
- When evaluating constants for script variables, some functions could work:
    has(featureName), len(someString)
- Implement as part of an expression: ++expr, --expr, expr++, expr--.

Popup windows:
- Add a function to redraw a specific popup window.  Esp. to be used when
  editing the command line, when screen updating doesn't happen. (Shougo)
  #10210  Probably need to update all popup windows (they may overlap)
  If the display is scrolled need to redraw everything later.
- Add a flag to make a popup window focusable?
    CTRL-W P cycle over any preview window or focusable popup, end up back in
	     current window.
    ? - switch between current window and all popup windows
    Esc in popup window goes back to previous current window
- Add a termcap entry for changing the cursor when it goes under the popup and
  back.  like t_SI and t_EI  (t_SU and t_EU, where "U" means under?)
- With terminal in popup, allow for popup_hide() to temporarily hide it.?
- Make it possible to scroll horizontally when 'wrap' is off.  Does this
  require an ascii scrollbar, like with the vertical one?
- Fire some autocommand event after a new popup window was created and
  positioned?  PopupNew?  Could be used to set some options or move it out of
  the way. (#5737)
  However, it may also cause trouble, changing the popup of another plugin.
- Width is not computed correctly when minwidth and maxwidth are &columns
  and padding and a scrollbar are used.  (#6676)
- Should popup_getoptions() also return the mask?  #7774
- Add a way to use popup_menu() synchronously: instead of invoking the
  callback, return the choice. (Ben Jackson, #6534)
- When using a popup for the info of a completion menu, and there is not
  enough space, let the popup overlap with the menu. (#4544)
- Implement flip option.
- Make redrawing more efficient and avoid flicker:
    - put popup menu also in popup_mask?
- Match does not have right BG color if line length equals popup width.
  (#5658)
- Figure out the size and position better if wrapping inserts indent

'incsearch' with :s:
- :s/foo  using CTRL-G moves to another line, should not happen, or use the
  correct line (it uses the last but one line) (Lifepillar, Aug 18, #3345)
- Also support range: :/foo/,/bar/delete
- Also support for user command, e.g. Cfilter
- :%s/foo should take the first match below the cursor line, unless there
  isn't one?
  Then :%s?foo should take the first match above the cursor line.

Prompt buffer:
- Add a command line history, using up/down keys.  issue #5010
- delay next prompt until plugin gives OK?
- add prompt_addtext({buf}, {expr})	none	add text to a prompt buffer

Terminal debugger:
- Add a mechanism for configuration.  Instead of several global variables use
  a dictionary.  Use callbacks for some things, e.g. opening a debug window in
  a certain position.
- Make prompt-buffer variant work better.
- Add option to not open the program window.  It's not used when attaching to
  an already running program. (M. Kelly)
- Use the optional token on requests, match the result with it. #10300
- When only gdb window exists, on "quit" edit another buffer.
- Termdebug does not work when Vim was built with mzscheme: gdb hangs just
  after "run".  Everything else works, including communication channel.  Not
  initializing mzscheme avoid the problem, thus it's not some #ifdef.
- Add support for lldb?  issue #3565
- Could we do something similar for debugging Vim scripts?  At least see the
  script while stepping through it.  Simple version would use an extra window.
  More complete solution would actually run Vim in a Terminal and control it
  with another Vim instance.

Terminal emulator window:
- Can escape a terminal popup with win_gotoid(), should be an error
- No support for underline color, t_8u.
- When in terminal-Normal mode when the job finishes, the cursor jumps to the
  end but the window is not updated.  This only happens when typing "a".
      :term bash -c "for V in {0..5}; do echo $V; sleep 1; done"
- When started with ":terminal ++close" and the shell exits but there is a
  background process, the window remains open, because the channel still
  exists (and output still shows).  Perhaps close the window when an explicit
  ++close was used? (#5931)
- Using "CTRL-W :confirm quite" and selecting "yes" should work like ":quit!".
    (Harm te Hennepe, #6129)
- When the job in the terminal doesn't use mouse events, let the scroll wheel
  scroll the scrollback, like a terminal does at the shell prompt. #2490
  A bit like using CTRL-W N first.
  Jump back like with "a" when any key is typed.
  And use modeless selection.  #2962
- Use CTRL-W CTRL-K to enter a digraph? #5371
- When Vim runs in the terminal and changes the title, the statusline needs to
  be redrawn.
- GUI: When using ":set go+=!" a system() call causes the hit-enter prompt.
  (#3327)
- Allow for specifying the directory, with ++cwd={dir}.
- When pasting should call vterm_keyboard_start_paste(), e.g. when using
  K_MIDDLEMOUSE, calling insert_reg().
- Users expect parsing the :term argument like a shell does, also support
  single quotes.  E.g. with:  :term grep 'alice says "hello"'  (#1999)
- Win32: Redirecting input does not work, half of Test_terminal_redir_file()
  is disabled.
- Win32: Redirecting output works but includes escape sequences.
- Win32: Make terminal used for :!cmd in the GUI work better.  Allow for
  redirection.
- When the job only outputs lines, we could handle resizing the terminal
  better: store lines separated by line breaks, instead of screen lines,
  then when the window is resized redraw those lines.
- Redrawing is slow with Motif. (Ramel Eshed)
- For the GUI fill termios with default values, perhaps like pangoterm:
  http://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/head:/main.c#L134
- When 'encoding' is not utf-8, or the job is using another encoding, setup
  conversions.

Autoconf: must use autoconf 2.69, later version generates lots of warnings
- try using autoconf 2.71 and fix all "obsolete" warnings

Can deref_func_name() and deref_function_name() be merged?

After patch 8.2.4915 w_botline is computed much more often. Can this be
reduced?

Add BufDeletePost.  #11041

Test property disappears when using CR twice in a row.  OK when some text was
entered. (#11151)

NFA regexp does not handle composing characters well: #10286
    [ɔ̃] matches both ɔ and ɔ̃
    \(ɔ\|ɔ̃\) matches ɔ and not ɔ̃

Improvement in terminal configuration mess: Request the terminfo entry from
the terminal itself.  The $TERM value then is only relevant for whether this
feature is supported or not.  Replaces the xterm mechanism to request each
entry separately. #6609
Multiplexers (screen, tmux) can request it to the underlying terminal, and
pass it on with modifications.

Using "A" and "o" in manually created fold (in empty buffer) does not behave
consistenly (James McCoy, #10698)

To avoid flicker: add an option that when a screen clear is requested, instead
of clearing it draws everything and uses "clear to end of line" for every line.
Resetting 't_ut' already causes this?

When scheme can't be found by configure there is no clear "not found" message:
    configure:5769: checking MzScheme install prefix
    configure:5781: result: 

Can "CSI nr X" be used instead of outputting spaces?  Is it faster?  #8002

Typed keys invisible after calling interrupt() from a timer. #10631

With a window height of 6 and 'scrolloff' set to 3, using "j" does not scroll
evenly. (#10545)  Need to handle this in scroll_cursor_bot().

Idea: when typing ":e /some/dir/" and "dir" does not exist, highlight in red.

":set shellpipe&" and ":set shellredir&" should use the logic from
initialization to figure out the default value from 'shell'.  Add a test for
this.

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.
IDEA: when drawing the text, store the text byte index in ScreenLinesIdx[].
When converting screen column to text position use this.
The line number can be obtained from win->w_lines[].

MS-Windows: did path modifier :p:8 stop working?  #8600

Version of getchar() that does not move the cursor - #10603 Use a separate
argument for the new flag.

Add "lastline" entry to 'fillchars' to specify a character instead of '@'.
#10963

test_arglist func Test_all_not_allowed_from_cmdwin() hangs on MS-Windows.

Information for a specific terminal (e.g. gnome, tmux, konsole, alacritty) is
spread out.  Make a section with copy/paste examples of script and pointers to
more information.

Problem that a previous silent ":throw" causes a following try/catch not to
work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24)
Also see #8487 for an example.

Request to use "." for the cursor column in search pattern \%<.c and \%<.v.
(#8179)

":filter set termcap" only filters terminal codes, not keys. (#9297)

Add an option to restrict 'incsearch' to not scroll the view. (Tavis Ormandy)

Remove SPACE_IN_FILENAME ? It is only used for completion.

When 'term' starts with "foot" then default t_TI and t_TE to the values used
for the builtin xterm termcap.

Adding "10" to 'spellsuggest' causes spell suggestions to become very slow.
(#4087)  Did patch 8.2.2379 help?
Also, z= in German on a long word can take a very long time, but CTRL-C to
interrupt does not work. Where to add ui_breakcheck()?
New English spell files also have very slow suggestions.

French spell files don't work correctly.  #4916
    Make Vim understand the format somehow?

Make "g>" and "g<" in Visual mode move the text right or left.
Also for a block selection.  #8558

When using dictionary insert completion with 'ignorecase', the leading capital
in a word should be preserved.

Add optional argument to virtcol() that specifies "start", "cursor" or "end"
to tell which value from getvvcol() should be used. (#7964)
Value returned by virtcol() changes depending on how lines wrap.  This is
inconsistent with the documentation.

globpath() does not use 'wildignorecase' at all? (related to #8350)

mksession uses :buffer instead of :edit in one place but not another. #10629

Add 'termguiattr' option, use "gui=" attributes in the terminal?  Would work
with 'termguicolors'. #1740

Patch for blockwise paste reporting changes: #6660.  Asked for a PR.

Missing filetype test for bashrc, PKGBUILD, etc.

Add an option to not fetch terminal codes in xterm, to avoid flicker when t_Co
changes.

Add ??= operator, "a ??= b" works like "a = a ?? b". #10343

When ":redir" is used while already active, the previous one is ended.  But
when redirecting to a local variable (function or script) storing the value
won't work.  At least give an error.  Is there a way to make it work?
#10616

Add an option to start_timer() to return from the input loop with K_IGNORE.
This is useful e.g. when a popup was created that disables mappings, we need
to return from vgetc() to make this happen.  #7011

Expanding <mods> should put the tab number from cmdmod.tab before "tab".
Any way to convert "$" back by using a special value? (#6901)

Can we detect true color support?  https://gist.github.com/XVilka/8346728
Try setting a color then request the current color, like using t_u7.

Make the jumplist behave like a tag stack. (#7738)  Should there be a more
time bound navigation, like with undo?

For testing, make a copy of ml_line_ptr instead of pointing it into the data
block, so that valgrind can do out of bounds check.  Set ML_LINE_DIRTY flag or
add ML_LINE_ALLOCED.

Changing a capturing group to non-capturing changes the result: #7607
    :echo matchstr('aaa bbb', '\(.\{-1,}\>\)\|.*')
    aaa
    :echo matchstr('aaa bbb', '\%(.\{-1,}\>\)\|.*')
    aaa bbb
Should also work without any group:
    :echo matchstr('aaa bbb', '.\{-1,}\>\|.*')
    aaa bbb  (should be aaa)

Should add a match/str/list/pos method that also returns the test and position
of submatches.  #8355

Check out PR #543 (Roland Puntaier).
Patch for multibyte characters in langmap and applying a mapping on them.
(Christian Brabandt, 2015 Jun 12, update July 25)
Is this the right solution?  Need to cleanup langmap behavior:
- in vgetorpeek() apply langmap to the typeahead buffer and put the result in
  a copy-buffer, only when langmap is appropriate for the current mode. Then
  check for mapping and let gotchars() work on the copy-buffer.
- Remove LANGMAP_ADJUST() in other parts of the code.  Make sure the mode is
  covered by the above change.
So that replaying the register doesn't use keymap/langmap and still does the
same thing.
Also see #737: langmap not applied to replaying recording.

Matchparen doesn't remove highlight after undo. (#7054)
Is OK when syntax HL is active.

Currently Del can be used to delete the last character of a typed count.
Can it also be used to delete an incomplete Normal mode command? (#7096)
After an operator: should work.  After "a" or "i" for text objects: should
work.

Using "au!" after "filetype on" is a bit slow.  Can the matching of
autocommands be made faster?  (#7056)

Append in Visual block mode inserts the wrong character.
Test_visual_block_mode() already has the proper check, which is commented out.
(#8288)

Add the <=> (spaceship) operator and "cond ?< expr ?= expr ?> expr"
    replace this:
	let left = GetLeftFunc()
	let right = GetRightFunc()
	let res = left < right ? lower : left == right ? equal : upper
    by:
	let res = GetLeftFunc() <=> GetRightFunc() ?< lower ?= equal ?> upper
Patch to make :q work with local arglist. (Christian Brabandt, #6286)

Why does Test_invalid_sid() not work in the GUI?

":pedit" ignores the local working directory when 'pvp' is set (#7267)

Lua: updating wrong buffer when using newly created, unloaded buffer.
(#6539)

File marks merging has duplicates since 7.4.1925. (Ingo Karkat, #5733)

A syntax plugin cannot use autocommands, it could be sourced from setting
'syntax' in a modeline.  Add a function that indicates whether "secure"
and/or "sandbox" are set.

Problem with auto-formatting - inserting space and putting cursor before added
character. (#6154)

When 'lazyredraw' is set sometimes the title is not updated.
(Jason Franklin, 2020 Feb 3)  Looks like a race condition.

With bash ":make" does not set v:shell_error.  Possible solution: set
'shellpipe' to "2>&1| tee %s; exit ${PIPESTATUS[0]}"  #5994

Using mode() when "/pat" is used in Visual mode returns "v" instead of "c",
which is not useful.  Return "c/v" instead.  And "c/o" when using "d/pat".
#6127

Add a cterm attribute for "dimmed" or "faint" text. (#8269)

When 'fileignorecase' is set ":e testfile.c" works to edit TestFile.c, but
":find testfile.c" does not ignore case.
Might be related to #6088.

Error for reverse range when using :vimgrep in file "[id-01] file.txt".
(#6919)

When changing the crypt key the buffer should be considered modified.
Like when changing 'fileformat'.  Save the old key in save_file_ff().
(Ninu-Ciprian Marginean)

Strange sequence of BufWipeout and BufNew events while doing omni-complete.
(Paul Jolly, #5656)
Get BufDelete without preceding BufNew. (Paul Jolly, #5694)
    Later more requests for what to track.
    Should we add new events that don't allow any buffer manipulation?
    Really only for dealing with appearing and disappearing buffers, load and
    unload.
BufWinenter event not fired when saving unnamed buffer. (Paul Jolly, #5655)
Another spurious BufDelete. (Dani Dickstein, #5701)

Wrong error when using local arglist. (Harm te Hennepe, #6133)

Test loose_clipboard() by selecting text before suspending.

:unmap <c-n> gives error but does remove the mapping. (Antony Scriven, 2019
Dec 19)

Patch to add an option to enable/disable VTP.  (Nobuhiro Takasaki, #5344)
Should have three values: empty, "off", "on".  Name it 'winterm'?

Patch to fix session file when using multiple tab pages. (Jason Franklin, 2019
May 20)
Also put :argadd commands at the start for all buffers, so that their order
remains equal?  Then %argdel to clean it up.  Do try this with 'hidden' set.
Also #5326: netrw buffers are not restored.

When 'backupdir' has a path ending in double slash (meaning: use full path of
the file) combined with 'patchmode' the file name is wrong. (#5791)

Completion mixes results from the current buffer with tags and other files.
Happens when typing CTRL-N while still searching for results.  E.g., type "b_"
in terminal.c and then CTRL-N twice.
Should do current file first and not split it up when more results are found.
(Also #1890)

Help for ":argadd fname" says that if "fname" is already in the argument list
that entry is used.  But instead it's always added. (#6210)
Add flag AL_FIND_ADD, if there is one argument find it in the list.

Statusline highlighting error, off by one. (#5599)

":find" with 'path' set to "data*" does not find files, while completion does
find them. (Max Kukartsev, #6218)

Enable 'termbidi' if $VTE_VERSION >= 5703 ?

Sound: support on Mac?  Or does libcanberra work there?

Python 3.8 doesn't work. (Antonios Hadjigeorgalis, #5509)

"--cleanFOO" does not result in an error. (#5537)

Output from assert_equalfile() doesn't give a hint about what's different.
Assuming the files are text, print the line with the difference.

Result of synID() sometimes wrong in help files. (#5252)

When a help file is opened that doesn't have "ft=help" in the modeline then
the FileType is first set to "text" before it is set to "help". (#8099)

Problem showing a line if the number column width changes when using "o".
(Mateusz Morusiewicz, #4245)

When using :packadd for a replacement language plugin, it is loaded after the
default one.  #4698

When using :packadd files under "later" are not used, which is inconsistent
with packages under "start". (xtal8, #1994)

Patch to add new motion ]( and ]{.  (Yasuhiro Matsumoto, #5320)
Better: use the "z" prefix.  or ]t) and [t(.

Visual highlight not removed when 'display' is "lastline" and line doesn't
fit. (Kevin Lawler, #4457)

Current position in the changelist should be local to the buffer. (#2173)

Does not build with MinGW out of the box:
- _stat64 is not defined, need to use "struct stat" in vim.h
- WINVER conflict, should use 0x0600 by default?
- INT_MAX not defined: need to include <limits.h> in vim.h

Display messed up with matchparen, wrapping and scrolling. (#5638)
Screen update bug related to matchparen.  (Chris Heath, 2017 Mar 4, #1532)

When getting a focus event halfway a mapping this aborts the mapping.  E.g.
when "qq" is mapped and after the first "q" the mouse is moved outside of the
gvim window (with focus follows mouse), then the K_FOCUSLOST key is put in the
input buffer. (#5302)

Check_external_diff() is used too often. (Daniel Hahler, #4800)

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.

Add a WindowScrolled event.  Trigger around the same time as CursorMoved.
Can be used to update highlighting. #3127  #5181

Incorrect formatting with autoindent. (Sebastian Gniazdowski, #4909)

Patch to add the :bvimgrep command.  (Christian Brabandt, 2014 Nov 12)
Updated 2016 Jun 10, #858  Update 2017 Mar 28: use <buffer>.
Better use ":bufgrep" ?

Improve fallback for menu translations, to avoid having to create lots of
files that source the actual file.  E.g. menu_da_de -> menu_da
Include part of #3242?

Patch to have text objects defined by arbitrary single characters. (Daniel
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
Added tests (James McCoy, 2016 Aug 3, #958).  Still needs more work.

Would be nice to set tab-local values for 'diffexpr' and 'diffopt'.  Use
t:diffexpr_option t:diffopt_option? (#4782)

Internal diff doesn't handle binary file like external diff does. (Mike
Williams, 2018 Oct 30)

'[ mark in wrong column after put. (#4776)

Problem with :tlmenu: Detach item added with all modes?  Issue #3563.

Add an argument to expandcmd() to expand like ":next" does.

When both "a" and "l" is in 'formatoptions' then auto-formatting also happens
in a long line. #5189

The quoting of the [command] argument of :terminal is not clearly documented.
Give a few examples. (#4288)

Opening a file with --remote-tab-silent that matches 'wildignore' does not
work, results in "E479: No match". (#4610)

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'.
Patch for this (Tristan Konolige, #1011, only added the option, no implem.)

Bug: script written with "-W scriptout" contains Key codes, while the script
read with "-s scriptin" expects escape codes.  Probably "scriptout" needs to
be adjusted. (Daniel Steinberg, 2019 Feb 24, #4041)

Window size changes after closing a tab. (#4741)

Problem with colors in terminal window. (Jason Franklin, 2019 May 12)

Color schemes:
NOTE: modernizing the default colorschemes _AND_ introducing new ones is now
a project in its own right: https://github.com/vim/colorschemes. Feel free to
reach out if you want to lend a hand.
- Lifepillar: Updated/cleaned up color schemes:
  https://github.com/lifepillar/vim8-colorschemes.
- Include a few color schemes, based on popularity:
  - http://www.vim.org/scripts/script_search_results.php?keywords=&script_type=color+scheme&order_by=rating&direction=descending&search=search
http://vimawesome.com/?q=tag:color-scheme
- Use names that indicate their appearance (Christian Brabandt, 2017 Aug 3)
  - monokai - Xia Crusoe (2017 Aug 4)
  - seoul256 - Christian Brabandt (2017 Aug 3)
  - gruvbox -  Christian Brabandt (2017 Aug 3) (simplified version from
        Lifepillar, 2018 Jan 22, #2573)
  - janah - Marco Hinz (2017 Aug 4)
  - apprentice - Romain Lafourcade (2017 Aug 6)  remarks about help file #1964
- Suggested by Hiroki Kokubun:
  - [Iceberg](https://github.com/cocopon/iceberg.vim) (my one)
  - [hybrid](https://github.com/w0ng/vim-hybrid)
- Include solarized color scheme?, it does not support termguicolors.
  - Sanitized version of pablo (Lifepillar, 2017 Nov 21)

Bug: "vipgw" does not put cursor back where it belongs. (Jason Franklin, 2019
Mar 5)

Some composing characters actually add a cell width to the character they are
on top off, making the whole thing two characters wide. (#4526)

Should we include some part of pull request #4505, not increment changedtick
in some cases?  E.g. for ":write" when the changed flag was already off, the
buffer didn't change at all.

When using a timer callback vgetc_busy is reset, allowing for using input().
But in a channel callback this does not happen.  We need to do something
similar to check_due_timer().  Also see #3809.

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

Check: __attribute__((format(printf, on semsg() and siemsg().  Where was this
added?

Add test for urxvt mouse codes.  Also test that mouse coordinates can be
negative. (see #4326)

'cmdheight' has a tab-local value, but it cannot be obtained with
`:echo gettabwinvar(2, 1, '&cmdheight')` returns the value for the _current_
tab page. (Ingo Karkat, #4324)
:call settabwinvar(1, 1, '&cmdheight', 2) also doesn't work well.

This modeline throws unexpected errors: (#4165)
    vim: syn=nosyntax

Make balloon_show() work outside of 'balloonexpr'?  Users expect it to work:
#2948. (related to #1512?)
Also see #2352, want better control over balloon, perhaps set the position.
Should also be possible to add highlighting, like in the status line?
balloonexpr() on MS-Windows GUI doesn't handle accented chars? (nivaemail,
2018 Sep 14)

More warnings from static analysis:
https://lgtm.com/projects/g/vim/vim/alerts/?mode=list

Not existing directory in CDPATH leads to two shell calls. (#4525)

Use dict_iterate_start() / dict_iterate_next() instead of relying on the
internals of the dict structure.

nvo-mode mapping works on Windows, not on Linux. (#3678)

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".  Add to history, like search history and command line history.

When 'confirm' is set a "silent q" doesn't show the prompt.  It should in this
case. (Nate Peterson, 2019 Jan 31, #3892)
For "silent! q" it should not prompt and just fail.

Add <aevent>, which expands to the currently triggered autocommand event name.
(Daniel Hahler, #4232)  Or add it to v:event (easier to use but slightly more
expensive).

Some xterm responses are not properly handled: (Markus Gömmel, 2019 Apr 1)
    DCS 0 $ r Pt ST    should be ignored.
    DCS 0 + r/Pt/  ST  already ignored?

Using CTRL-L to add a character to the search string that contains \v,
punctuation is repeated. (Smylers, 2018 Nov 17, #3621)

Using single wide base character with double wide composing character gives
drawing errors.  Fill up the base character?  (Dominique, #4328)

When 'sidescrolloff' is set, using "zl" to go to the end of the line, suddenly
scrolls back.  Should allow for this scrolling, like 'scrolloff' does when
using CTRL-E. (Yee Cheng Chin, #3721)

Add function to make use of internal diff, working on two lists and returning
unified diff (list of lines).

When splitting a window with few text lines, the relative cursor position is
kept, which means part of the text isn't displayed.  Better show all the text
when possible. (Dylan Lloyd, #3973)

Make ":interactive !cmd" stop termcap mode, also when used in an autocommand.
(#3692)

Add something like 'fillchars' local to window, but allow for specifying a
highlight name.  Esp. for the statusline.
And "extends" and "precedes" are also useful without 'list' set.  Also in
'fillchars' or another option?

Sourceforge Vim pages still have content, make them empty, keep redirect.
Check for PHP errors. (Wayne Davison, 2018 Oct 26)

Problem with Visual yank when 'linebreak' and 'showbreak' are set.
Patch with tests, but it's not clear how it is supposed to work. (tommm, 2018
Nov 17)  Asked about this, Dec 22. Christian will have a look.

Update for xim-input-style help (Tony Mechelynck, 2019 Jan 10).
Feedback from someone who uses this?

Only output t_Cs when t_Ce is also set.  do not use Cs and Ce termcap entries.  (Daniel Hahler, 2018 Sep 25)
Add t_cS and t_cR for cursor color select and reset.  Use Cs and Cr terminfo
values.

Further xdiff changes:
- More options, e.g. different kind of whitespace diff.
- when editing text, update the surrounding diff blocks.
- omit diff.exe from distribution
- Can we make this show differences within a line?
- add option to use external diff above a certain size.

Difference between two regexp engines: #3373

When the last line wraps, selecting with the mouse below that line only
includes the first screen line. (2018 Aug 23, #3368)

Refactored HTML indent file. (Michael Lee, #1821)
Asked to write a test.

Merge checking for 'cursorline' and 'concealcursor', see neovim #9492.

Add a windowID argument to placing a sign, so that it only shows up in one
window for the buffer.

Compiler warning (geeknik, 2017 Oct 26):
- undefined left shift in eval_string(), before hex2nr() (#2250)
  Use unsigned for "nr".

Add Native language protocol server (LSP) support. (Yegappan Lakshmanan, 2018
Oct 28)

Patch to be able to use hex numbers with :digraph. (Lcd, 2015 Sep 6)
Update Sep 7.  Update by Christian Brabandt, 2015 Sep 8, 2016 Feb 1.
Patch to be able to disable default digraphs (incomplete) (Eric Pruitt, 2018
Nov 22).

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

Setting 'columns' in a BufEnter autocommand causes a second tab width to
behave strangely, as if there is a gap and a vertical window separator.
(Michael Soyka, 2018 Sep 23, #3477)

Add an option similar to 'lazyredraw' to skip redrawing while executing a
script or function.

Using a menu item while the "more" prompt is displayed doesn't work well.
E.g. after using help->version.  Have a key that ends the "more" prompt and
does nothing otherwise?

MS-Windows: write may fail if another program is reading the file.
If 'readonly' is not set but the file appears to be readonly later, try again
(wait a little while).
CreateFile() returns ERROR_SHARING_VIOLATION (Linwei, 2018 May 5)

Using --remote to open a file in which a # appears does not work on
MS-Windows.  Perhaps in \#  the \ is seen as a path separator. (Axel Bender,
2017 Feb 9)  Can we expand wildcards first and send the path literally to the
receiving Vim?  Or make an exception for #, it's not useful remotely.

Column number is wrong when using 'linebreak' and 'wrap'. (Keith Smiley, 2018
Jan 15, #2555)

Add Makefiles to the runtime/spell directory tree, since nobody uses Aap.
Will have to explain the manual steps (downloading the .aff and .dic files,
applying the diff, etc.

User dictionary ~/.vim/spell/lang.utf-8.add not used for spell checking until a
word is re-added to it. (Matej Cepl, 2018 Feb 6)

Fold at end of the buffer behaves inconsistently. (James McCoy, 2017 Oct 9)

Implement option_save() and option_restore():
option_restore({list})					*option_restore()*
		Restore options previously saved by option_save().
		When buffer-local options have been saved, this function must
		be called when the same buffer is the current buffer.
		When window-local options have been saved, this function must
		be called when the same window is the current window.
		When in the wrong buffer and/or window an error is given and
		the local options won't be restored.

option_save({list})					*option_save()*
		Saves the options named in {list}.  The returned value can be
		passed to option_restore().  Example: >
			let s:saved_options = option_save([
			    \ 'ignorecase',
			    \ 'iskeyword',
			    \ ])
			 au <buffer> BufLeave *
			    \ call option_restore(s:saved_options)
<		The advantage over using `:let` is that global and local
		values are handled and the script ID is restored, so that
		`:verbose set` will show where the option was originally set,
		not where it was restored.
  Alternatively: save and restore ALL options.  Implementation needs to use
	copy-on-write.  Return an ID from option_save(), when
	option_restore(ID) is called give an error if another option_save()
	was called in the meantime, they must be balanced.

"gvim --remote" from a directory with non-word characters changes the current
directory (Paulo Marcel Coelho Arabic, 2017 Oct 30, #2266)
Also see #1689.

When 'virtualedit' is "all" and 'cursorcolumn' is set, the wrong column may be
highlighted. (van-de-bugger, 2018 Jan 23, #2576)

No profile information for function that executes ":quit". (Daniel Hahler,
2017 Dec 26, #2501)

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

Add script number to profile?  (#3330 breaks tests).

A function defined locally and lambda's are not easily recognized.
Mention where they were defined somewhere.

ml_get errors with buggy script. (Dominique, 2017 Apr 30)

Error in emsg with buggy script. (Dominique, 2017 Apr 30)

Join truncates xml comment. (Dmitrii Tcyganok, 2017 Dec 24, #2494)
Requires 'formatoptions' to include "j". (Gary Johnson, 2017 Dec 24)

Patch to support hunspell. (Matej Cepl, Jan 2018, #2500) Based on older patch
in #846)
Doesn't work on Windows yet.  Not ready to included, hard coded paths.

When a timer is running and typing CTRL-R on the command line, it is not
redrawn properly. (xtal8, 2017 Oct 23, #2241)

In an optional package the "after" directory is not scanned?
(Renato Fabbri, 2018 Feb 22)

Patch for Neovim concerning restoring when closing help window. (glacambre
neovim #7431)

Patch for improving detecting Ruby on Mac in configure. (Ilya Mikhaltsou, 2017
Nov 21)

When t_Co is changed from termresponse, the OptionSet autocommand event isn't
triggered.  Use the code from the end of set_num_option() in
set_color_count().

Add another autocommand like TermResponse that is fired for the other terminal
responses, such as bg and fg.  Use "bg", "fg", "blink", etc. for the name.

When using command line window, CmdlineLeave is triggered without
CmdlineEnter.  (xtal8, 2017 Oct 30, #2263)
Add some way to get the nested state.  Although CmdwinEnter is obviously
always nested.

matchit hasn't been maintained for a long time.  #955.

Problem with 'delcombine'. (agguser, 2017 Nov 10, #2313)

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

MS-Windows: buffer completion doesn't work when using backslash (or slash)
for a path separator. (xtal8, #2201)

Would be nice for Insert mode completion to highlight the text that was added
(and may change when picking another completion).

Test more runtime files.

Window not closed when deleting buffer. (Harm te Hennepe, 2017 Aug 27, #2029)

Add options_default() / options_restore() to set several options to Vim
defaults for a plugin. Comments from Zyx, 2017 May 10.
Perhaps use a vimcontext / endvimcontext command block.

After using :noautocmd CursorMoved may still trigger. (Andy Stewart, 2017 Sep
13, #2084).  Set old position after the command.

When bracketed paste is used, pasting at the ":append" prompt does not get the
line breaks. (Ken Takata, 2017 Aug 22)

Cannot copy modeless selection when cursor is inside it. (lkintact, #2300)

Test_writefile_fails_conversion failure on Solaris because if different iconv
behavior.  Skip when "uname" returns "SunOS"? (Pavel Heimlich, #1872)

'tagrelative' is broken in specific situation. (xaizek, 2017 Oct 19, #2221)

The ++ options for the :edit command are also useful on the Vim command line.

Overlong utf-8 sequence is displayed wrong. (Harm te Hennepe, 2017 Sep 14,
#2089)  Patch with possible solution by Björn Linse.

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.
Kazunobu Kuriyama is working on a proper fix. (2017 Jul 25)

Problem with three-piece comment. (Michael Lee, 2017 May 11, #1696)

Creating a partial with an autoload function is confused about the "self"
attribute of the function.  For an unknown function assume "self" and make
that optional? (Bjorn Linse, 2017 Aug 5)

Cindent: returning a structure has more indent for the second item.
(Sam Pagenkopf, 2017 Sep 14, #2090)

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

Profile of a dict function is lost when the dict is deleted.  Would it be
possible to collect this?  (Daniel Hahler, #2350)

When checking if a bufref is valid, also check the buffer number, to catch the
case of :bwipe followed by :new.

Patch to skip writing a temp file for diffing if the buffer is equal to the
existing file. (Akria Sheng, 2017 Jul 22)
Could also skip writing lines that are the same.

MS-Windows: Opening same file in a second gvim hangs. (Sven Bruggemann, 2017
Jul 4)

Setting 'clipboard' to "unnamed" makes a global command very slow (Daniel
Drucker, 2017 May 8).
This was supposed to be fixed, did it break again somehow?
Christian cannot reproduce it.

Using composing char in mapping does not work properly. maparg() shows the
wrong thing. (Nikolai Pavlov, 2017 Jul 8, #1827)
Or is this not an actual problem?

Better TeX indent file. (Christian Brabandt, 2017 May 3)

Use gvimext.dll from the nightly build? (Issue #249)

'synmaxcol' works with bytes instead of screen cells. (Llandon, 2017 May 31,
#1736)

Problem with using :cd when remotely editing a file. (Gerd Wachsmuth, 2017 May
8, #1690)

Memory leak in test97?  The string is actually freed.  Weird.

assert_fails() can only check for the first error.  Make it possible to have
it catch multiple errors and check all of them.

Add a toolbar in the terminal.  Can be global, above all windows, or specific
for one window.

Make maparg() also return the raw rhs, so that it doesn't depend on 'cpo'.
(Brett Stahlman, 2017 May 23)
Even better: add a way to disable a mapping temporarily and re-enable it
later.  This is for a sub-mode that is active for a short while (one buffer).
Still need maplist() to find the mappings.  What can we use to identify a
mapping?  Something unique would be better than the LHS.
Perhaps simpler: actually delete the mappings.  Use maplist() to list matching
mappings (with a lhs prefix, like maparg()), mapdelete() to delete,
maprestore() to restore (using the output of maplist()).

Add an argument to :mkvimrc (or add another command) to skip mappings from
plugins (source is a Vim script).  No need to put these in a .vimrc, they will
be defined when the plugin is loaded.

Use tb_set(winid, [{'text': 'stop', 'cb': callback, 'hi': 'Green'}])
    tb_highlight(winid, 'ToolBar')
    tb_get(winid)

json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23)
What if there is an invalid character?

Json string with trailing \u should be an error. (Lcd)

import can't be used in define option when include matches too.
(Romain Lafourcade, 2017 Jun 18, #1519)

Wrong diff highlighting with three files. (2016 Oct 20, #1186)
Also get E749 on exit.
Another example in #1309

Suggestion to improve pt-br spell checking. (Marcelo D Montu, 2016 Dec 15,
#1330)

Error in test_startup_utf8 on Solaris. (Danek Duvall, 2016 Aug 17)

Rule to use "^" for statusline does not work if a space is defined with
highlighting for both stl and stlnc.  Patch by Ken Hamada (itchyny, 2016 Dec 11)

Using CTRL-G_U in InsertCharPre causes trouble for redo. (Israel Chauca
Fuentes, 2017 Feb 12, #1470)

Add a "keytrans()" function, which turns the internal byte representation of a
key into a form that can be used for :map.  E.g.
    let xx = "\<C-Home>"
    echo keytrans(xx)
    <C-Home>

Check for errors E704 and E705 only does VAR_FUNC, should also do VAR_PARTIAL.
(Nikolai Pavlov, 2017 Mar 13, #1557)
Make a function to check for function-like type?

Implement named arguments for functions with optional arguments:
    func Foo(start, count = 1, all = 1)
    call Foo(12, all = 0)

Add a command to take a range of lines, filter them and put the output
somewhere else.  :{range}copy {dest} !cmd

The TermResponse event is not triggered when a plugin has set 'eventignore' to
"all".  Netrw does this. (Gary Johnson, 2017 Jan 24)
Postpone the event until 'eventignore' is reset.

Expanding /**/ is slow.  Idea by Luc Hermitte, 2017 Apr 14.

Once .exe with updated installer is available: Add remark to download page
about /S and /D options (Ken Takata, 2016 Apr 13)
Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases

":sbr" docs state it respects 'switchbuf', but "vsplit" does not cause a
vertical split. (Haldean Brown, 2017 Mar 1)

Use ADDR_OTHER instead of ADDR_LINES for many more commands.
E.g. all the location list commands use a count.
Add tests for using number larger than number of lines in buffer.

Might be useful to have isreadonly(), like we have islocked().
Avoids exceptions, e.g. when using the b: namespace as a dict.

Patch to make v:shell_error writable. (Christian Brabandt, 2016 Sep 27)
Useful to restore it.  Is there another solution?

"ci[" does not look for next [ like ci" does look for next ".
(J.F. 2017 Jan 7)

Patch for wrong cursor position on wrapped line, involving breakindent.
(Ozaki Kiichi, 2016 Nov 25)

Patch for 'cursorlinenr' option. (Ozaki Kiichi, 2016 Nov 30)

Window resizing with 'winfixheight': With a vertical split the height changes
anyway. (Tommy allen, 2017 Feb 21, #1502)

Invalid behavior with NULL list. (Nikolai Pavlov, #768)
E.g. deepcopy(test_null_list())

Patch to make it possible to extend a list with itself.
(Nikolai Pavlov, 2016 Sep 23)

Patch to add Zstandard compressed file support. (Nick Terrell, 2016 Oct 24)

On Windows buffer completion sees backslash as escape char instead of path
separator. (Toffanim, 2016 Nov 24, #1274)

Should :vmap in matchit.vim be :xmap?  (Tony Mechelynck)

Problem with whitespace in errorformat. (Gerd Wachsmuth, 2016 May 15, #807)

Add "unicode true" to NSIS installer.  Doesn't work with Windows 95, which we
no longer support.

Support sort(l, 'F'), convert strings to float. (#7857)

sort() is not stable when using numeric/float sort (Nikolay Pavlov, 2016 Sep
4#1038)

sort() does not use 'smartcase' for the skip pattern, even though 'ignorecase'
is used. (Filipe Brandenburger, #7322)

+channel:
- Add a in_cb, invoked when the write buffer has become empty. (Matteo Landi)
- Add ch_readlines(): for a channel in NL mode, reads as many lines as are
  available.  Should be more efficient than looping over ch_read() with
  ch_status() to check for more.
- If buffer contents is changed in a callback, set w_redr_status so that it
  gets redrawn in redraw_after_callback(). #6120
- Add a separate timeout for opening a socket.  Currently it's fixed at 50
  msec, which is too small for a remote connection. (tverniquet, #2130)
- Writing raw mode to a buffer should still handle NL characters as line
  breaks. (Dmitry Zotikov, 2017 Aug 16)
- When out_cb executes :sleep, the close_cb may be invoked. (Daniel Hahler,
  2016 Dec 11, #1320)
- Implement |job-term| ?
- Calling a function when receiving a "call" on a channel, using feedkeys()
  does not work.  It does work from a timer. (Qiming Zhao, #3852)
- Channel test fails with Motif.  Sometimes kills the X11 server.
- When a message in the queue but there is no callback, drop it after a while?
  Add timestamp to queued messages and callbacks with ID, remove after a
  minute.  Option to set the droptime.
- Add an option to drop text of very long lines?  Default to 1 Mbyte.
- Add remark about undo sync, is there a way to force it?
- When starting a job, have an option to open the server socket, so we know
  the port, and pass it to the command with --socket-fd {nr}. (Olaf Dabrunz,
  Feb 9)  How to do this on MS-Windows?
- For connection to server, a "keep open" flag would be useful.  Retry
  connecting in the main loop with zero timeout.
- job_start(): run job in a newly opened terminal (not a terminal window).
    With xterm could use -S{pty}.
    Although user could use "xterm -e 'cmd arg'".

Regexp problems:
- NFA engine can be slow for some patterns.  Dominique found out that most
  time is spent in addstate_here() copying the threads.  Instead of copying,
  let each thread point to the next one (by offset, the list is reallocated).
  (Dominique Pelle, 2019 Feb 18)
- Old engine: using 'incsearch' /\Zabc does not highlight the "c" if it has a
  composing character.  New engine is OK. (Tony Mechelynck, 2019 May 5)
- When search pattern has the base character both with and without combining
  character, search fails.  E.g. "รรีบ" in "การรีบรักใคร". (agguser, #2312)
- [:space:] only matches ASCII spaces.  Add [:white:] for all space-like
  characters, esp. including 0xa0.  Use character class zero.
- Since 7.4.704 the old regex engine fails to match [[:print:]] in 0xf6.
  (Manuel Ortega, 2016 Apr 24)
  Test fails on Mac.  Avoid using isalpha(), isalnum(), etc?  Depends on
  LC_CTYPE
- 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 multibyte 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.
- 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
- Search for \%d0\+ may fail with E363. (Christian Brabandt, 2016 Oct 4)
- \%'[ does not work.  '%'] does work.  (Masaaki Nakamura, 2016 Apr 4)
- 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.
  This problem is probably the same: "\%(^\1.*$\n\)\@<=\(\d\+\).*$".
  (guotuofeng, 2015 Jun 22)
- 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.
- Difference between two engines: ".*\zs\/\@>\/" on text "///"
  (Chris Paul, 2016 Nov 13)  New engine not greedy enough?
  Another one: echom matchstr(" sdfsfsf\n sfdsdfsdf",'[^\n]*')
  (2017 May 15, #1252)

Idea from Sven: record sequence of keys.  Useful to show others what they are
doing (look over the shoulder), and also to see what happened.
Probably list of keystrokes, with some annotations for mode changes.
Could store in logfile to be able to analyse it with an external command.
E.g. to see when's the last time a plugin command was used.

cmap using execute() has side effects. (Killthemule, 2016 Aug 17, #983)

:map X may print invalid data. (Nikolay Pavlov, 2017 Jul 3, #1816)

Patch to order results from taglist(). (Duncan McDougall, 2016 Oct 25)

ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19)
Also with latest version.

Completion for input() does not expand environment variables. (chdiza, 2016
Jul 25, #948)

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

MS-Windows: use WS_HIDE instead of SW_SHOWMINNOACTIVE in os_win32.c?
Otherwise task flickers in taskbar.

Second problem in #966: ins_compl_add_tv() uses get_dict_string() multiple
times, overwrites the one buffer. (Nikolay Pavlov, 2016 Aug 5)

Patch to improve map documentation. Issue #799.

We can use '. to go to the last change in the current buffer, but how about
the last change in any buffer?  Can we use ', (, is next to .)?

Ramel Eshed: system() is much slower than job_start(), why? (Aug 26)

When generating the Unicode tables with runtime/tools/unicode.vim the
emoji_width table has only one entry.

It's possible to add ",," to 'wildignore', an empty entry.  Causes problems.
Reject the value? #710.

When doing "vi buf.md" a BufNew autocommand for *.md is not triggered.
Because of using the initial buffer? (Dun Peal, 2016 May 12)

Neovim patch for utfc_ptr2char_len() https://github.com/neovim/neovim/pull/4574
No test, needs some work to include.

Patch to improve indenting for C++ constructor with initializer list.
(Hirohito Higashi, 2016 Mar 31)

Zero-out krypt key information when no longer in use. (Ben Fritz, 2017 May 15)

Add stronger encryption.  Could use libsodium (NaCl).
https://github.com/jedisct1/libsodium/
Possibly include the needed code so that it can be built everywhere.

Add a way to restart a timer.  It's similar to timer_stop() and timer_start(),
but the reference remains valid.

Need to try out instructions in INSTALLpc.txt about how to install all
interfaces and how to build Vim with them.
Appveyor build with self-installing executable, includes getting most
interfaces: https://github.com/k-takata/vim/tree/chrisbra-appveyor-build
result: https://ci.appveyor.com/project/k-takata/vim/history

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

Patch to make tests pass with EBCDIC. (Owen Leibman, 2016 Apr 10)

Add ":read :command", to insert the output of an Ex command?
Can already do it with ":$put =execute('command')".

exists(":tearoff") does not tell you if the command is implemented. (Tony
Mechelynck)  Perhaps use exists("::tearoff") to check?

Use vim.vim syntax highlighting for help file examples, but without ":" in
'iskeyword' for syntax.

Installation of .desktop files does not work everywhere.
It's now fixed, but the target directory probably isn't right.
Add configure check?
Should use /usr/local/share/applications or /usr/share/applications.
Or use $XDG_DATA_DIRS.
Also need to run update-desktop-database (Kuriyama Kazunobu, 2015 Nov 4)

Test object i{ and it do not behave the same. #1379
Do not include the linebreak at the start?

Feature request: add the "al" text object, to manipulate a screen line.
Especially useful when using 'linebreak'

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

Patch to avoid redrawing tabline when the popup menu is visible.
(Christian Brabandt, 2016 Jan 28)

When the CursorMovedI event triggers, and CTRL-X was typed, a script cannot
restore the mode properly. (Andrew Stewart, 2016 Apr 20)
Do not trigger the event?

Patch to make the behavior of "w" more straightforward, but not Vi compatible.
With a 'cpo' flag.  (Christian Brabandt, 2016 Feb 8)

Patch to add optionproperties(). (Anton Lindqvist, 2016 Mar 27, update Apr 13)

Patch to add TagNotFound autocommand. (Anton Lindqvist, 2016 Feb 3)

Patch to add Error autocommand. (Anton Lindqvist, 2016 Feb 17)
Only remembers one error.

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

Unexpected delay when using CTRL-O u.  It's not timeoutlen.
(Gary Johnson, 2015 Aug 28)

Instead of separately uploading patches to the ftp site, we can get them from
github with a URL like this:
   https://github.com/vim/vim/compare/v7.4.920%5E...v7.4.920.diff
Diff for version.c contains more context, can't skip a patch.

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

Comparing nested structures with "==" uses a different comparator than when
comparing individual items.

Using uninitialized memory. (Dominique Pelle, 2015 Nov 4)

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.

Patch to add :mapgroup, put mappings in a group like augroup.
(Yasuhiro Matsumoto, 2016 Feb 19)

Can we cache the syntax attributes, so that updates for 'relativenumber' and
'cursorline'/'cursorcolumn' are a lot faster?  Thus store the attributes
before combining them.

C highlighting: modern C allows: /* comment */ #ifdef
and also line continuation after #include.
I can't recommend it though.

Build with Python on Mac does not always use the right library.
(Kazunobu Kuriyama, 2015 Mar 28)

To support Thai (and other languages) word boundaries, include the ICU
library:  http://userguide.icu-project.org/boundaryanalysis

Patch to use two highlight groups for relative numbers. (Shaun Brady, 2016 Jan
30)

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

The OptionSet autocommand event is not always triggered. (Rick Howe, 2015 Sep
24): :diffthis, :diffoff.

":set all&" still does not handle all side effects.  Centralize handling side
effects for when set by the user, on init and when reset to default.

":tag" does not jump to the right entry of a :tselect. (James Speros, 2015 Oct
9)

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

Proposal to make options.txt easier to read. (Arnaud Decara, 2015 Aug 5)
Update Aug 14.

When using --remote-tab on MS-Windows 'encoding' hasn't been initialized yet,
the file name ends up encoded wrong. (Raul Coronado, 2015 Dec 21)

Example in editing.txt uses $HOME with the expectation that it ends in a
slash.  For me it does, but perhaps not for everybody.  Add a function that
inserts a slash when needed?  pathconcat(dir, path) (Thilo Six, 2015 Aug 12)

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

Patch to fix checking global option value when not using it.
(Arnaud Decara, 2015 Jul 23)

When 'showbreak' is set repeating a Visual operation counts the size of the
'showbreak' text as part of the operation. (Axel Bender, 2015 Jul 20)

Patch to add grepfile(). (Scott Prager, 2015 May 26)
Work in progress.

Would be useful to have a treemap() or deepmap() function.  Like map() but
when an item is a list or dict would recurse into it.

Patch for global-local options consistency. (Arnaud Decara, 2015 Jul 22)
Is this right?

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?

Patch to use different terminal mode settings for system(). (Hayaki Saito)
Does this work for everybody?

Patch for man.vim. (SungHyun Nam, 2015 May 20)
Doesn't work completely (Dominique Orban)

Patch to add a "literal" argument to bufnr().  (Olaf Dabrunz, 2015 Aug 4)

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

Patch to add :lockjumps. (Carlo Baldassi, 2015 May 25)
OK to not block marks?

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

When two SIGWINCH arrive very quickly, the second one may be lost.
(Josh Triplett, 2015 Sep 17)

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

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)

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

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

Patch to add digits argument to round(). (Yasuhiro Matsumoto, 2015 Apr 26)

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 for ordered dict. (Ozaki Kiichi, 2015 May 7)

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

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

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

When entering and leaving the preview window autocommands are triggered, but
these may not work well.  Perhaps set a flag to indicate that the preview
window is involved? (John Otter, 2015 Oct 27)

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)

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

Patch to make extend() fail early when it might fail at some point.
(Olaf Dabrunz, 2015 May 2)  Makes extend() slower, do we still want it?
Perhaps only the checks that can be done without looping over the dict or
arguments.

Problem with transparent and matchgroup.  Issue #475

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.

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

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?

Include a plugin manager with Vim? vim-plug seems to be the best currently:
https://github.com/junegunn/vim-plug.
Also Vundle: https://github.com/gmarik/vundle
Or minpac: https://github.com/k-takata/minpac, since it leverages the builtin
package feature.
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. Or a central place that
  will work for everybody (github?  redirects from vim.org?).
  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).

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)

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?
Also see #2034.

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

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

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

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.

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.  Only helps a bit, 10000ii<Esc> is still too slow.

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.

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?

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)
Bug in try/catch: return with invalid compare throws error that isn't caught.
(ZyX, 2011 Jan 26)
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)

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 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 support 'u' in interactive substitute. (Christian Brabandt, 2012 Sep
28)  With tests: Oct 9.

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

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

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)

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

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.

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

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 add tests for if_xcmdsrv.c., Jul 8, need some more work. (Brian Burns)
New tests Jul 13.   Update Jul 17.  Discussion Jul 18.

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)

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)

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 for fnameescape()?  (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)

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)

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.

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)

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)

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)

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

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.

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

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

Wish for NetBeans commands:
    - make it possible to have 'defineAnnoType' also handle terminal colors.

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?

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?

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)

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.

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)

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

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.

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

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

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 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: Check if there are new reported defects:
https://scan.coverity.com/projects/241

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

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)

For running gvim on a 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.

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

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

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

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

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

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)

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

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

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)

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)

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)

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)

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?

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)

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

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)

Win32: Using "gvim --remote-tab-silent elŝuti.txt" doesn't work, the
multibyte character isn't passed and edits elsuti.txt.
(Raúl Núñez de Arenas Coronado, 2015 Dec 18)

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

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.

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?

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

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

":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)

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

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)

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

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)

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.

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

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.

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)

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)

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.

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.

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)

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?

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

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.

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?

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

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

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?

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.

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?

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.

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)

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

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.

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)

":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)

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)


Better plugin support (not plugin manager, see elsewhere for that):
- Avoid use of feedkeys, add eval functions where needed:
  - manipulating the Visual selection?
- Add createmark(): add a mark like mM, but return a unique ID.  Need some way
  to clean them up again...  Use a name + the script ID.
  Add createmark( , 'c') to track inserts/deletes before the column.
- 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?
- equivalent of netbeans_beval_cb().  With an autocommand?
- Add something to enable debugging when a remote message is received.


More patches:
-   Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
    Needs a few tests.
-   Add 'cscopeignorecase' option. (Liang Wenzhi, 2006 Sept 3)
-   Extra argument to strtrans() to translate special keys to their name (Eric
    Arnold, 2006 May 22)
-   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)
-   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)
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 multibyte 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?
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)
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
    (unencrypted).  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)
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.
-   Patch for redo register. (Ben Schmidt, 2007 Oct 19)
    Await response to question to make the register writable.


Better 'rightleft' or BIDI support:
- Minimal Vi with bidi support: https://github.com/aligrudi/neatvi
  By Ali Gholami Rudi, also worked on arabic.c


Spell checking:
-   List of common misspellings in English:
    https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines
    German:
    https://de.wikipedia.org/wiki/Wikipedia:Liste_von_Tippfehlern/F%C3%BCr_Maschinen
    There are other languages.
-   [s does not find missing capital at start of the line.  #10838
    Probably because the dot at the end of the previous line isn't seen.
-   When 'cursorline' is set and the first word should have SpellCap
    highlighting, redrawing the line removes it when moving the cursor away
    from the line. (#7085)  Would need to inspect the end of the previous line
    and update "capcol_lnum" and "cap_col".
-   Mixup of highlighting when there is a match and SpellBad. (ZyX, 2015 Jan 1)
-   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.
-   Add a feature to only consider two spaces after a dot to start a new
    sentence.  Don't give the capitalization error when there is one space.
-   Add a way to specify punctuation characters.  Add the superscript numbers
    by default: 0x2070, 0xb9, 0xb2, 0xb3, 0x2074 - 0x2079.
-   In popup menu: If the only problem is the case of the first character,
    don't offer "ignore" and "add to word list".
-   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.


Quickfix/Location List:
-   Window size is wrong when using quickfix window. (Lifepillar, 2018 Aug 24,
    #2999)
-   When using CTRL-W CR in the quickfix window, the jumplist in the opened
    window is cleared, to avoid going back to the list of errors buffer (would
    have two windows with it).  Can we just remove the jump list entries for
    the quickfix buffer?
-   When an item in the quickfix list has a file name that does not exist,
    behave like the item was not a match for :cnext.
-   When adding an item to a new quickfix list make ":cnext" jump to that
    item.  Make a difference being at the first item and not having used
    :cnext at all.  (Afanasiy Fet, 2017 Jan 3)
-   When opening quickfix window, disable spell checking?
-   Patch for supporting count before CR in quickfix window. (AOYAMA Shotaro,
    2007 Jan 1)
-   Patch from Herculano de Lima Einloft Neto for better formatting of the
    quickfix window (2004 dec 2)
-   Amiga: When using quickfix with the Manx compiler we only get the first 25
    errors.  How do we get the rest?
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).
7   Add a command that goes back to the position from before jumping to the
    first quickfix location.

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   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:
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.
-   Mapping with partial match not executed properly in GTK. (Ingo Karkat,
    #7082)
-   Add more testing of the GTK GUI.
    - gtk_test_widget_click() can be used to simulate a click in a widget.
-   Tests failing for "make testgui" with GTK:
    - Test_setbufvar_options()
    - Test_exit_callback_interval()
-   When adding a timer from 'balloonexpr' it won't fire, because
    g_main_context_iteration() doesn't return.  Need to trigger an event when
    the timer expires.
-   problem with 'L' in 'guioptions' changing the window width.  (Aaron
    Cornelius, 2012 Feb 6)
-   Patch to invert characters differently in GTK. (Yukihiro Nakadaira, 2013
    May 5)
-   drawing a double-width combining character over single-width characters
    doesn't look right. (Dominique Pelle, 2010 Aug 8)
-   tear-off menu does not work. (Kurt Sonnenmoser, 2010 Oct 25)
-   Patch for GTK buttons X1Mouse and X2Mouse. (Christian J. Robinson, 2010
    Aug 9)
-   When setting 'columns' in a startup script and doing ":vertical diffsplit"
    the window isn't redrawn properly, see two vertical bars.
-   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.
-   Patch to support horizontal scroll wheel in GTK. Untested. (Bjorn
    Winckler, 2010 Jun 30)


Win32 GUI known bugs:
-   Win32: tearoff menu window should have a scrollbar when it's taller than
    the screen.
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
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?
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   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).
-   When running a fast timer, the cursor no longer blinks.  Was reported:
    cursor blinks in terminal on widows with a timer. (xtal8, #2142)
-   Last message from startup doesn't show up when there is an echoerr
    command. (Cyril Slobin, 2009 Mar 13)


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


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


Win32 console:
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)


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?


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.
-   Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24)
-   Version of netbeans.c for use with MacVim. (Kazuki Sakamoto, 2010 Nov 18)
-   Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)
-   Move Carbon todo items to os_mac.txt.  Note that this version is frozen,
    try the Cocoa version.
-   After a ":vsplit" the left scrollbar doesn't appear until 'columns' is
    changed or the window is resized.
-   Patch for configure: remove arch from ruby link args. (Knezevic, 2008 Mar
    5)  Alternative: Kazuki Sakamoto, Mar 7.
-   trouble compiling with Motif, requires --disable-darwin. (Raf, 2008 Aug 1)
    Reply by Ben Schmidt.
-   Using gvim: netrw window disappears. (Nick Lo, 2006 Jun 21)


"Small" problems:
-   When using e_secure in do_one_cmd() mention the command being executed,
    otherwise it's not clear where it comes from.
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.
    Is it better than what we have in src/tee?
8   When doing Insert mode completion a mapping cannot recursively call
    edit(), because the completion information is global.  Put everything in
    an allocated structure?
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.
8   Using ":s" in a function changes the previous replacement string.  Save
    "old_sub" in save_search_patterns()?
8   Should allow multibyte characters for the delimiter: ":s+a+b+" where "+"
    is a multibyte 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   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   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)
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   '[ 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   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   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.
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)


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: 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.
-   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.
    (issue #3292)
-   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.
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)
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 multibyte characters
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.
-   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 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>"?
-   Add mappings local to a window: ":map <window> ..."  #9339
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   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.
8   Add local options for each tab page?  E.g., 'diffopt' could differ between
    tab pages.
7   Add local highlighting for each tab page?


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?
-   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.
8   Also show difference with the file when editing started?  Should show what
    can be undone. (Tom Popovich)

Folding:
    (commands still available: zI zJ zK zp zP zq zQ zV zy zY;
    secondary: zB zS zT zZ, z=)
-   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, 2016 Jul 2
-   Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)
-   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 FoldedLineNr highlighting: different highlighting for the
    line number of a closed fold. (eXerigumo Clanjor, 2013 Jul 15)
-   Patch to use 'foldnestmax' also for "marker" foldmethod. (Arnaud Lacombe,
    2011 Jan 7)
-   'foldcolumn' in modeline applied to wrong window when using a session.
    (Teemu Likonen, March 19)
-   With foldmethod=syntax and nofoldenable comment highlighting isn't
    removed.  (Marcin Szewczyk, 2017 Apr 26)
-   The ":move" command does not honor closed folds. (Ryan Lue, #2351)
-   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 '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)
-   Add ":nofold".  Range will apply without expanding to closed fold.
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.  Or use a regexp
    item, so that it can be used in any pattern.
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)

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   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 multibyte characters.
8   'infercase' doesn't work with multibyte 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 multibyte
    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}_
-   Make 'breakat' accept multibyte characters.  Problem: can't use a lookup
    table anymore (breakat_flags[]).
    Simplistic solution: when 'formatoptions' contains "m" also break a line
    at a multibyte character >= 0x100.
    Making breakat support multibyte characters (Yasuhiro Matsumoto, #6598)
    Scroll doesn't work correctly, why?
-   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 ":amap" command?
-   When breaking a line, take properties of multibyte 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...
-   Problem with 'langmap' being used on the rhs of a mapping. (Nikolai
    Weibull, 2008 May 14).
    Possibly related problem: Alexey Muranov, 2015 Apr 2


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:
    Long term goal: faster, better, etc.  Options:
    - use treesitter, NeoVim uses it - Many people don't like it.
	After changes requires rebuilding the library.
    - use TextMate, vscode uses it.  #9087 - Other people don't like it.
	    https://github.com/icedman/vim-textmate
      Vscode is asked to switch to treesitter:
      https://github.com/microsoft/vscode/issues/50140
    - sublime grammar?
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', they should use "syn iskeyword".
    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.
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.
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.
-   Syntax highlight for a region does not work with a "nextgroup" if the
    start match is empty. #8449
-   The :syntax cchar value can only be a single character.  It would be
    useful to support combining characters. (Charles Campbell)  Also #4687
-   Syntax highlighting slow (hangs) in SASS file. (Niek Bosch, 2013 Aug 21)
-   Several syntax file match "^\s*" which may get underlined if that's in the
    highlight group.  Add a "\zs" after it?
-   patch to add "combine" flag to  syntax commands. (so8res, 2012 Dec 6)
    Patch to add "combine" to :syntax, combines highlight attributes. (Nate
    Soares, 2012 Dec 3)
-   Syntax update problem in one buffer opened in two windows, bottom window
    is not correctly updated. (Paul Harris, 2012 Feb 27)
-   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)
-   Using "syn sync breaklines=2" works for when text is changed, but not when
    scrolling or redrawing.  Should start search for syntax patterns above the
    first drawn line. (#8103)
-   Syntax priority problem. (Charles Campbell, 2011 Sep 15)
-   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)
-   Syntax HL error caused by "containedin". (Peter Hodge, 2006 Oct 6)
-   Open two windows on the same C code, delete a ")" in one window, resulting
    in highlighted "{" in that window, not in the other.
-   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)


Vim 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)?
-   range for ":exec", pass it on to the executed command.  (Webb)
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   Have a prefix for a function to make it unique.  When using packages it
    can be the plugin name.
    Perhaps also have a way to remove everything that the package added?
    including autocommands.
7   Pre-parse or compile Vim scripts into a bytecode, like :def functions.
    Possibilities:
    1. Put the bytecode with the original script, with an ":if
       has('bytecode-1234')" around it, so that it's only used with a Vim that
       supports the version.  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, non-writable directory, etc.
    3. Use a cache directory for each user.  Disadvantage: cache lookup may
       cost more time than bytecode wins.
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".
	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)
	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.
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   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   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
    - 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().
-   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.ac 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.
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:
-   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.

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:
8   libcall() can keep the library around instead of always calling dlclose().
    (Jason Felice, 2018 Mar 20)
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:
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   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   Add WinNewPre - before creating a new window. #10635
9   When triggering WinNew provide the window ID somehow.  #10633
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, ...
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
    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")
    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.
-   Buffer autocommands are a bit inconsistent.  Add a separate set of
    autocommands for the buffer lifecycle:
        BufIsCreated  (after buffer ID exists)
        BufIsLoaded   (after buffer ID has content)
        BufIsUnloaded (after buffer ID no longer has)
        BufIsWiped    (after buffer ID was wiped)
        BufIsRenamed  (after buffer ID gets another name)
    The buffer list and windows are locked, no changes possible


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:
-   Is it possible to keep the complete menu open when calling complete()?
    (Prabir Shrestha, 2017 May 19, #1713)
-   When 'completeopt' has "noselect" does not insert a newline.
    (Lifepillar, 2017 Apr 23, #1653)
-   Can 'completeopt' be made buffer-local? (#5487)
-   When complete() first argument is before where insert started and
    'backspace' is Vi compatible, the completion fails.
    (Hirohito Higashi, 2015 Feb 19)
-   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.
-   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.
-   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.
-   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:
-   Feature request: Complete members of a dictionary.
    (Luc Hermitte, 2017 Jan 4, #1350)
-   Completion of ":e" is ":earlier", should be ":edit".  Complete to the
    matching command instead of doing this alphabetically. (Mikel Jorgensen)
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.
-   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)
-   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?
-   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)
-   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.
8   Command line completion: buffers "foo.txt" and "../b/foo.txt", completing
    ":buf foo<Tab>" doesn't find the second one. (George V. Reilly)
8   Add more command line completion for :syntax.
8   Add more command line completion for :highlight.
-   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.
-   If the variable "g:x#y#z" exists completion after ":echo g:x#" doesn't
    work.


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 result 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.
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 multibyte
    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 multibyte ones.
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   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.
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").
-   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.
7   Add <0x8f> (hex), <0o33> (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:
-   Wrong scrolling when using incsearch.  Patch by Christian Brabandt, 2014
    Dec 4.  Is this a good solution?
-   Temporarily open folds to show where the search ends up.  Restore the
    folds when going to another line.
    Patch to open folds for 'incsearch'. (Christian Brabandt, 2015 Jan 6)
-   Bug with 'incsearch' going to wrong line. (Wolfram Kresse, 2009 Aug 17)
    Only with "vim -u NONE".
-   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.
-   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.
9   incsearch is incorrect for "/that/<Return>/this/;//" (last search pattern
    isn't updated).


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?
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 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 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".
-   Searching for \%'> does not find anything when using line Visual
    selection.  Probably because it's using MAXCOL.  #8238
-   Regexp to search for duplicate lines does not work correctly:
    /\(^.*\n\)\1  (Chris Morgan, #6239)
-   Problem with upwards search on Windows (works OK on Linux). (Brett
    Stahlman, 2014 Jun 8)
-   Searching mixed with Visual mode doesn't redraw properly. (James Vega,
    2010 Nov 22)
-   Searching for composing char works, but not when inside []. (ZyX, Benjamin
    R. Haskell, 2010 Aug 24)
-   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)


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   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?
-   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??
-   MS-Windows: when writing undo file the infostreams are copied in
    mch_copy_file_attribute(), that seems unnecessary. (#7925) Add a flag to
    only copy attributes?
-   undo result wrong: Masato Nishihata, #4798
-   After recovering from a swap file the undofile should not be used, it
    causes corruption.  (#6631)
-   When the computer crashes while writing the undofile, the contents may be
    lost.  Write to a temp file, fsync and rename. (#8879)
-   Undo puts cursor in wrong line after "cG<Esc>" undo.
-   Undo history wrong when ":next file" re-uses a buffer. (#5426) ex_next()
    should pass flag to do_argfile(), then to do_ecmd().  Is there a test for
    this?
-   Add buffer argument to undotree(). (#4001)
-   Undo problem: "g-" doesn't go back, gets stuck. (Björn Linse, 2016 Jul 18)
-   Undo message is not always properly displayed.  Patch by Ken Takata, 2013
    oct 3.  Doesn't work properly according to Yukihiro Nakadaira.
    Also see #1635.
-   When using ":diffput" through a mapping, undo in the target buffer isn't
    synced.  (Ryan Carney, 2016 Sep 14)
-   The undo file name can get too long. (Issue 346)
    For the path use a hash instead of dir%dir%dir%name  hash%name.
-   Patch to add ":undorecover", get as much text out of the undo file as
    possible. (Christian Brabandt, 2014 Mar 12, update Aug 22)
-   Patch to support :undo absolute jump to file save number. (Christian
    Brabandt, 2010 Nov 5)
-   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.
-   When using 'cryptmethod' xchaha20 the undo file is not encrypted.
    Need to handle extra bytes.


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.
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.
-   When using ":bwipe!" also get rid of references to be buffer, e.g. in the
    jumplist and alternate file.
-   ":bnext" in a help buffer is supposed to go to the next help buffer, but
    it goes to any buffer, and then :bnext skips help buffers, since they are
    unlisted. (#4478)
-   :buffer completion does not escape "+" properly and results in a regexp
    error.  (#5467)
-   Problem with two buffers with the same name a/b, if it didn't exist before
    and is created outside of Vim. (dskloetg, 2018 Jul 16, #3219)
-   Add an option with file patterns, to be used when unloading a buffer: If
    there is a match, remove entries for the buffer from marks, jumplist, etc.
    To be used for git temp files.


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 'umaskbackup' 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.
-   When editing a file with ":edit" the output of :swapname is relative,
    while editing it with "vim file" it is absolute. (#355) Which one should
    it be?
-   When recovering a file, put the swap file name in b:recovered_swapfile.
    Then a command can delete it.
-   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.
-   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?
-   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.
-   In the swapfile dialog, add a H(elp) option that gives more info about
    what each choice does.  Similar to  ":help swap-exists-choices"


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.
-   Add the debug command line history to viminfo.
-   Using "wviminfo /tmp/viminfo" does not store file marks that Vim knows
    about, it only works when merging with an existing file.  (Shougo, 2017
    Jun 19, #1781)
-   Writing nested List and Dict in viminfo gives error message and can't be
    read back. (Yukihiro Nakadaira, 2010 Nov 13)
-   When a register contains illegal bytes, writing viminfo in utf-8 and
    reading it back doesn't result in utf-8. (Devin Bayer)
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.
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 the files have to be deleted.


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 an option setting to ask the user if the modelines are to be executed
    or not.  Same for .exrc in local dir.


Sessions:
-   Session file contains absolute paths when "curdir" is removed form
    'sessionoptions', making it impossible to have a session with a relative
    path.  (#4450)
-   Session file only contains local option values for buffers that are in a
    window, not other buffers. (#7532)
-   Script generated by :mksession does not work well if there are windows
    with modified buffers:
      change "silent only" into "silent only!"
      change "edit fname" of first buffer to "hide edit fname"
      skip "badd fname" if "fname" is already in the buffer list
      remove remark about unloading buffers from documentation
-   When session file has name in argument list but the buffer was deleted,
    the buffer is not deleted when using the session file. (#1393) Should add
    the buffer in hidden state.
-   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)
-   Setting the spell file in a session only reads the local additions, not
    the normal spell file. (Enno Nagel, 2014 Mar 29)
-   Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
    (Felix Kater, 2009 Mar 3)
-   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/...".
-   Session file creation: 'autochdir' causes trouble.  Keep it off until
    after loading all files.
-   Session file generates error upon loading, cause by --remote-silent-tab.
    (7tommm (ytommm) 2010 Nov 24)
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)


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)


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 changed 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.
-   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)?
-   In Select mode the deleted text always goes into the unnamed register.
    Use CTRL-R to specify the register to use. (#9531)
-   When "+ register is set then "" points to it.  If another Vim grabs the "+
    register, then "" doesn't contain anything.  Make it still follow "+.
    (#6435)
-   Pasting a register in Visual mode cannot be repeated. (Mahmoud Al-Qudsi,
    2018 Apr 26, #2849)
-   Patch to add option that tells whether small deletes go into the numbered
    registers. (Aryeh Leib Taurog, 2013 Nov 18)
-   With "unamedplus" in 'clipboard' pasting in Visual mode causes error for
    empty register. (Michael Seiwald, 2011 Jun 28)  I can't reproduce it.
-   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.
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.?
    Also do this for the small delete register "-.


Debug mode:
8   Add breakpoints for setting an option
8   Add breakpoints for assigning to a variable.
7   Store the history from debug mode in viminfo.
7   Make the debug mode history available with histget() et al.
-   In debug mode, using CTRL-R = to evaluate a function causes stepping
    through the function. (Hari Krishna Dara, 2006 Jun 28)


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   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   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.
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 multibyte 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.
-   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 a 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 a 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.
-   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?
-   Support mapping for replace mode and "r" command (Vi doesn't do this)?
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.ac 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).
-   Support for underlining (underscore-BS-char), bold (char-BS-char) and other
    standout modes switched on/off with , 'overstrike' option (Reiter).
-   Add vertical mode (Paul Jury, Demirel): "5vdw" deletes a word in five
    lines, "3vitextESC" will insert "text" in three lines, etc..
4   Recognize l, #, p as 'flags' to EX commands:
    :g/RE/#l shall print lines with line numbers and in list format.
    :g/RE/dp shall print lines that are deleted.
    POSIX: Commands where flags shall apply to all lines written: list,
    number, open, print, substitute, visual, &, z.  For other commands, flags
    shall apply to the current line after the command completes.  Examples:
    :7,10j #l Join the lines 7-10 and print the result in list
-   Allow two or more users to edit the same file at the same time.  Changes
    are reflected in each Vim immediately.  Could work with local files but
    also over the internet.  See http://www.codingmonkeys.de/subethaedit/.

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