Sven [email protected] ©1995-2001

Last update: Tue Oct 02 17:00:00 MEST 2001

VIM - Wishlist

VIM is a great editor, but no program is perfect for everyone. VIM does not have everything, of course. A lot of things have been proposed so far and many are on the "todo list".

Please note: The "todo list" is maintained by the author and ships with the distribution of Vim (filename "todo"). It is not the same as this "Vim Wishlist".

So send me your wishes - I will try to convince the developers that they need to be implemented. But before sending your wishes please check out this page and the todo list first to avoid "noise". Thanks!

Sven [email protected]


Wishes Wishes Wishes

Here they are - a lot of wishes for VIM!
Non-RegExp Search Command
Add a search command which takes all characters literally, ie without any metacharacters as with regular expressions.
010314: Erwin Waterlander [email protected]

Paragraphs and Sections - optional definition
Add options to describe the delimiters of paragraphs and sections.
David Witten [email protected] 000717
000718: It's already in the todo list:
:help todo
/redef
-  Be able to redefine where a sentence stops.  Use a regexp pattern?
-  Be able to redefine where a paragraph starts.
   For "[[" where the '{' is not in column 1.

Perl RegEx
Add support for Perl regular expressions (eg backreferences). Maybe add PCRE (Perl Compatible RE).
Warren Young [email protected] [000601]

support for "crypto editing"
"Add a memory only mode to vim, i.e. a mode where you don't write to a file at ALL. instead, vim allocates some RAM (or even mlockall's it) and then treats that as the file buffer. Then on exit, it writes this out to a fifo, and that's it. The data NEVER touches disk. Reasoning: CRYPTO."
Justin Hahn [email protected] [000328]

lisp option
Fix the behaviour of the option "lisp".
Matthis Buelow [email protected] says this is broken.

Display cursor within offsets
Option
'cursoroffset' 'co'     numberlist  (default "0,0")
			local to buffer
        Number of top/bottom offset lines for the cursor.
        This keeps the cursor from getting to near the window borders
        and enforces a scrolling when moving into the scroll offset,
        thereby keeping some "context" of the text for the user.
        The value "T,B" will prevent the cursor from being displayed
        within the T top lines and B bottom lines of the current window.
        If T+B exceeds the number of lines in the current window
        then the cursor will always be displayed on the middle line.
        However, the start and end of the buffer is always shown.
Michael Saunders [email protected] and Sven Guckes [000222]

search across buffers
Add an option to allow searches to scan all open buffers. (Some people do not have a decent "grep" on the machines, apparaently.)
Micha [email protected] [000130]

GUI: textwidth bar
Show the current textwidth with a vertical bar within the GUI window.
Devin Weaver [email protected] 991118

support for template editing
Add support for editing of "templates". This allow editing of parts of a given text only ("fields"). You should be able to chose from a list of given values ("menu"), or type in answers. A restriction to the character set may be given by regular expressions.
Example:
	Your Name:  [Mr|Mrs]  [\w\{40\}]
This allows to chose from "Mr" and "Mrs" and to type in a name using "words" up to a length of 40 characters.
Herve Foucher [email protected] 990802

cursor on tabs
Add an option which places the cursor on tabs onto the *first* column rather than the last column of the expansion.
Suggested by: Div Byzero on comp.editors [990726]
Vile has this option - "alt-tabpos".

coloring current line
Colorize the current line of editing with a lighter background, so you can see that line and your editing more easily.
Suggested by: Michele Zaina [email protected] 990706

command line - expand color settings
Problem: When you want to change the color settings for a syntax group then you have to use a command to print out the current values and type them in again to change them.
Suggestion: Expansion of the value on the command line would be a lot better.
Example: Enter :hi GroupName TAB adds the current values to the command line.
Suggested by: Sven Guckes [email protected] [990712]

startup - specification of a "filelist"
Add additional startup parameter to specify a file with filenames to edit.
Problem: On WindowsNT you always run into problems when using filenames which include spaces. Passing these filenames to Vim via the shell usually results in the names being split up, eg "foo(space)bar" results in two filenames "foo" and "bar". You could get around this problem if you could specify the filenames in another file and have this file be processed by Vim directly - instead of having the names broken by the shell.
Suggested by: Ed Peschko [email protected] [990624]

X and GUI - startup with "-display host:0"
Add the startup parameter "display" to allow specification of a display on a (remote) host.
Suggested by: Nathan Clemons [email protected] [990528]

:source!
Add the command ":source!" which does not complain if "file" does not exist. This should avoid the error message when the file does not exist. Makes it easier to write setup files as you do not need a function for testing the existence of the file.
Suggested by: Sven Guckes [email protected] [990312]

Select and move statusline
The problem with resizing windows is that there are commands to change the size the current window by N lines - but dragging the statusline around with the mouse is easier. So I suggest:
Add a command that allows to select the statusline of the current window and allows to move it up or down. Maybe add another command to allow selection of the statusline of the above window.
Suggested by: Sven Guckes [email protected] [990311]

Extra Buffer - Grep
Built-in grep command popping window with list of found files.
Suggested by: Ilya Tsindlekht [email protected] [990306]

More Magic
"magic characters in regexp for switching between case-sensitive and case-insensitive mode"
Suggested by: Ilya Tsindlekht [email protected] [990306]

Textmode Menus
Show a line with menus at the top and allow to acess them with function keys.
"Watcom GUI editor is called VIW, apparently it's GUI version of Watcom VI with modeless option turned on by default."
Suggested by: Ilya Tsindlekht [email protected] [990306] and Sven Guckes [email protected] [990308]

Textmode Menus
Show a line with menus at the top and allow to acess them with function keys.
Suggested by: Ilya Tsindlekht [email protected] [990306] and Sven Guckes [email protected] [990308]

Windows...
"overlapping resizeable windows"
Suggested by: Ilya Tsindlekht [email protected] [990306]

Option Status Line
Show an extra line with the value of some options. Example:
ai aw nocin nocp digraph et nopaste tw=76 nowrap vb
Optionally show unset boolean options in reverse.
Suggested by: Sven Guckes [email protected] [990308]

editdir buffer
Add the command ":editdir" which opens a directory in a special buffer and adds some commands to edit files, create and delete files.
With "vertical split" of windows this should allow something like "midnight commander" to move files between directories.
Suggested by: Daniel Goujot [email protected] and Sven Guckes [email protected] [990302]

:subst extended changes in SED style
Allow to make changes for the Nth match and beyond:
	:s/search/replace/N 	replace Nth match
	:s/search/replace/Ng	replace Nth match and beyond
Inspired by: GNU sed-3.02
Suggested by: Sven Guckes [email protected] [990222]

support for debuggers (gdb and jdb)
"Integration with gdb and jdb debuggers so that source can be easily stepped through from within the vim editor."
Suggested by: John Petersen [email protected] [990216]

:version output from variable
Add a internal variable (say, "VIMVERSION") which carries the ":version" data. This allows insertion of this text easily and *fast* (much faster than with ":r!vim --version").
Suggested by: Sven Guckes [email protected] [990208]

prompt-write=always
Add an option that makes Vim prompt for overwriting a file *always*.
Suggested by: Robert Webb [email protected] [990115]

:right justification - work on part of lines
The command ":right" works on *complete* lines only. But it would be nice if it would work on parts of lines, too.
Example: Assume that I have visually selected the text from "bar" to "di", both inclusive:
        foo [bar baz              |
        lah di] dah               |
                      textwidth---^
Then ":ri" should produce this:

        foo                bar baz|
                        lah di dah|
                      textwidth---^
Suggested by: Jos van Riswick [email protected] and Sven Guckes [email protected] [990105]

Support for ActiveX
Michael wants to use vim with MSVC++. For this, vim must be an "ActiveX component".
Suggested by: Michael O'Brien [email protected] [981124]

GUI - visual selection independent of cursor
Allow selection of text with the mouse but *without* changing the current position of the cursor.
Suggested by: Jeffrey George [email protected] and others 981106

GUI - menus with buffer list and "favourites"
Add menus with filenames: One menu showing the current list of buffers, one showing a list of recently accessed files, and one showing a list of "favourite files".
"The Windows standard for programs that operate on files (e.g., Word, Excel) is to show the last 4 most recently accessed file names at the bottom of the File pull-down menu. Clicking on one of the file names loads that file."
The vi clone "Lemmy" has a menu for "recently accessed files".
Suggested by: Richard Anderson [email protected] [981106]

filename completion - specify path
Allow definition of a "path" to look for filenames to be completed.

buffer list - LIFO
Maintain the buffer list as a LIFO structure (last in - first out). Whenever you enter a buffer it will be pushed on to of the list; optionally deleting a previous entry. Add commands to "push" and "pop" entries from the stack.
This allows to "go back" to previously accessed buffers in a "last accessed" fashion.
Suggested by: Ramesh Raman [email protected] [980908]

mouse on Linux console
Add support for the mouse on Lunix console.
Suggested by: Juergen Zeller [email protected] [980819]
Patches submitted by Ilya Tsindlekht [email protected] to the author and the mailing list in December 1998.

fileformat - new format "cpm"
Add fileformat "cpm" which is basically the same as DOS but adds the character ^Z (control-z) to the end of files.
Suggested by: John Spetz [email protected]

swapfiles - "swapfile" - local option for use of swapfile
The option "swapsync" allows to define the use of a swapfile. However, it is a *global* option for all buffers. Therefore you cannot turn of its use for some buffers. but this is very much desired.
Suggestion: Allow use of swapfiles locally:
'swapfile' 'sf'         boolean (default on)    local
        "set swapfile" creates a swapfile for the current buffer.
        [according tho these rules]
        "set noswapfile" closes the swapfile for the current buffer.
        [sync data?]
        Delete the current swapfile with command [example]
Suggested by: Jeff Youngstrom [email protected] and Sven Guckes [email protected] [980710]

command :q - close all help windows
Add an option to allow ":quit" on *one* help window to close *all* help windows.
Suggested by: Ralf Schandl [email protected] [980708]

command :bd - allow globbing
Expand the parameter to a list of files.
Example: ":bd *.c" deleted all buffers which match on all filenames "*.c".
Suggested by: Ron Aaron [email protected] [980616]

installation - option "install" for private colormap
DESCRIPTION
Suggested by: NAME EMAIL [DATE]

syntax coloring - color for line numbers
With ":set number" you can see the line numbers on the display - but you cannot assign a color to them. An option for this is desired.
Suggested by: Steven A. McCluney [email protected] [980330]

text object "comment"
Add "comments" as another text objects, to allow easy selection within source code.
Suggested object names: "ic" for "inner comment" (without surrounding comment delimiters) and "ac" for "all comment" (including the surrounding comment delimiters).
Examples: "dac" will delete the current comment while "yic" will copy the comment itself.
It should also be possible to define comments, so you can adapt this to the current language, eg HTML or LaTeX.
Suggested by: Sven Guckes [email protected] [980612]

syntax coloring - show lines with marks on them
Allow to colorize lines which have a "mark" on them (see ":help marks").
Problem: How to color lines with multiple marks?
Suggested by: Vadim Zeitlin [email protected] [980507]
   41     I would very much like to see a special mark
   42 'a  at the side together with the line numbers.
   43     That way you would not even need any color
   44 'b  which might get in the way of syntax coloring.
Suggested by: Sven Guckes [email protected] [001017]

display - one cursor for all windows to one buffer
Use one cursor for all windows that show a buffer. Moving it in one window will also move it in all other windows if it is visible therein. Sometimes this is more intuitive than having one cursor per window.
Inspired by Emacs' "follow mode".
Suggested by: Neil Zanella [email protected] [980505]

Installation - Secure Shell
Include a define that would trap out shell escapes on compile so that vim can be used from a restricted menu shell. Unfortunately this will lose the feature of using external commands (aka "filtering").
Suggested by: Anthony Halsell [email protected] [980424]

Virtual Editing
Allow jumps to non existant characters, ie jumps to locations on the screen which are after the end of a line. This allows moving around the screen without losing the current column even if the cursor can not be associated with a character in the current buffer. Changes to such positions should fill the non-existant characters with whitespace (ie, tabs using tabstops might should be optional).
Virtual editing usually helps beginners of editing as well as experienced people. Although it also adds some problems with a lot of commands. Anyway, this might easily become a top wish for Vim, too.
Virtual editing requires a lot of code to change as all jump commands need to be redefined. For example, what shall the command 'w' do when the cursor is in "virtual space"? It might be nice to still be able to use it as a jump, but what shall Vim do when it is used in conjunction with a deletion command, such as "dw"? This becomes even more tricky when you move the cursor within visual mode.
Virtual Editing and "marks": Should it be allowed to set a mark on a virtual space? I think the answer is "yes" as marks are kept even when the character of a mark gets deleted (the mark is kept as long as the line exists). So why shouldn't a mark be set in virtual space? You might argue that it is a good idea to set the mark to the last existing character within the line, though.
Note: This was inspired by the virtual editing with the editor BRIEF.
Suggested by: Sven Guckes [email protected] [980427] (who really loved this feature of BRIEF) and requested by Vadim Zeitlin [email protected] [980427]

option backupext -> backupfilename
So far you can only define the extension of a backup file - but you cannot *prepend* any characters, such as the '.' or '#' to make the backup file "hidden" on Unix. Therefore an option to set the "backupfilename" is desired. The option should allow the use of |filename-modifiers|.
Suggested by: Noble Thomas [email protected] [980424]

new register '<' - recent input
vile has the register < that holds the recent input. Such a register would be a good thing for vim, too, as you could check what you have typed. This helps both understanding Vim and debugging it.
Suggested by: Sven Guckes [email protected] [980420]

option "title" - "Thanks for flying Vim!"
With ":set title" Vim will change the title of the surrounding window to "Vim - filename" whenever you edit a new file or switch to another buffer. Upon exit Vim will change the title to the message "Thanks for flying Vim!".
Why does Vim do this upon exit? Well, it's a fun feature. So there.
The feature of displaying the current filename in the window title bar *is* nice. However, many people do not want the final message. There should be a way to turn this off.
Suggested by: Gerald Oskoboiny [email protected] [980417] and many other people
On 980422 Bram agreed to make this an extra option ("titlerestored").

RegExpr - Characters as ASCII numbers
Problem: You cannot describe characters in regexpr sets as ascii numbers. If this was possible then it would be easier to do some things.
Examples: search for 8bit characters /[\0x128-\0x255]
Suggested by: Sven Guckes [email protected] [980304]

search - show match in middle line of window
Problem: When a search command ('/?#*nN') finds the next match within the current window then the cursor is simply moved onto that line. But sometimes it is better to show the matching line always at the same line of the current window, eg at the top, middle, or last line.
Suggestion: Add an option which allows to position the matched line on the current window.
	value		show matching line at..
	H (home)	first  line of window
	M (middle)	middle line of window
	L (last)	last   line of window
	.		current line of cursor
Suggested by: Sven Guckes [email protected] and Stan Brown [email protected] [980304]
Workaround: use autocomamnd on event "SearchPost":
:au SearchPost * :normal zz
This event is not available yet - but on the todo list. [980915]

:join - adding spaces at end of sentence
A ":join" adds a space after a dot if it ends a line, thus resulting in two spaces after the period on the joined line. [The idea is that the dot that ends a line is probably the period of a sentence. Adding two spaces shall make the text more readable.]
Example:
	text:	foo.
		bar
	command: :j
	result:	foo.  bar
Problem: This works only for the dot character - but not for other characters which *could* end a sentence, such as ":!?".
Suggestion: Add an string option that allows to define the set of characters for which an additional space shall be added with a ":join". This would also allow to turn this behaviour off completely, thus allowing for consitency of a ":join" command.
Suggested by: Sven Guckes [email protected] [970915,980304]

:join - remove quote
Situation: Two consequtive lines with the same quote prefix, cursor on first line.
Problem: The command ":join" does not remove the quote prefix for the second line.
Example: text: &gt; &gt; foo &gt; &gt; bar command :join result &gt; &gt; foo &gt; &gt; bar
Workaround: Select both lines visually and use text formatting with "gq".
Suggestion: Add option 'j' to "formatoptions" to allow/disallow this. Bram said it's a good idea and he'll add a remark to the todo list.
Suggested by: Sven Guckes [email protected] [970915,980304]

N^ vs N$
Repeting the jump '^' does not change the position. However, repeating '$' will move down N-1 lines. This is inconsistent.
Suggestion: Make N$ jump to the end of line and *not* leave the current line. Use N- and N+ to move between lines instead.
Suggested by: Sven Guckes [email protected] [970717,980304]

:ua - :update all
	*:ua* *:uall*
	Write all modified buffers to file.
	Unmodified buffers are not written.
	{not in Vi}
Suggested by: Markus Klein [email protected] [980302]

file locking
Vim-5 does not "lock" edited files - yet.
Add option "filelock" which will "lock" edited files. (nvi does this, it seems).
Problems: File locking does not exist for every OS - thus it can be a Unix feature for now only. Also, a locked file needs to kept "open"; as there is a limit to this number every locked file will reduce the number of files which can still be opened. Tricky!
Suggested by: Several people [980225]

display - show mode with cursor and color
Vim shows the current mode when you ":set showmode". But when you are on the command line then the cursor is on the command line, too, so you cannot see which buffer/window the command will be applied to.
Show the current window by coloring the status bar of the current window or by changing the background color.
For GUI version (inspired by elvis): Show the current mode by changing the shape of the cursor:
        mode       cursor shape
        insert     block
        command    vertical bar
        replace    underscore
Problem: xterm and Linux console cannot change the cursor shape.
Suggested by: Anthony Campbell [email protected] [980222]

:wedit filename
Write current file and edit filename.
Workaround: ":set autowrite" and ":n filename".
Patch by: Scott Bigham [email protected] [980224]
URL: http://www.cs.duke.edu/~dsb/vim/wedit.diff

Command History Editing
Add a command to delete an entry from the command line history. This allows to remove an erroneous entry.
Suggested by: John L. Spetz [email protected] [980202]

DOS/Windows - rebound to calling window
Situation: You call Vim from a window ("W"), and after exiting Vim you want "W" to be the active window again.
Suggestion: Make Vim rebound" to window "W" after exit.
Problem: Isn't this something the OS or the window manager should provide as a feature?
Suggested by: Peter Jay Salzman [email protected] [971226]

auto-unload unmodified buffers
When memory gets low let Vim unload unmodified buffers automatically. This should be optional, of course.
Suggested by: Ron Aaron [email protected] [971215]

function to get current hostname
Problem: Some settings may depend on the host you are using - but there is no function to get that hostname.
Suggested by: Ron Aaron [email protected] [971215]
Patch: [email protected] [971216]

angle notation - SP
Let <SP> expand to a "space". This way you have a representation of the space character that is non-space, so you can add it to mappings which should not break with text formatting.
Suggested by: Sven Guckes [email protected] [971215]

Crypting
Vi has the command ":X" to encrypt the current buffer and the startup option "-C" to force all inout files to be regarded as encrypted files. Vim does not have the ":X" command and uses "-C" for something else.
Suggestions: Add command ":X" to encrypt the current buffer. Add a buffer flag "[x]" to show that the contents of the buffer is encrypted.
Problems: The crypt function is not available on all systems. Also, crypt(1) has distribution restrictions. Should Vim therefore use an internal crypt function? Should Vim's crypt be compatible with other vi clones' crypt (eg vile)? Maybe use Crack5?
Suggested by: Ed Ralston [email protected] [971211]

new command "gF" - get Filename under cursor
Fact: The command "gf" will edit the filename under the cursor, but refuses to do so if the file cannot be found. That's fair enough and is actually a "feature".
Problem: There is now way to "get" the filename under the cursor. If there was then you could start editing this file with ":edit ^R"".
Solution: Add command "gF" to "get the current Filename" to the (default) register.
These ideas by Otavio Exel [email protected]:
	map SaveToFloppy gF:!cp " /mnt/floppy
	map ShowDelta    gF:!rcsdiff " | less
Otavio suggested "yF" for "yank Filename" - but as 'F' is a valid jump command it cannot be used. Noted by Thomas Koehler [email protected] [980206].
Suggested by: Sven Guckes [email protected] [971203,980206]

word completion - complete from other buffers
Add an option that allows word completion using the contents of the other buffers.
Suggested by: Michael Natkin ([email protected]) [971127]

new visual command - "[=text]"
Add the visual command "[=text]" to evaluate the following text as an expression, and push the resulting text onto the typeahead buffer.
This allows to do delete N lines with the command "[=N]dd" and to insert the value of the register 'a' with "^O[=a]".
You could also use the ?: operator to execute statements conditionally, as in [=modified?":w^M"].
Suggested by: Steve Kirkendall [971114]

ex command aliasing
Allow aliasing of commands, eg
:alias :which :!which
This example shows how to make use of an external command.
Steve Kirkendall says that elvis-2.1g will have this.
Suggested by: Sven Guckes [email protected] [971113]

add utility "bed"
Add the small utility "bed" as an additional "binary editor" to the distribution of vim. See the page about bed.
Suggested by: Sven Guckes [email protected] [971111]

text formatting - right *and* left aligning text
Add command ":pad" to align text between two columns.
	:[range]pad [column_left] [column_right]
		Align the text in [range] between columns [column_left]
		and [column_right].  Fill with spaces where appropriate.
Emacs calls it "text region fill". However, "fill" with *roff commands means "put as much text onto each line as possible". That's why "pad" seems much better.
Suggested by: Ilya Beloozerov [email protected] [971104,971114]

Apply "ignorecase" to command ":il"
Ignore the case for matches done with ":il" when "ignorecase" is set.
Suggested by: Don Rudolph [email protected] [971104]

Support for MS "mouse wheel"
Add support for the MS "mouse wheel" to steer around.
Suggested by: Peter Jay Salzman [email protected] [971022]

Allow ASCII values for letters in commands and mappings
Allow "\xHH" to describe a characters by its hex value. Then you can use the set of "high bit characters" with "[\x80-\xFF]".
Using "\nnn" to give the decimal number of a character is not a good idea as it overloads the group identifiers "\n" in regular expressions. The form "<NNN>" is not Vi compatible inside a range, but could be yet another "Vi improvement".
Examples: syn match Special "[&lt;128&gt;-&lt;255&gt;]\+"
Suggested by: Sven Guckes [email protected] [971021]

Support for SUN Keyboards Function Keys
Add support for SUN keyboards function keys (Cut/Copy/Paste/Undo/Find) and add key names (eg "<SunCopy>"), of course with default mappings: :vmap <suncopy> "<clipboard>y :vmap <sunpaste> "<clipboard>p :vmap <suncut> "<clipboard>x
Suggested by: James Ko [email protected] [971017]

X support for CUT_BUFFER and CLIPBOARD
"Full support for X Windows CUT_BUFFER[0-9] and CLIPBOARD by means of say registers and/or naming for keyboard mappings. As far as I know, current text selection only goes to the primary CUT_BUFFER. Some programs, especially those 'tools' in Sun OpenWindows environment, use the CLIPBOARD, so cutting and pasting between them is difficult."
Suggested by: James Ko [email protected] [971017]

directory history with stack and select command
Keep a stack of directories, add a command to view the list and add commands to select the previously used directory as well an arbitrary entry from the list.
Suggested by: Raoul Beauduin [email protected] [971017]

configuration - option "autosave"
				 *'autosave'* *'as'* *'noautosave'* *'noas'*
'autosave' 'aw'	number	(default 0)
			local
	Automatically write the current buffer to file
	after N seconds after the last change has been made
	and when |modified| is still set.
	Default: 0 = do not autosave the buffer.
Example: :set autosave=600 makes Vim save the current buffer after 300 seconds (5 minutes).
Suggested by: Raoul Beauduin [email protected] [971015]

command line expansion like tcsh's "autolist"
"This is sort of a combination between CTRL-L and CTRL-D in vim. First it completes as far as it can (like CTRL-L), then if that does not find a unique match it lists all possible matches (like CTRL-D). If I map TAB to C-LC-D, vim will list the contents of a directory if it's a unique match (pretty annoying). I think I figured out how to do this a long time ago, but I lost my .vimrc."
Suggested by: Bruce A. Templeton [email protected] [971011]

display status bar - current C function
For C source files - display the name of the current C function.
Steve Kirkendall: "I added something like this to elvis 2.1f-alpha. It is driven off the "tags" file. This has the benefit that it inherently supports any language that ctags supports. However, when loading a large source file the editor may need to perform hundreds of tag searches, which can be slow. // Once loaded, however, it is very fast. Elvis stores a list of the found tags' positions, so it just needs to scan through the list for the nearest tag which is defined at-or-above the cursor position, and display its name."
Suggested by: Bruce A. Templeton [email protected] [971011]

tetris window
Add command ":tetris" that opens a window (to full size) and allows to have a game of tetris. Highscore table would be a plus. Configurable at compile time, too.
This is just to show that it *is* possible. ;-)
Suggested by: Sven Guckes [email protected] [971010]

swapfile - follow symlinks and create swapfile for target only
When editing a file which is a symlink, Vim creates a swapfile with the name of the symlink. This creates a problem as the original file (target of the symlink) may already have a swapfile from a previous editing session. This especially creates a problem with multiple symlinks.
The suggested solution is: Always check whether the filename is a symlink, and if so, follow the link(s) to the target; then create the swapfile using the name of the target file.
Suggested by: Sven Guckes [email protected] [971010]

tag search - add movement for "/pattern/+N"
Add "search offset" for tags.
Suggested by: Eli the Bearded [email protected] [971007]

vi compatibility - backspacing does not remove characters on screen
Add option to 'cpoptions' (suggested: 'H') that will not remove characters from the screen (window) when backspacing (deleting) them. Some people really love this feature of Vi - especially on slow terminals.
Suggested by: Matthias Buelow [email protected] [971007]

vi compatibility - wildchar expansion
Add an option to 'cpoptions' (suggested: 'W') to allow expansion of wildchars within arguments.
	W   When a wildcard is specified on the command line,
	    and no files are found, act as if that file specification
	    was not even present.  vi default is to edit a file
	    with the wildcard character or characters in its name.
Suggested by: David Douthitt [email protected] [971002]

insert mode - special mode message for language ports
The language ports would benefit from special mode messages to indicate input of other languages (and use of special fonts).
Examples: "INSERT Farsi/Persian", "INSERT Russian".
Suggested by: Alex Postnikov [email protected] [971002]

recovering with "vim -r" - give info on ":help recover.txt"
...

documentation - :help whitespace
The term "whitespace" is common - but should be defined for Vim, anyway. A good description with tags to affected options is desirable.
Note: ":help I" says: "Insert text before the first non-blank in the line [count] times." Shouldn't this be "first non-whitespace"? After all, the command 'I' jumps over tabs, too!
Suggested by: Sven Guckes [email protected] [970926]

documentation tags - dash vs underscore
Tag names use both dashes and underscores. "Older" tags still have underscores - but newer ones should use ddashes only. So the underscores should be replaced with dashes. This should definitely be done for Vim5!
Suggested by: Sven Guckes [email protected] [970918]

visual-operators - make 'C' change from *current* column
Operators 'C' and 'S' work the same. But operator 'C' should just change the text fom the *current* column.
Suggested by: Sven Guckes [email protected] [970918]

documentation - add future changes with "todo"
Instead of keeping lots of plans in the todo file, add the description of features with a not saying "todo". Thus readers can get accustomed to upcoming changes and help implementing them.
Suggested by: Sven Guckes [email protected] [970918]

todo list - make it readable!
The todo list is very hard to read and understand. Someone please take the task of cleaning it up!
Suggested by: Sven Guckes [email protected] [970918]

[DONE] insert mode - inserting variable values with C-R
Extend command i_CTRL-R to read in values of variables.
Suggested behaviour: Accept the dollar sign as a token and then read in the name of a variable of environment variable (preceded by yet another dollar sign). Thus typing: ":let a=1+1" followed by "$a" would insert the contents of variable 'a' into the text. In this case it would be the string "2". And typing "$$VIM" would insert the VIM env var contents and "$'tags'" would insert the current value of the tag path.
Suggested by: Jim Kleckner [email protected]
This already exists: i_= ,ie in insert mode type CTRL-R followed by '=', then enter in a variable name or expression - and Vim will insert the value. [970916,970918]

drag&drop; - drop folder -> :cd to folder
Dropping a folder onto Vim will make vim open a file with the folders name, which isn't very useful. Instead, let Vim ":cd" to that folder (optionally).
Suggested by: Robert Coutts ([email protected]) [970912]

variable "textmode" - Macinstosh end-of-line (CR)
Make "textmode" accept a third value to allow writing files with end-of-line style used on Macinstosh computers, ie use character "CR" to denote the end-of-line. Perhaphs even change the name to "endofline" and allow values of "dos", "mac", and "unix".
Suggested by: David Douthitt [email protected] [970910] and many other Mac users (eg yours truly).

search commands ('/' and '?') - add flag to ignore case
Add a flag (search offset) to the search commands to allow matches for the search pattern ignoring the case of "letters" (a-z).
Suggested flag: 'i' ("ignore case")
See ":help search_offset"
Suggested by: Huy Le [email protected] [970909] and many others.

substitution - add flag to ignore case
Add a flag to the substitution command to allow matches for the search pattern ignoring the case of "letters" (a-z).
Suggested flag: 'i' ("ignore case")
See ":help s_flags"
Suggested by: Huy Le [email protected] [970909] and many others.

add startup switches "--help" and "--version"
"--version": Display version number and copyright information, eg:
	vim-5.0 [released 980219] [compile 980303]
	Copyright (c) 1998, Bram Moolenaar [email protected]
	For more info see the internal command ":version"
	and the webpages at https://www.vim8.org/.
	Report bugs to to the author or to [email protected] (subscription required).
Then you can easily include it in your mail with ":r!vim --version". While there is copy&paste; on many systems, you sometimes need it as such - especially if you are using DOS.
Btw, the "GNU coding guidelines" ask for "--version", too!
Suggested by: Sven Guckes [email protected] [970818,980304]

dictionary completion - partial completion
The dictionary completion with ^X^K does not allow to complete unto a common end of the current word.
Example: Partial completion of "ab" with possible expansions "abcdeF" and "abcdEF" should expand unto "abcd".
Suggested by: Stefan A. Deutscher [email protected]

registers - additional register for search command
There are several read-only registers - one for the last inserted text, current file name, current alternate file, and last command line. However, there is none for the last search command. We need one!
Suggested name: "/
Suggested by: Sung-Hyun Nam [email protected], Pablo Ariel Kohan [email protected] [970716]

configuration - errorbells
Problem: Even a ":set noerrorbells" does not turn off all bells with (error) messages. This can be quite annoying.
Solution: Add an option to turn on/off bells for all messages.
Suggested by: Sven Guckes [email protected] [970714]

installation - DOS and docfiles
Problem: When the variable VIM (for command.com) is not set then VIM cannot find its doc files. This requires the user to read the documentation about installation before he can use VIM with doc files.
Solution: Let VIM look for the doc files relative to the directory that contains the executable if the variable VIM (for command.com) is not set. Then the user can use the doc files right away.
Suggested by: Brendan Macmillan [email protected] [970714]

[workaround] display - show list of buffers in extra window
Many users would like to see the list of all their open (unhidden) buffers all the time on the screen - an option for that is very much desired.
Workaround: ":set cmdheight=N" - this increases the lines of the command line to N lines. So when you do a @:ls" you will see the result until the next update of the command line. [970623,971126]

n_% - bracket matching - showmatchtime
The variable "showmatch" controls whether a matching bracket shall be shown (if possible on the current window). But there is no control over the time that the match shall be shown. nvi has a variable for this, though: "matchtime" - number of 10th seconds to show the match.
Suggested variable name for Vim: showmatchtime (smt)
Suggested by: Dave Davis [email protected] [970619]

Display GUI - show user@host:/path/file
Allow to display the username and host in the title of xterms. Preferably configurable for each part.
titleformat %h hostname %u username %p pathname %f filename default value: %f example with everything: titleformat=%u@%h:%p%f example with fancy stuff: titleformat=You are now editing the file %p%f.
Suggested by: Zdenek Sekera [email protected] [970502]

Display - show buffer number in status line
Show the buffer number in the status line. This should make it easier to switch to a buffer as you can take the buffer number from the display for using commands such as :Nsb.
Suggested by: Sven Guckes [email protected] [970720]

option "ruler"
Change the option "ruler" from "toggle" to a "flag list":
flag    word    behaviour
A	All	show all info that can be given with this option
		cursor position:
c       column  show the column    number of the cursor
l       line    show the line      number of the cursor
wc      char    show the character number of the cursor
wl      line    show the line      number of the cursor
C       column  show the column    number of the cursor within current window
w       screen  show the byte      number of the cursor
		window position:
H	high	show number of first  line of current window
L	low	show number of last   line of current window
M	middle	show number of middle line of current window
G	last	show number of last   line of current buffer
P	percent	show the percentage of the current line
R	Range	show the percentage range of the current window
		ie the percentage of the window's first and last line
r	ratio	show the ratio of the current window's line range towards
		the whole buffer  ("how much of the complete thing do I see?")
NOTE:   The flags for lines of the current window and for the last line
	were chosen to match Vi's default commands to jump to these lines.
The default format is "%l,%c-%C [H=%H,M=%ML=%L,G=%G] (%r,%p)".
Unset flags will simply leave out the information and surrounding brackets.
Example:  For "set ruler=lcCGHLr" the ruler display might show
	"50,9-65 [40,60;100] (%20)" which means that the cursor in line 50
	on the 9th character displayed on column
Optionally show displayed line range and percentages, eg for a buffer with 100 lines: "[1-24,%:1-24]".
Suggested by: Sven Guckes [email protected] [960512]

Check all startup files (.exrc, .vimrc, _exrc, _vimrc) on all platforms
Quoting Bram Moolenaar: "I think it is VERY important to have a quick startup for most people. Working over a network can be slow, we should not try to open files in many places. -- For version 5.0 it would be very good to have a configurable startup script. But Vim has to find it first! This would come down to first do the initializations like vi (to remain compatible) and then process some Vim specific file(s) (to remain compatible with previous versions of Vim). -- If you are working on Unix, and want to read a _vimrc anyway, you could then put something like this in your .vimrc:
        if exists("_vimrc")
                source _vimrc
        fi
Syntax for the script is to be decided upon later (please don't start a discussion about this right now!)."

Definition of start/end strings for start/end matching.
Should be very useful for matching begin/end strings, eg comments, function definitions, latex or html commands, and all bracket pairs, ie `'(){}[]<>.
Suggested by: vimdev people [960430]

Command history for normal mode commands.
Add a special read-only buffer to show the history of normal mode commands, one complete command one separate lines. This would allow copying of commands into registers easily.
Suggested by: Sven Guckes [email protected] [960430]

ex commands on registers
Allow ex commands to work on registers. Example: :"as/foo/bar/g works on buffer 'a' searching for "foo" and replacing it with "bar" globally.
Suggested by: Alain Sarraf ([email protected]) [960317]

Statistics on visual selection
Add command to visual mode to show statisctics on selected text. The statistics show info on lines, characters, words, width, and paragraphs.
Example:
    long  info:   "-- VISUAL -- lines:3,7[4] chars:365 words:90 width:79 pars:2
    short info:   "-- VISUAL -- 3,7[4];365c;80wo;79wi;2pa
This means that I have selected text within the line range "3 to 7" with "4" lines, "365" characters, 80 words, biggest width of "79" characters, and with "2" paragraphs. Suggested key: "I" ("info").
Suggested by: Sven Guckes [email protected] [960315]

no swap file on opening of file
(optional)
When option is set, do not (attempt to) create a swapfile until the first change is made. When a swapfile exists, do not give a warning until the swapfile is attempted to be created.
Suggested by: Bruce A. Templeton [email protected] [960315]

Show free keys
Show list of "free" (unmapped) keys. Suggested command name: ":freekeys".
Suggested by: Sven Guckes [email protected] [960101]
Bram Moolenaar: Difficult to implement and keep up-todate.

Visual Mode - operator "filter"
Change: visual mode
Fact: The visual commands "filter" (!) and "write" (:w) work on full lines only.
Change the commands so they will work not only on full lines but also on partially selected lines.
Suggested by: Sven Guckes [email protected] [960221]

Automatic expansion of words in insert mode
Fact: You can expand the word before the cursor but it is not done automatically.
Suggestion: Automatic expansion of words.
wordexpandmin 	number (default 0)
	Expand words while typing.
	value=0: No expansion.
	Suggested value: At least 4.
	Words with at least "wordexpandmin" letters will automatically be
	expanded while writing.
	The expansion is taken from the previous text of the current buffer.
Suggested by: Sven Guckes [email protected] [960208]

Show free keys
Show list of "free" (unmapped) keys. Suggested command name: ":freekeys".
Suggested by: Sven Guckes [email protected] [960101]
Bram Moolenaar: Difficult to implement and keep up-todate.

Change: (:dig) - delete default table of digraphs.
Add a way to delete the default table of digraphs. Some people only want to use a part of it - and searching through a big table usually takes a lot longer than searching a small table. [960128]

Change: ^a and ^x - increment/decrement letters
Change letters, too, by changing the ASCII value. [960123]

Change: (:undo) and (:redo) - add messages
When no more undo or redo is possible then a beep is given. Add option to also show a message in these cases.
Suggested by: Sven Guckes [email protected] [960123]

Change: (:edit) - expansion of # and %
Expand special names % and # when the expansion key is typed
Workaround: Enter 'CTRL-R' + '%' and 'CTRL-R'+'#' respectively.
Suggested by: Sven Guckes [email protected] [960123]

Yank stats
Change: (y) - yank
Tell the user how much data (lines, characters) have been yanked and whether the data was yanked to a buffer.
Example: Yanked (copied) 1234 characters from lines 10-31 to buffer x.
Suggested by: Sven Guckes [email protected] [950901]

Yank ranges into buffer on command line
Change: (y) - yank
Add yanking of line ranges on the command line: ":1,3"iy" will yank lines 1 to 3 into buffer "i".
Suggested by: Sven Guckes [email protected] [950901]

Show map list sorted by key names
NEW command ":showmaps": Shows a list of all letters together with meta keys (shift, control) and their bindings. Example:
Mode	metakey	key	function
normal	-	a	append after character
normal	shift	a	append after end-of-line
normal	control	a	-
normal	meta	a	???
insert	control	a	insert previous inserted text
...
Suggested by: Sven Guckes [email protected] [950727]

option to set width of "line numbers"
":set number" shows the line numbers in front of each line. This shows the line numbers to the right of seven characters. As most texts have less than 1000 lines this seems a waste of space. Bram once said he might add an option to set that width. "On low priority, though."
Suggested by: Bram Moolenaar [email protected] [970429]

Screen jumps with 'z' and 'Z'
Suggested by: Sven Guckes [email protected] [970306]

			Screen Jumps
	Screen Jump commands change the current column or line of
	the current character on the screen within the current window.
	This allows for both horizontal and a vertical movement of the text.
	The vertical movement changes the position of the current line;
	the current column is either kept (set option) or changed to the column
	of the first (non-blank) character (set nooption).
	Table of vertical screen jumps		*table_screen_jumps_vertical*
	(Changes position of current line within current window.)
	Type 'z' first - then type letter in table:
		new style		old style
	column:	first	current		first	current
	line	=====	=======         =====	=======
	Home	H	h		'CR'	t
	Middle	M	m		.	z
	Last	L	l		-	b
	Table of horizontal screen jumps	*table_screen_jumps_horizontal*
	(Changes position of current column within current window.)
	Type 'Z' first - then type letter in table:
	leftmost  left   lefttab   middle   righttab  right rightmost
	H         h      ^D <      m M c C  ^T >      l r   L
So we'd use 'h' and 'l' for the usual left/right movement (with an optional 'r'
for "right").  'H' and 'L' work in analogy to 'h' and 'l', ie the go to the
boundary of the current window.  And 'M' does the same for the "middle".
As there is only one middle we can use 'm', too.  Same holds for 'C' and 'c'
for those who prefer to think of "center".
And there is a jump by tabstop with ^D and ^T -
using '<' and '>' as easy alternatives.
"Z0" and "Z$" can be interpreted as '0' and '$'.


file-wide-search
find next/previous occurrence of last search string in next/previous file.

Change to status line
Problem: The status line does not always show what people prefer.
Suggested change: Make it possible to define the status line via a printf function. Suggested by: Bram Moolenaar
Suggested values for status line: pwd, time, mail, hint to ":help", buffer size, ruler. Add extra help lines for newbies to show more info, eg basic movement and editing commands, current filename.
Suggested by: Sven Guckes [email protected]

cursor jump list
Problem: Typos can also lead to unanted cursor movements. You cannot undo a move unless it was a "jump", however.
Suggested change: Add command to undo *all* cursor movements.
Decision: Won't be done as it is too difficult to implement. The commands CTRL-I and CTRL-O should suffice.

gvim cursor
Give the cursor different colours for different modes.

Change: (I) - insert
Add option "smartindent" (alphanumeric) to change the jump and mode involved with "I":
Default: smartindent=0i
0:	Jump to first non-whitespace character of current line.
1,2,3:	Jump to first (1) space (2) tab (3) letter of current line.
	and switch to (1) insert mode (2) append mode (3) . (default)
a,i,o,r:  Switch to (a) append (i) insert (o) open (r) replace mode.
The last cipher or letter "wins".
Add option "insert" (numeric) to enable use of the "insert_key" to cycle through the five "insert modes", ie "command", "append", "insert", "open", "replace":
Default: insert=0
0:	No effect.
1:	Enable "append".
2:	Enable "insert".
4:	Enable "open".
8:	Enable "replace".
Example: insert=10 enables "2" and "8", ie pressing the "insert_key"
repeatedly will cycle through mode "command" -> "insert" -> "replace" ->
"command".

NEW: :set noexpandbeep [Change: (tab) - filename completion]
Fact: When using the expandkey on a filename then you get a beep if the completions is ambiguous.
Add option to suppress beep and/or show *number* of possible completions.
Suggested by: Sven Guckes [email protected]

NEW: Add all numbers in visual
{visual}
Change: visual mode
Add command to add all numbers in visual. Would be *very* useful to add numbers in columns.
Suggested by: Sven Guckes [email protected]

Change: (K) - Keyword call
keywordprg (kp)         string  (default "ref")
  Program to use for the "K" command. Environment variables are expanded.
  {not in Vi}
Suggested change: Do not make a shell call if "kp" is not set (ie empty). [TODO: This seem to have been implemented. Check again! 960701]

NEW option: "repaintfromtop"
Will stop the scrolling for commands ^d and ^u by repainting the screen from top.

NEW: gdb support (as with emacs)
[left to an emacs fan for description ;-]

NEW: scrolling regions for popup lists [960130]
...

NEW: keyword (syntax) highlighting and colouring
one of *the* most wanted wishes

code structure
Restrict functions to, say, 50 lines. This makes reading and checking of the code a lot easier.


External solutions

The following stuff can be done with external programs using the filter command and thus probably will not be implemented.
Making commands work on the current paragraph
Submitted by Thomas Köhler on 990702: :com! -nargs=* -complete=command Par call Pardo("<args>") :fun! Pardo(command) : let col=col(".") : let line=line(".") : norm { : let a=line(".") : norm } : let b=line(".") : exe ":" . a . "," . b . a:command : exe line : exe "norm " . col . "\|" :endfun Now, what does this do? :com! -nargs=* -complete=command Par call Pardo("") This defines a new command "Par" that completes ex-commands. It calls a function "Pardo()" with the rest of its commandline as one argument.
What does Pardo() do? It applies its argument (should be an ex-command) to the current paragraph. It works like this: :fun! Pardo(command) " this remembers current cursor position : let col=col(".") : let line=line(".") " jump to the beginning of the paragraph and remember that cursor position : norm { : let a=line(".") " jump to the end of the paragraph and remember that cursor position : norm } : let b=line(".") " apply the command given as an argument on the range a,b : exe ":" . a . "," . b . a:command " jump back to the position we were before (this may be confusing if " " ex-command is something like 'd' ;-) " : exe line " : exe "norm " . col . "\|" " :endfun
normal/visual command '~' (aka "switch")
options trin and trout
Make the "switch" command '~' switch character and the characters in visual text according to the options "trin" ("translate input") and "trout" ("translate output").
Yes, I know that you can use the command "tr" on Unix externally - but then not everybody is using Unix, right? Even using an external script for this (I once used a sed script) needs to be set up correctly as well. It would definitely be nice to have this command internal to vim as this would do away with extra installations. Besides, it is easy to code, too. I wish I was able to do this - then it would already be done.
Anyway, support for "sets" would be nice, as this makes it much easier to denote them.
Example: UPPER/lower
	set  trin="A-Z"
	set trout="a-z"
This is just to show that the usual functionality of the switch command is just a special case.
Example: Pairs
        set  trin="A-Z a-z < {} [] () \/ `' ,. :; +-"
        set trout="a-z A-Z > }{ ][ )( /\ '` ., ;: -+"
This not only switches letters - but also brackets pairs and other corresponding characters (slash/backslash, tick/backtick, dot/comma, colon/semicolon, plus/minus). This allows an easy fix of frequent typos for these characters.
Note: The spaces within the values of "trin" and "trout" of the previous example are just for readability.
Suggested by: Aaron Schuman [email protected] [980427]
Example: "Caesar Cipher" Code
	set  trin="a-zA-Z"
	set trout="d-za-cD-ZA-C"
This shifts all letters three positions forward within the alphabet. Of course, this asks for a setup to decode it, too:
	set  trin="a-zA-Z"
	set trout="x-za-wX-ZA-W"
Although switching these values is just a matter of a simple mapping, it is much nicer to use a code which is invers to itself, so you need not change any setting. Such a code is "rot13":
Example: ROT13
	set  trin="a-zA-Z"
	set trout="n-za-mN-ZA-M"
This code shifts letters by 13 characters, ie half the length of the alphabet. That way, it is invers to itself, so that using it twice on the same text reveals the original. This "rotation" is usually abbreviated as "rot13". This code is used on Usenet quite often to hide the text from casual reading, and thus often used to hide "spoilers" to puzzles or for hiding "offesive" text such as in posts to rec.humor.tasteles. ;-)
Suggested by: Sven Guckes [email protected] [950101,970919,980430,980504]

Evaluate math strings
Change: visual mode
Add command to visual mode to evaluate "math strings" for integers, eg "(- 123 + 789 + 456) / 2 * 3 + 2^5 + 3**4" should give "1496".



VIM Wishlist - NEW

I am currently trying to reorganize the wishlist to related wishes.

Binary Mode | Color | Commands | Display | Documentation | GUI | Options | Register Names
| Misc

VIM Wishlist - Binary Mode

jump by bytes and to byte offset
Add command to jump by N bytes and to the Nth byte in the file.
Suggested commands: "gb" to jump to byte N, and "gB" to jump by N bytes.
Suggested by: Curt Wohlgemuth [email protected] and Sven Guckes [email protected] [990107]

VIM Wishlist - Color

Color after end-of-line
Show color for NonText after existing lines. Optionally allow the default color to change after 'textwidth' or column N. Very useful to make the textwidth visible, especially for texts where the textwidth matters (eg messages on Email and Usenet).
Suggested by: Sven Guckes [email protected] [970406] and Dawid Kuroczko [email protected]

VIM Wishlist - Commands

change text object commands
Purpose: Work on text objects with and *without* surrounding whitespace.
Problem: Sometimes you do not need to copy/cut/delete text objects with the surrounding whitespace.
Suggested Solution: Add text objects which do *not* include surrounding whitespace. Use these operators:
			whitespace
	a	all	prefix	suffix
	i	inner	none	none
	p	prefix 	prefix	none
	s	suffix	none	suffix
	text objects
	p	paragraph
	P	paragraph delimited by blank lines
	s	sentence
	S	sentence - delimiters can be defined
Suggested by: Sven Guckes [email protected] [960521,980304]

new command
:history
Fact: You can see previous commands on the command line using the command ^P.
Problem: There is no command to show a list of the last N commands. Suggested Solution: Add command ":history" to show the list of the last N command line commands.
Suggested by: Sven Guckes [email protected] [960615]

change command ^W
^WN - jump to window N
Purpose: Access a window directly.
Suggested Solution: Give the first ten windows a digit as number. Allow to directly switch to them by the window command followed by the digit, ie "^W3" to jump to window #3.
| ... ...
|[2] ~/foo
| ... ...
|[3] ~/bar
| ... ...
|:command line
Suggested by: Sven Guckes [email protected] [960622]

change command i_CTRL-R
^R"X
Fact: You cannot recall the contents from a buffer when the name is preceded by a '"'.
Purpose: Put contents from buffer X into text in replace mode
Suggested Solution: This will replace text with the contents from a buffer as if you typed it in when using 'R' to replace text.
Suggested by: Leslie Gerstenfeld [email protected] [960718]

VIM Wishlist - Display

display (nocolor)
Show current editing line in invers mode
Purpose: The current editing line is sometimes hard to make out.
Suggested Solution: Show the current line in invers mode.
This helps a lot while typing.
Setting a colour for the "editing line" would be nice, too.
Suggested by: Laurent Duperval [email protected] [960315]

display (nocolor)
extra line for messages
Leave an extra line for (error) messages. An extra line for (error) messages is good as you can still see them when typing in a new command.
Further uses:
Startup (error) messages: Whenever you change a setup file you are likely to get an error. Then you want to see the filename, line number, and its contents.
Online help: Great for showing extended help messages, too. You could give some feedback on executed commands to the (new) user.
Quite mode: Also, this "channel" could be turned off when executing command scripts which sometimes stop the execution (annoying).
Sven Guckes [email protected] [971126,990204]

display (color) [970327]
show *all* matches of search within current window
Show first N or all matches of search pattern within current or all windows. Use color to show the *current* match.
Inspired by pager "less".

display (color)
background colors for windows
Allow definition of background color for each window.
Allow definition of background color for each window when the associated buffer has been changed.
Suggested by: Paul Moore [email protected] [961203]

display (color?)
clock
Show the current time on the command line. However, this clock could get in the way of commands and messages, and while macros are executing, and thus could prove *very* difficult to implement. Any takers?
Suggested by: many people [971126]
Workaround: Use an external "date" command to quickly display the current time/date. Or use the internal function "strftime" for that (lots better!). Example: iab YDT <c-r>=strftime("%y%m%d %T")<cr> map ## :echo strftime("%y%m%d %T")<cr>

display (nocolor)
show "command" for command mode
Fact: There is no string indicating command mode.
Suggestion: When in command mode show the word "Command" on the status line, and an asterisk preceding it if the file has been modified (ie: "*Command").
Suggested by: Andy Kahn [email protected] [970111]

VIM Wishlist - GUI

Box menus
All menus so far a "list menus" ie each item is in one row of its own. For long lists this results in long menus. However, if the names of the items are short (such as a list of symbols) then a "box menu" with rows *and* columns would fit much better onto the screen. An appropriate command to define the size of a box menu in rows and columns is therefore desired.
Suggested command: :boxmenu rows,columns
Suggested by: Hermann Rochholz [email protected] and Sven Guckes [email protected] [970624]

gui: use of the cut buffer
Having to hold SHIFT down to put the cut text into the X cut buffer is a pain -- I'd rather that selected text is put into vim's cut buffer as well as the X cut buffer. Vim modifies the users expectation of how typical xterm apps behave. One more thing to have to remember. (I've used vim's SHIFT-select for a while now and about 30% of the time I forget to hold SHIFT when I want to select text into X's cut buffer.)
Suggested by: Jim Battle [email protected] [960614]

gui: make selection analogous to visual commands
It would be nice if vim selected character, line, or blocks with the mouse if (leftmouse), SHIFT-(leftmouse) and CONTROL-(leftmouse), analagous to the keyboard method. I know that this contradicts my previous paragraph, since CONTROL- already means something to an xterm window.
Suggested by: Jim Battle [email protected] [960614]

VIM Wishlist - Documentation

missing tags
Add these tags: atom pattern.txt /*atom* charclass pattern.txt /*charclass*

documentation - tag "motions"
Use "{motions}" instead of "{move around}" and give it a tag with an explanation, eg "any number of 'motion' commands".
Suggested by: Sven Guckes [email protected] [970916]

tag names
tag names with multiple words are connected inconsistently with either a dash or with an underscore.
Example: Cycling with ":help comm" gives you these:
tag_commands, undo_commands, format_comment, search-commands, missing_command, expression-commands, autocommand-event, quotecommandquot, autocommand-pattern.

:help hidden
The text says:
"When off the current buffer is unloaded when it is abandoned."
Neither "unload" nor "abandon" can be understood by a non-programmer, as they are not defined anywhere in the docs.

:help replace_mode
Mention replace mode commands ^R and arrow keys (for movement). Add tags for replace mode, ie tag names with prefix "r_".

:help operator [960505]
Add documentation for dot operator:
Dot operator after key command, ie command sequences "(key).".
	Repeat last command of same operator.
	E.g. "c." will repeat last change, also when "x" used since then.
	[Robert Webb]

"{not in Vi}" vs "{Vi: no xxx}"
The documentation mentions "{not in Vi}" and "{Vi: no recording}". The second kind is better because it allow grepping for "{Vi:"; the text after it should tell you about the kind of thing that is or is not in Vi.

VIM Wishlist - Options

new option
"numberbase"
Problem: Number operations are done in base 8 if number starts with '0'.
Purpose: Allow to define the default base for operations on numbers.
Affects: CTRL-A and CTRL-X
Suggested Solution: Add option "numberbase" to specify the default base to be used with number increase/decrease (^a and ^x). This does away with the problem of number with a zero prefix.
Suggested by: Mun Johl [email protected] [960320]

new option
"name?"
Purpose: Inform the user that he went through the whole file. so he will know that he does not need to search any further. ;-)
Suggested Solution: Give a warning message when a search for the next or previous search goes over the line in which he issued the search for the first time. Maybe require that the search wrapped over the first or last line.
Suggested by: Sven Guckes [email protected] [960430]

additional formatoptions
affects format command ('Q')
Problem: There are some changes that you frequently apply on reformatted text, such a "squeezing whitespace" and "adding end-of-sentence double spaces". They can be done with scripts and macros, but an internal solution would be easy requiring a single parse only.
Suggested Solution: Add these options to "formatoptions":
s	"squeeze".  This squeezes runs of whitespace to a single space.
e	"end-of-sentence double spaces".  Use two spaces after end-of-sentence
         punctuation, ie words which end with any of the characters of [.:!?].
What this is good for: "squeeze" does away with space runs which are used by text formatters that add whitespace for block text. And "end-of-sentence double spaces" make it easier to see the end of a sentence.
Suggested by: Sven Guckes [email protected] [960521]

new option
"matchoffset"
Purpose: Define minimal "context" for search match.
Problem: You cannot define a line offset for the line displayed for a match from the top and botom row of the current window.
Suggested Solution: Add option "matchoffset" to define line offsets for the display of a match. This is to keep a minimum offset from the top and bottom of the current window.
Example:
	matchoffset=4,3  (keep four lines from top and three lines from bottom)
	_________________ window border
	1: top line of current window
	2:
	3:
	4:
	5: matching line
	6:
	7:
	8:
	9: bottom line of current window
	================= window status line
Suggested by: Bill Luebkert [email protected] [960603]

new option
"quitdialog"
Purpose: exit confirmation dialog
Fact: When you quit the last (the only) window with ":quit" then VIM prompts you with "No write since last change (use ! to override)".
Problem: You have to issue the command ":q!" yourself or write the buffer first. There is no dialogue for the user.
Suggested Solution: Add option "quitdialog" that will make VIM give a dialog to allow the choice of ":write", ":quit!" and "cancel" (ie return to editing). This is useful when you would like to keep VIM running. And it would be nice on newbies, too.
Suggested by: Meir Shahar [email protected] [960604,970404]
Optionally: Give "quit" prompt to user when using ESC or interrupt in normal mode.
Suggested by: John H Meyers [email protected] [960513]

new options
"remarkformat" and "warningformat"
Problem: You cannot customize the formats for remarks and warnings of compilers.
Suggested Solution: Add variables "remarkformat" and "warningformat" to enable recognition of remarks and warnings that compilers produce. Also add commands to jump forward/backward between remarks and warnings.
Suggested by: Gabriel Zachmann [email protected]

new option
"screen_update_macro"
Fact: During excution of a macro the screen is updated.
Problem: The screen updates can slow down the excution of the macro.
Suggestion: With "noscreen_update_macro" all screen updates during the excution of macros are suppressed. This could speed up the excution of macros considerably.
Idea: This idea is from the vi clone "elvis".
Suggested by: Sumner Hayes [email protected] [960629]

VIM Wishlist - Register Names

new register name
register for "last search string"
Add a register name that contains a copy of the last used search string.
Suggested by: [email protected] (David Kotchan) [961030]

new register name: '#'
Fact: There is the register '%' which contains the filename of the current buffer.
Problem: But there is no register name for the previous buffer.
Suggested Solution: Allow '#' as a register name to be used in these modes: command line mode, i_CTRL-R
Suggested by: Raul Segura Acevedo [email protected] [960627]

VIM Wishlist - Misc

angle notation in output
Fact: You can use the angle notation in the input (vimrc or command line) but the output (":map") still shows characters in the caret notation (^M for <C-M>).
Problem: It would be good if there was an option that reverses this, ie showing special characters within the mappings and abbreviations in the <> notation. Copyinh a map/ab from screen then would be ready for pasting into the command line/vimrc of another vim. Especially useful for making maps and abs available via Usenet or WWW.
Suggested by: Sven Guckes [email protected] [960618]

command line parsing with definable meta character
A command that uses exactly one meta character to interpret a line. The meta character is defined by the first parameter and defines the following two characters as a digraph.

Suggestion for a command name:

	:define		this nicely abbreviates to ":def".
	:decode		:dec - you always wanted that name in vi, didn't you?
	:xl8		translate ("trans-l-eight" ;-)
Rules about the following two characters:
	(1) [0-9a-fA-F][0-9a-fA-F] -> hex value
		=20	=3D
	(2) ^[a-zA-Z]              -> control character
		C^M	C^V
	(3) \[a-zA-Z]              -> C escape sequence
		\n	newline
		\t	tab
		\r	return
		\g	bell		etc
Examples:
	Map the delete character to the backspace character:
	:def = map =^? =^H
	Translate ^M to ^J:
	:def = :%s/=^M/=^J/
	Translate all quoted printable spaces into real spaces:
	:def = :%s/=20/ /g
Suggested by: Sven Guckes [email protected] [960622]


VIM Wishlist - command line editing

[961007,970911] A frequent wish is to allow "Vi commands" on the "command line" for editing. I admit this sounds like a good idea - especially because this "inconsistency" is not a favourite feature of Vi newbies.

Those in favor argue that you can regard the command line as a window with only one line. But as there is only one line you edit on you would have to disable the colon command (which switches to ex mode), all vertical jump commands, window commands (^W etc), and the commands that open a new line ('o'. 'O'). All these things will require a lot of additions and thus result in *more* code, not less.

Another problem is that the messages for command completion and for showing the current mode cannot be shown. And you would have to distinguish between command-line-normal-mode and comman-line-insert-mode. This can become quite confusing.

So we'd rather refrain from making the command line yet another window. Hope you understand.

NOTE: The Vi clone "nvi" allows Vi commands to be used on the command line. I wonder how good that works. Comments welcome!

Message-ID: &lt;68lpp1$34h$1@wbnws01.ne.highway1.com&gt; Kaz Kylheku ([email protected]) suggested: "Suppose that the property that an (unmapped) ESC cancels an ex command was eliminated. Thus ESC on the command line would go into a vi-like command mode for editing the command history." Paul G. Fox [email protected] commented: "this would be an _extremely_ bad thing, imho. we tried it in vile a few years back, and it was awful. since then, we've considered trying it again, but making two ESC chars in a row do the traditional abort. that might be viable, but i've not yet experienced it, so i'm not sure."

VIM Wishlist - Text Formatting

formatoption 'j' - add space when joining lines
Change the whitespace following the combination of WORDs and any sequence of the characters that end senetences (".;:!?") two exactly two spaces.
FAQs about this definition: Why not use the option "joinspaces" for that? It is confusing that the option "joinspaces" has a sideeffect on the option "formatoptions". Why not just add a single space after a sentence? Well, redoing the formatting on the same text will then make the text longer by one space *every* time. This is not wanted. Furthermore, it is better to compress whitespace to just two spaces. Why not compress the whitespace after every end-of-sentence character? This is a bad idea as some people like using ellipses like ". . .". End-of-sentences should thus follow WORDs directly. Why not use "words" instead of WORDs? The default to "words" does not fit some words of the English language as it does not include the dash - so the word "up-to-date" is not a "word", and therefore the sentence "... will have to up-to-date." would have no end. Why not just use ".?!" as end-of-sentence characters? Several languages also use the colon and semicolon as separators between sentences. Yes, this should be made configurable, too.

formatoption 's' - squeeze whitespace
Automatically condense/squeeze whitespace to a single space.

formatoption 'S' - squeeze whitespace
Automatically condense/squeeze whitespace to a single space.


VIM Wishlist - Top Wishes

The list of the top most often requested wishes, showing major advances first:
Vim Client [990712]
The idea is that of "emacsclient" - using just one running editor as a server. So you start editing a file with "vimclient filename" and when Vim is running already then it would just add another window or switch from the current file to the newly opened one.
Suggested by: John Klassa [email protected] 990712 (amongst many others)

Shell Buffer / Shell Window
Shell Window: This opens a window and starts a shell within. The output region is restricted to the window, but can be placed anywhere and can also be rotated and switched with other windows.
Shell Buffer: Just like a shell window - but the input and output is mirrored in an edit buffer, so you can use Vim's commands to jump around and modify the text, including the output of shell commands.
Suggested by: Felix K. Sheng ([email protected]) [951115] and many others by now, of course. [990726]
There are *many* problems involved with this - that's what makes implementation very difficult. Mind you, in a shell you start processes and their output may or may not be wanted within the shell window. But if you have ideas then send your patches!

Remote Editing [981001]
Add support for editing a file on a remote disk via ftp.
Suggested by: many people

buffer selection window [980613]
There are many commands to select a buffer - but many people are used to select an item from a list using arrow keys instead of commands. Therefore many users have asked for an extra window showing the buffer list allowing the arrow keys for selecting a buffer to switch to. So far there are mappings sets to simulate this, but an extra window with extra commands is very much desired.

Folding (aka Outlione Mode) and Limited View
Folding: Hide parts of the text to allow faster overview and access to sub-parts. This is to hide parts that are not affected by editing.
Limited view: Show only lines matching (or not matching) a given pattern. This is to focus editing on special lines of a text.
Folding is the main goal for Vim-6. Some folks are writing patches already it seems.
Allow to make parts "read-only" as to prevent accidental changes.
Suggested by: Le Roux Yannick [email protected] [991202]
visual mode - "fold"
Fold the current visual text. This is nice when you have a long file to edit and you jump around to edit parts which you don't want to change. It sort of cuts down on the scrolling.

Support for UTF8 (Unicode)
"UTF-8 (as defined in RFC2279 or ISO/IEC 10646-1 Annex R) is an ASCII-compatible encoding of Unicode. UTF-8 allows very easy addition of Unicode/ISO 10646 support to software that was designed for 8-bit character sets. UTF-8 is the way how Unicode is now commonly used under Unix (e.g., Plan9 and Solaris). It should not be too difficult to extend VIM to edit UTF-8 files. The only basic change that is involved is that which in 8-bit character sets one counts the number of bytes to determine the number of characters in a string, with UTF-8 one counts only the bytes with values (x & 0xc0) != 0xc0. Free Unicode fonts for X11 are now freely available, and UTF-8 support for many terminal emulators is already available or under implementation. VI under Solaris is already fully UTF-8 capable."
Markus Kuhn [email protected] [981126]

matching and searching across newlines [980107]
You can use regular expressions to search for almost anything *within* a line - but not *across* lines. This is "natural" to many programs, especially Vi. Besides, Vim must not this by default to be "Vi compatible".
However, there are several programs which allow this (even with regular expressions). Naturally, Vim users want this, too.
Bram said on 960703:
I'm afraid that it currently is impossible to include a CR in a search pattern. It is quite a bit of work to add, in a way that it works properly. But it is in the todo list, it will be implemented one day. Don't expect it soon.
Vim-5 may allows this via the hooks to other langauages (perl, python). Here is an example of how you can use Perl to cut up a file into paragraphs, substituting "foo bar" with "baz": :%!perl -00pe 's/foo\s+bar/baz/'

extend "repetition" to more commands
The dot command ('.') repeats the last command. The decription says that this applies to "simple commands". However, it is not described which the commands are. :-( Anyway, this could be extended to a lot more commands. But this is very difficult as the scope is not really defined. Yes, this certainly needs a better documentation.

Overlapping Windows, vertical split [970903]
Splitting windows is not only desirable in horizontal split" but also as "vertical split". this can aid in viewing program code and "context diffs" as well as with translations of text.
Steve Kirkendall plans additional "split commands" for elvis and an option to define the default split orientation (ie "horizontal" or "vertical").
Vim-6 now has "vertical split" now (since vim-6.0h).

format view modes / text rendering [970603]
Display manual pages correctly and render webpages (HTML files) as if viewed with a text browser (such as Lynx).

Extending Block Operations [970812]
More operations on visual block, most significally substitution.
This would allow to fill a block with a single character or pattern, too. (As wished by [email protected] on 980829).

vi style editing on command line [970926,980106]
The editing commands for the command line are quite different from the other commands within the buffer. Some people would prefer to see the same commands for the command line, too. However, this adds more problems as you have both an insert mode and a normal (command) mode on the command line. Furthermore, the visual mode would have to be disabled for the command line. So this seems to require more workarounds than it has benefits.
Lemmy: The vi clone "lemmy" has vi-style command line editing (option "kshmode"). It turns the command line into a mini-ksh using the vi command set. (Still haven't tried this yet. More info welcome!)
Nvi: The vi clone "nvi" allows to edit the command line and the command line history in a separate buffer.

Hex Edit Mode [970609,971230]
Display content of files in hex mode. Allow editing in hex mode.
This has been on everyone's wishlist for Vim for years. However, this would have to change a lot of code. Therefore Vim ships with the utility "xxd" which converts binary files to text; you can then edit this text and have "xxd" convert the result back to binary.

Partial Editing [Hmm, this isn't a good "title" - got a better one?]
Vim loads the whole file into memory. This can be a problem for big files and not sufficient memory, of course. It would be much better if it used only "the parts that other editors cannot reach" (*ehem*), ie only those "pages" that are ebing editing. I assume this will be a major change as it is probably quite some hack for operating systems which do not support "page switching". [980424]

Y2K (Year2000) compliancy
"YES". See the page on Vim and Y2K.

ISO9000
Absolutely!


Vim Wishes for the OS/2 port

XFree86 port the X-GUI mode
Suggested by: Orange Gopher [email protected] 990205

Looking for setup and documentation files relative to executable
"In OS/2, I'm not sure that just argv[0] [to get the path of the current executable] will always work. I have a code fragment somewhere for a function called getLoadPath that calls an obscure OS/2 API to get the name of the executable. This is said to be more reliable than argv[0] (which is compiler dependent)."
Suggested by: Orange Gopher [email protected] 990205


Vim Wishlist - Workarounds

Some things can be done with a simple workaround.
NEW: GNU readline for command line [960123,960601]
Use the mappings as given by Sven's vimrc.

[workaround] command "gf" - do not reset cursor to first line
Problem: Command "gf" with the cursor on "filename" will change to the buffer of "filename" when it is already in the bufer list - but it will reset the cursor to the first line within that buffer.
Suggestion: Make Vim keep the current line of the cursor as if you has used the command ":b filename".
Workaround:
	noremap gf gf'"
Suggested by: Otavio Exel [email protected] [971126]


VIM WIshlist - Wishes which had to be turned down

'rulertab' - tabstop list
Make tabstop a list of positions. This makes editing of tables easier.
Bram said on 990826: "This actually creates a new file format. Only when the tab settings are right will this text show up as intended. This is not very portable, since normal text files have no standard way to tell where the tabstops are. I don't think Vim should support this in the near feature. You could perhaps do something with inserting spaces, using some way to vary the amount based on the current column. Could be done with a clever mapping. Perhaps you would also be happy with the column-aligning scripts that have been send recently."


VIM Wishlist - Wishes that got implemented with Vim

This is where I'll put the wishlist entries whenever someone tells me that some feature is now implemented. ;-)

special character notation
Allow using "\s" for spaces and "\t" for tabs - then mappings would be easier to read and would not break at spaces. Although you can use "<Space>" and "<Tab>" this is quite long.
Suggested by: Sven Guckes [email protected] [971002]
vim-5.0r added:
- "\w" in regexp, for whitespace.  Should be much faster than "[ \t]".
vim-5.0s:
- Added "\S" to regexp patterns: matches a non-white character.
  Changed "\w" to "\s", to make it similar with Perl.
Using "\s\+" for any non-zero sequence of these is very handy! I use "\s\+$" to detect trailing whitespace.

swap file - create swap file after first modification
Create the swap *after* the first modification - not before. Optional.
Suggested by: Yang Guo Liang ([email protected]) and Sven Guckes [email protected] [970919]
Added with vim-5.0o. [970929]

search pattern - Perl minimum closure
Allow to match the shortest possible match for a regex.
Example: "s/\<.*?\>/[\1]/" puts square brackets around the shortest word.
Suggested by: Edwin van Geelen [email protected] [990311]
Vim has this already - the "magic patttern" "\{-}".


VIM Wishlist - TODO


Back to the -> VIM Home Page

URL:         http://www.math.fu-berlin.de/~guckes/vim/wish.html
URL:         https://www.vim8.org/wish.html (mirror)
Created:     Mon May 15 00:00:00 MET 1995
Send feedback on this page to
Sven Guckes [email protected]