home *** CD-ROM | disk | FTP | other *** search
- The main changes expected for version 5.0:
- - The last few big things for Vi compatibility (Ex mode, "Q", ":append")
- - Syntax coloring/highlighting, configurable for different languages.
- - Add scripting language support (probably Perl).
- - Add ":if" command.
- - GUI version for Windows (3.1/95/NT).
- - VINE (Vim Is Not Emacs): Keep it small!
-
- Known problems and priority improvements:
-
- Unix:
- - 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.
-
- Small problems:
- - CTRL-F at the end of the file, when 'so' is set, redraws twice. When the
- window is small (< 2 * 'so') it behaves differently.
- - CTRL-E and CTRL-Y in a small windows, with 'so' set, sometimes doesn't
- scroll, because getting the context scrolls the screen back.
- - tilde_replace() can only handle "~/", should also do "~user/".
- - "1000ii<Esc>" takes an awful long time.
- - 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.
- - ":wall|make", when writing something, ":!make" echo does not have a CRLF
- before it.
- - There are often a few <CR> on a row sent to the screen, should not be
- necessary.
- - Text is scrolled up and down: (Acevedo)
- - set scrolloff to something >1 (i always use "set so=4")
- - set the win. hegiht to scrolloff + 1 (i'd do ^W5_)
- - load a file with scrolloff + 2 lines
- - put the cursor in line scrolloff +1 (5G)
- - if you move the cursor along the line (h, l, insert text, etc)
- the text is crolled with each keystroke (once up, once down,...)
- sometimes with <Esc> the text is scrolled up and down whitout stop!!!!
-
- Vi incompatibility:
- - "yw" on the last char in the file doesn't work (Trapp).
- - CTRL-T in insert mode inserts 'shiftwidth' of spaces at the cursor.
- - CTRL-L is not the end of a section? It is for Posix! Make it an option.
- - "0;/pat" starts searching in line 2 instead of line 1.
- - "z3<CR>" should still use the whole window, but only redisplay 3 lines.
- - text is put in register 1 when using "c" and "d" with a motion character:
- <control-A> % ( ) `<character> / ? N n { }
- - After ":cd", meaning of file names for existing buffers changes.
- - Always catch SIGINT, don't let it kill us?
- - ":n" and ":rew" keep the old cursor position of the file.
-
- GUI:
- - Motif: Scrollbar for cmdline disappears with ":set go=", ":set go=lbrm".
- - Motif: Tear-off menu item "----------" crashes Vim on some machines.
- (Netherton) It works fine for me, maybe it's a Motif problem.
- - When font shape changes, but not the size, doing ":set font=" does not
- redraw the screen with the new font.
- - Horizontal scrollbar doesn't work in rightleft mode.
- - Pasting in Replace mode insert the text, instead of overwriting.
-
- MSDOS:
- - Hitting CTRL-P twice quickly (e.g. in keyword completion) on a 8088 machine,
- starts printer echo! (John Mullin).
- - Completion on ":source $VIM/_vim<Tab>" doesn't work (Webb).
-
- Windows 95:
- - When 'lines' is set in _vimrc or columns is not 80, executing external
- commands sometimes hangs or crashes Vim or the PC. This is a Windows 95
- problem.
- - There is an occasional lockup when repeating a key while scrolling. Vim
- unlocks when resizing the window. Might be a Windows 95 problem.
- - Dead keys don't work properly with Windows 95. Not really a Vim problem,
- but it should work. It's difficult to fix...
- - Screen updating is slow with Windows 95 (compared to 16 bit version, DJGPP
- version is in between). It becomes fast when 'lines' or 'columns' is set to
- a non-standard value!!!
- - Editing a file by it's short file name and writing it, makes the long file
- name disappear.
-
- AIX 4:
- - After running Vim tty setting "cs8" is not restored, it becomes "cs5". This
- causes 8 bit characters to loose their 8th bit. Only with AIX 4, AIX 3 is
- fine. (Albayrak) Maybe caused by invalid combination of tty settings?
-
- hpterm: Highlighting isn't always correct. Could use 'weirdinvert', but that
- slows down screen updating too much.
-
- I can't reproduce these:
-
- With backupdir=~/tmp,/tmp nowritebackup nobackup patchmode=.smr
- and the patchmode file exists, backup files in the tmp directory are left
- lying around - they should be deleted! (Riehm)
-
- [These have been reported for version 3.0, they may not appear in this version]
- Some terminals start inverting at the position where the invert code is put.
- This is not handled correctly. Remove 'weirdinvert' hack.
- On Diamond Viper 132x43 mode crash on exit (John Lange)
- MSDOS: After writing on a network the 'w' bit for others is set.
-
-
- Documentation:
-
- Give names to some messages, e.g. hit-return, file (buffer?) message, etc. Use
- the same name everywhere.
- Autocommand example: use ":retab! 4" when reading, ":retab! 8" when writing.
- Replace "toggle" with "boolean" for options?
- Make a few sample menu sets (.gvimrc files) for novice vi users, novice Vim
- users, C programmers, ...
-
-
- Problems that will probably not be solved:
-
- Problem with HPterm under X: old contents of window is lost (Cosentino).
- Amiga: When using quickfix with the Manx compiler we only get the first 25
- errors. How do we get the rest?
- Amiga: The ":cq" command does not always abort the Manx compiler. Why?
- Linux: A file with protection r--rw-rw- is seen readonly for others. The
- access() function in GNU libc is probably wrong.
- MSDOS: When using smardrive with write-back buffering, writing to a readonly
- floppy will cause problems. How to test for writable floppy first?
- 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.
-
-
- Further extentions and improvements:
-
- GUI stuff (see ":help gui_todo").
-
- POSIX compatible mode?
- Make "5dd" on last-but-one-line not delete anything (vi compatible).
- Change cursor_down()??? Many other commands will change too: "5j", "c5j",
- etc. Add flag in 'cpoptions'?
- CTRL-I and CTRL-O should work in Visual mode, but only jump to marks in the
- current buffer.
- Include variation on text objects, without the white space (e.g. "vp" only
- selects the paragraph, not the following empty lines).
- Searching: "/this//that/" should find "that" after "this".
- ":/this//that/" should find "that" after "this", this being one address.
- incsearch is incorrect for "/that/<Return>/this/;//" (last search pattern
- isn't updated).
- Disallow setting the 'shell', 'makeprg', 'formatprg' or 'keywordprg' options
- in a modeline??? Also 'secure' and 'exrc' should be forbidden.
- Multiple tags: CTRL-] again jumps to next tag?
- Add flag in 'cpoptions' that makes <BS> after a count work like <Del> (Sayre).
- Add flag in 'cpoptions' that makes operator (yank, filter) not move the
- cursor, at least when canceled. (default vi compatible).
- MSDOS: Support the use of "~" for $HOME. Expand $VAR in file names.
- Search commands in a tags file: Allow optional "e", "b" and "s" flags to
- position the cursor in the right column.
- findmatchlimit() should be able to skip comments.
- Add redirecting of Ex commands. Add a command to dump all the settings,
- mappings, autocommands, etc. in a file, to be included in a bug report.
- Using a tags file relative to the current file, and 'tags' contains
- "./../tags", the file name becomes "/path/dir/a/../b/file.c". Should
- remove the ".." from the name of the tags file. Should not always use
- absolute path. (Hiebert)
- Detect textmode after executing the autocommands, otherwise the .gz
- autocommands don't work for MS-DOS. Needs to be able to remove the ^Ms at
- the end of each line. Alternative: don't use a filter command, write the
- file, gunzip, set nobin, delete the lines, read the file.
- When hitting <Esc> or CTRL-C in Normal mode, give a message to help novice
- users to get out: "Type :q! to quit Vim".
- "6x" at end of line should not break a mapping (vi compatible).
- "6X" at start of line should beep, but not break a mapping (vi compatible).
- But "6hll" at start of line does break!
- Add :delcr command:
- *:delcr*
- :[range]delcr[!] Check [range] lines (default: whole buffer) for lines
- ending in <CR>. If all lines end in <CR>, or [!] is
- used, remove the <CR> at the end of lines in [range].
- A CTRL-Z at the end of the file is removed.
- If [range] is omitted, or it is the whole file, and
- all lines end in <CR> 'textmode' is set. {not in Vi}
- Should integrate addstar() and file_pat_to_reg_pat().
- Make it possible to enter a digraph after "r" (with CTRL-K).
- Autoconf: Use @datadir@ for the system independent files. Make sure the
- system dependend and system independed files are separated. (Leitner).
- When working over a serial line with 7 bit characters, remove meta characters
- from 'isprint'.
- Change 'smarttab' into an option to make <Tab> always insert 'shiftwidth'
- characters? Better: behave like 'ts' is 'shiftwidth', but write files
- like 'ts' is 8.
- Alternative: Add 'softtab': Possibility to keep 'ts' at 8 and insert
- 'softtab' characters when <Tab> is hit.
- MSDOS: look for .vimrc, helpfile and .viminfo in argv0 dir. (Ferenc)
- Add autoconf check for waitpid()/wait4().
- Add autoconf check for library path "/usr/lib" and remove it (like for
- /usr/include).
- Always output <CR><NL> to the screen, never just <NL>. (Olaf Seibert)
- Option to make all swap file names start with ".", to make them hidden
- (Grundman).
- 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.
- Vi compatibility (optional): make "ia<CR><ESC>10." do the same strange thing.
- (only repeat insert for the first line).
- Make marks present in .viminfo usable as file marks: Display a list of "last
- visited files" and select one to jump to.
- Add ":echo" command, display a message.
- Include turbo_loader patches, speeding up reading a file.
- Include regexp {n,m} patches/webb.regexp.
- Change request: "/^$\|the" finds both empty lines and "the", but "/the\|^$"
- doesn't. Make '^' after "\|" also a special character?
- Call maketitle() whenever curbuf->b_changed is set or reset, and include
- "Vim +" in the title for changed buffers. How about the icon?
- Add events to autocommands:?
- normalenter - Entering normal mode.
- insertenter - Entering insert mode.
- replaceenter - Entering replace mode.
- cmdenter - Entering cmdline mode.
- visualenter - Entering visual mode.
- Give better error messages by using errno (strerror()).
- Add 'sidescrolloff' option, like 'scrolloff' for sideways scrolling.
- Make 'restorescreen' option also work for xterm (and others), replaces the
- SAVE_XTERM_SCREEN define.
- When 'wrap' is off, add commands to scroll screen left/right by half the
- screen width: "zH" and "zL"?
- Include an option (or flag to 'cpoptions') that makes errors in mappings not
- flush the rest of the mapping (like nvi does).
- Implement a "sticky" help window, some help text lines that are always
- displayed in a window with fixed height. (Guckes) Use "~/.vimhelp" file,
- user can edit it to insert his favorite commands, new account can contain
- a default contents.
- 'path' can become very long, don't use NameBuff for expansion.
- Avoid calls to plines() for cursor line, use w_cline_height.
- Give warning message when using ":set t_xx=asdf" for a termcap code that Vim
- doesn't know about. Add flag in 'shortmess'?
- Remove fcntl() from autoconf, all systems have it?
- Add command to reset ALL options to their default value: ":set all&".
- Make it possible to redo all the commands from a mapping with "."!!!
- Make it possible to undo all the commands from a mapping, including a trailing
- unfinished command, e.g. for ":map K iX^[r".
- Add ":che <file>", list all the include paths which lead to this file.
- "-V" command line argument: Verbose, show which .vimrc, .exrc, .viminfo files
- etc. are used for initializing.
- 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.
- "[p" and "]p" should use 'cindent' code if it's on (only for the first line).
- ":set sm^L" results in ":set s", because short names of options are also
- expanded. Is there a better way to do this?
- Set default for 'dictionary', add search for dictionary to autoconf.
- Add 'wildlongest' option: Key to use to find longest common match for command
- line completion (default CTRL-L), like 'wildchar'. (Cregut)
- Also: when there are several matches, show them line a CTRL-D.
- Add command line completion for '%' and '#'.
- Add ":@!" command, to ":@" like what ":source!" is to ":source".
- Should be possible to write to a device, e.g. ":w! /dev/null".
- Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
- Improve 'cindent'
- - formatting of struct/array inits:
- - The lines used to initialise the struct or array above should
- not be considered 'continuation' lines just because the previous one
- does not end with ';'. If you go back line by line I think it should be
- possible to tell the difference. If you find a line that ends in ';',
- then it's OK to have continuation lines. If you find a "{", and the
- character before it (not counting space & comments) is either ',' or
- '=', then there should not be continuation lines. If the character
- before the "{" is another "{", then you have to check before that one
- too.
- - When 'cindent'ing a '}', showmatch is done before fixing the indent. It
- looks better when the indent is fixed before the showmatch. (Webb)
-
- ":cab map test ^V| je", ":cunab map" doesn't work. This is vi compatible!
- Add command to remove (all) digraphs. (Brown)
- Make it possible to toggle 'paste' in Insert mode.
- Make 'paste' work without resetting other options, but override their value.
- Avoids problems when changing files and modelines or autocommands are used.
- Include option to switch shell off, for secure version (impossible to switch
- on again).
- For visual mode: Command to do a search for the string in the marked area. Only
- when less than two lines. Use "g/" and "g?".
- Add "K" command in visual mode: use Visual text for keyword program.
- 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.
- Make 'lisp' code more vi compatible.
- Add 'complete' option: Which completion to be done for CTRL-N/CTRL-P in insert
- mode: 'w' for other windows, 'b' for other buffers, 'd' for dictionaries
- (Webb).
- Add CTRL-A command in CTRL-X mode: show all matches.
- CTRL-X CTRL-F: Use 'path' to find completions.
- 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-A command: When there are leading zeros, don't use the number as octal
- (with an option?).
- "g CTRL-A" and "g CTRL-X": Increment/decrement alphabetical char (a -> b -> c)?
- Add ":setenv" command: set environment variable.
- Add possibility for file name on the command line to be searched for in the
- 'path', when there is a special character before the file name ('<' ?).
- Allow the use of wildcards in 'path'.
- Add possibility in 'path' to define the top of a tree to be searched, e.g.
- ":set path=.,/usr/include,~/include/**".
- 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).
- File name put into swap file should have first part of the path replaced by
- "~user", also when editing a file in somebody else his home directory,
- to make it work from different machines (Webb).
- When entering the help window, don't resize to 'helpheight' if the user has
- reduced the size before (Webb). Keep the window height that the user set
- the window to in a "preferred window height" entry for each window.
- "i" flag to search command: ignore case; "u" flag: use case.
- Add flag to search command to not remember it for "n", e.g. "/foo/n" (not
- remember). Also for ":s/pat//n".
- Add command to display the current search pattern, substitue pattern and last
- used pattern. (Margo)
- Add a command like ":cn" that jumps to the next error, but uses an open window
- for the buffer with the error if possible, and opens a new window
- otherwise. Use ":cj"?
- When in replace mode and 'expandtab' set, make tab look like spaces.
- When started to edit another file, make message "file 1 of 8" different (add
- "not"?).
- When stdin is not a tty, and Vim reads commands from it, an error should make
- Vim exit.
- Allow file name "-" as command line argument: Read file from stdin. Open
- /dev/tty for commands (use "more" "vi" or "vile" as an example how to
- do this).
- Make it possible for the 'showbreak' to be displayed at the end of the line.
- Use a comma to separate the part at the end and the start of the line?
- Highlight the linebreak characters, add flag in 'highlight'.
- Some string options should be expanded if they have wildcards, e.g.
- 'dictionary' when it is "*.h".
- Use a specific type for number and boolean options, making it possible to
- change it for specific machines (e.g. when a long is 64 bit).
- Use context sensitiveness of completion to switch abbreviations and mappings
- off for :unab and :unmap.
- completion of existing mappings for ":unmap", ":unab", etc.
- Local mappings for a buffer. Useful for autocmds. Count for map command is
- buffer number. ":0map bar foo" = enter mapping for current buffer.
- Add option for <Insert> in replace mode going to normal mode. (Nugent)
- Add mappings for replace mode: ":rmap". How do we then enter mappings for
- non-replace insert mode?
- When incsearch used and hitting return, no need to search again in many cases,
- saves a lot of time in big files.
- With incsearch, use CTRL-N/CTRL-P to go to next/previous match, some other key
- to copy matched word to search pattern (Alexander Schmid).
- Add a next/previous possibility to "[^I" and friends. Also for multiple
- matches in the tags file.
- When doing "[^I" or "[^D" add position to tag stack.
- Add command to put current position to tag stack: ":push" or "gp".
- 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.
- Add ":grep" command. Works like ":make" but uses "grep -n" instead of "make",
- 'grepprg' instead of 'makeprg', 'grepformat' instead of 'errorformat'.
- 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) ".
- Add command to form an args list from all the buffers.
- Keep a list of most recently used files for each window, use "gp" to go back
- and "gn" to go forward (like ^O and ^I for jumps) (Webb). Use ":files"
- and ":ls" to list the files in history order.
- Add 'scrollmax' option, maximum number of lines to scroll display, above this
- a redraw is done.
- Add ":alias" command, like ":cmap" or ":cabb", but only for the command name
- and it isn't displayed.
- Implement mouse support for the Amiga.
- xterm: Implement support for visual feedback of mouse dragging.
- 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?!?
- 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, "g^C" goes to absolute position
- (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.
- When a window resizes, the line with the cursor should stay at the same
- percentage from the start of the window as it was before.
- 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 an option to make "." redo the whole mapping.
- Basically: redo the last TYPED command.
- Support URL links for ^X^F in insert mode, like for "gf".
- ":help :s^I" should expand to ":help :substitute".
- Highlight control characters on the screen: Shows the difference between
- CTRL-X and "^" followed by "X" (Colon).
- Amiga: Need terminal input for quickfix, how do we read commands from stdin?
- Integrate parsing of cmdline command and parsing for expansion.
- When inserting a register in insert mode with CTRL-R, don't insert comment
- leader when line wraps?
- 'flipcase' variable: upper/lower case pairs. (alternative: translate command,
- e.g. ":tr \248-\254 \216-\222") (From Elvis, don't like it). Insert
- comma's between pairs and allow a range, e.g. :set flipcase=a-zA-Z,..
- Make the help key (<F1>) context sensitive?
- Create a program that can translate a .swp file from any machine into a form
- usable by Vim on the current machine.
- Add commands to push and pop all or individual options. ":setpush tw",
- ":setpop tw", ":setpush all". ":setflush" resets the option stack.
- Add ":highlight" command to set highlight modes and colors (Webb).
- Have a look at Elvis and Vile's highlighting methods. Also look at
- vgrind/vgrindefs.
- Add option to switch on highlighting all matches from a search that are on the
- screen. Unhighlight as soon as a command is given.
- Add "." command for visual mode: redo last visual command (e.g. ":fmt").
- Add "." command after operator: repeat last command of same operator. E.g.
- "c." will repeat last change, also when "x" used since then (Webb).
- Also: keep history of Normal mode commands, add command to list the
- history and/or pick an older command.
- Also: add ":history" command for command lines and search patterns.
- Add support for both <M-^A> and <~A> in mappings.
- Add ":noro" command: Reset 'ro' flag for all buffers, except ones that have a
- readonly file. ":noro!" will reset all 'ro' flags.
- Make repeating insert faster. Don't redisplay the screen.
- Add "KeyWasTyped" flag: It's reset before each command and set when a
- character from the keyboard is consumed. Value is used to decide to
- put a command line in history or not. Put line in history if it didn't
- completely resulted from one mapping.
- 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.
- The ":@r" commands should take a range and execute the register for each line
- in the range.
- Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'. Combine the
- two into a regex for searching. (Ned Konz)
- When selecting in visual block mode, use curswant instead of cursor column.
- (Webb 97) adjust 'o' command etc.
- 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.
- Support the "abbreviate" command in modelines (Kearns). Careful for
- characters after <Esc>, that is a security leak.
- Make it possible to set options from modelines only temporarily for that file
- (needs a stack for saving old options).
- Make '2' option in 'formatoptions' also work inside comments.
- Consider adding patches/list_indent (indenting for bullet lists).
- 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).
- Make smartindenting configurable. Add 'sioptions', e.g. '#' setting the indent
- to 0 should be switched on/off.
- For smart indent: When typing 'else' line it up with matching 'if'.
- Add commands ":C", ":P" and ":X". ":C" does encryption and ":P" the same as
- ":p". What should they do exactly?
- 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 */).
- Add 'mapstop' command, to stop recursive mappings.
- Should not call cursorcmd() for each vgetc() in getcmdline().
- Add the ex address '}', next empty line (like the "}" command).
- Add command line completion for ":ilist" and friends, show matching
- identifiers (Webb).
- 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.
- 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).
- ":split file1 file2" adds two more windows (Webb).
- Add the possibility to use more than one argument list: ":arglist 2".
- Add command to show last search pattern and substitute string. Maybe make it
- accessible through a register ("/ for search string)?
- When mouse click after 'r' command, get character that was pointed to.
- For duplicate tags: Add commands ":ntag", "Ntag", ":prevtag", ":rewtag",
- :lasttag". Make CTRL-D listing of matching tags more informative. Keep
- count for tag index in the tag stack, so CTRL-T and :ta work.
- Don't give message "Incomplete last line" when editing binary file.
- When writing a file, name it "foo.new". Then rename "foo" to "foo.bak" and
- "foo.new" to "foo". If dir is not writable or on write error copy
- "foo" to "backupdir/foo.bak" and overwrite "foo". Check for correct
- group/owner and try to set it if not. NO: this breaks with hard links.
- INSTEAD: make Amiga and MSDOS work like unix: first make copy of file,
- then truncate and overwrite original file. Use an option for this,
- default on for Unix, off for Amiga/MSDOS (Sayre has the algorithm
- worked out).
- When appending to a file, should Vim also make a backup and a 'patchmode'
- file?
- Only make a backup when overwriting a file for the first time. Avoids loosing
- the original when writing twice. (Slootman)
- On non-Unix machines, also overwrite the original file in some situations
- (file system full, it's a link on an NFS partition).
- Add number option to ":s//2": replace second occurance of string? Or:
- :s///N substitutes N times.
- Add ":a", ":i" for preloading of named buffers.
- In Replace mode, tab replaces as many characters as it takes on the screen,
- text remains at the same position. Requires replace-stack to work with
- strings instead of characters? Implement 'replacealign' in a different
- way from Webb.
- Allow autowrite when doing ":e file" (with an option 'eaw').
- Make command line arguments options to be combined after a single dash, eg
- "-nb".
- Allow a "+command" argument before each file name in the Vim command line:
- "vim +123 file1 +234 file2 +345 file3".
- When entering text, keep other windows on same buffer updated (when a line
- entered)?
- Bind windows together, scrolling is done in both windows synchronous
- (horizontally and vertically). Use CTRL-W b?
- Change ".swp" to ".vim", because it give a hint who created the file?
- Use termcap 'ts' and 'fs' entries for setting the window title. Check 'hs'
- and use minimum of 'ws' (if present) and Columns to truncate the title.
- In dosub() regexec is called twice for the same line. Try to avoid this.
- When line is too long to fit on screen, display part where cursor is (like
- nvi). Use an offset to the start of the first line on the screen.
- 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.
- :s///p prints the line after a substitution.
- Updatescript() can be done faster with a string instead of a char.
- When searching with 'n' give message when getting back where the search first
- started. Remember start of search in '/ mark.
- Add option that scrolls screen to put cursor in middle of screen after search.
- Add \! to search patterns: matches string that does not match previous atom.
- Screen updating is inefficient with CTRL-F and CTRL-B when there are long lines.
- Uppercase characters in ex commands can be made lowercase?
- Filtering a block should only apply to the block, not to the whole lines. When
- the number of lines is increased, add lines. When decreased, padd with
- spaces or delete? Use ":`<,`>" on the command line.
- CTRL-V :s should substitute only in the block.
- CTRL-V > should move the block, not whole lines.
- Add commands to move selected text, without deselecting.
- Add visual command to swap selected text with unnamed buffer.
- Add "P" command to insert contents of unnamed buffer, move selected text to
- position of previous deleted (to swap foo and bar in " + foo")
- In out-of-memory situations: Free allocated space in undo (after asking).
- When memory gets low, reduce the number of undo levels (with confirmation).
- Insert octal numbers with CTRL-V o, hexadecimal with CTRL-V x and binary
- with CTRL-V b.
- 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>.
- Add option to show character value under the cursor in octal, decimal, hex and
- screen code all the time (like 'ruler' plus "g CTRL-G").
- Add option to show characters in text not as "|A" but as decimal ("^129"), hex
- ("\x81") or octal ("\201") or meta (M-x).
- 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).
- Amiga: ExpandWildCards in amiga.c: don't expand if there are no wildcards.
- unix: Speedup wildcard expansion of "*", "~" and "$": do it internally, more
- complicated things can still be done with the shell.
- In regexp.c: "\^" after "\|" or "\(" is start of line, and "\$" before "\|"
- and "\)" is end of line.
- Option to set time for emsg() sleep. Interrupt sleep when key is typed? sleep
- before second message?
- Delete message after new command has been entered and have waited for key.
- History stack for . command? Use "g." command.
- Use insert/delete char when terminal supports it.
- With undo with simple line delete/insert: optimize screen updating.
- Optimize screen redraw for slow terminals.
- Add "-d null" for editing from a script file without displaying.
- MSDOS: search for _exrc in the directory where the binary is, instead
- of using $VIM\_exrc.
- 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 possibility to put the value of an option into the text: "'lines'p
- Unix: WildExpand: Without csh file name with embedded space will be split in
- two.
- With wildcard expansion after '%' and '#', expand current/alternate file name,
- so it can be edited.
- 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).
- Nopaste option: Mappings with non-printable characters are OK.
- Add 'indent' option: Always use this amount of indent when starting a new line
- and when formatting text.
- Use pipes for filtering on Unix.
- Allow for +command and -option on any position in argv[].
- 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.
- After :set nowrap remove superflous redraw with wrong hor. offset if cursor
- is right of the screen.
- Recognize "$*" in 'makeprg'; replace it by the arguments to :make.
- Allow multiple arguments to :unmap.
- With :s///c replace \&, ~, etc. when showing the replacement pattern.
- In insert mode add # for CTRL-R (alternate filename).
- Command line: cursor up on empty line: go to previous command, on non-empty
- line: go to previous matching command.
- Add text justification option.
- When the edited file is a symlink, try to put the .swp file in the same dir as
- the actual file. Adjust FullName().
- Add put function that replaces the text under it.
- After "inv"ing an option show the value: ":set invpaste" gives "paste is off".
- Check handling of CTRL-V and '\' for ":" commands that do not have TRLBAR.
- When a file cannot be opened but does exist, give error message.
- Amiga: When 'r' protection bit is not set, file can still be opened
- but gives read errors. Check protection before opening.
- When writing check for file exists but no permission, "Permission denied".
- If file does not exists, check if directory exists.
- MSDOS: although t_cv and t_ci are not set, do invert char under cursor.
- Settings edit mode: make file with ":set opt=xx", edit it, parse it as
- ex commands.
- ":set -w all": list one option per line.
- When writing to a not writable file (with ":w!") ask for permission to
- overwrite it (if file can be made writable) and restore file to readonly
- afterwards.
- Amiga: test for 'w' flag when reading a file.
- Error message for ambiguous mapping: Include the arguments.
- :table command (Webb)
- Add command to go to last non-blank in line (like 0 vs. ^, $ vs. ???)
- With blockwise visual mode and "c" command, insert same text in every line.
- With "r" replace all chars in visual area witht the next char. With
- "C" replace each line with entered text (go to next line with <CR>).
- With "i" insert the same text in front of the block in each line.
- Add new operator: clear, make area white (replace with spaces): "gb".
- For 'shell' option add possibility to give arguments for fast start (e.g. -f).
- Not to be used for ":shell".
- Make ":sleep" accept floating point numbers, like ":sleep 0.01".
- Support multiple search buffers, so macros can be made without side effects.
- On the command line, where a % is expanded: "%:s/r/s/" substitution (Dixon)
- patches/dixon.329
- Add command to ":read" a file at a certain column (blockwise read?).
- Include several sets of options. Make settings from modelines valid only in
- the file where they were set, reset when exiting that file.
- Add option to set the characters for "%", 'matchpairs', default "{,};(,)".
- Could set to "{,};(,);/*,*/;<,>". Or 'matchstrings' =
- (/*,*/),(^#if,^#else,^#endif). Also: set hierarchy for which things
- include other things that should be ignored (like "*/" inside /* */).
- Add 'resizecmd' option: vi command to be executed when window is resized.
- Add sort of replace mode where case is taken from the old text (Goldfarb).
- When 'backup' is not set and 'writebackup is set, use a unique name for the
- backup file, don't deleted the ".bak" file.
- Allow multiple arguments for ":edit", add them to the argument list.
- 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.
- Add possibility to ":jumps" to show the text in the line (for loaded files).
- Only show the part of the line that fits in the current screen width and
- contains the mark. Highlight the column with the mark. Show
- "<not loaded>" for not loaded buffers. Also for ":tags" and ":marks".
- Each swap file should include a flag that shows if the swapfile contains any
- changes. Report this when giving the ATTENTION message.
- Add visual command to do rot13 encoding.
- 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).
- 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"?
- Allow any character except white space in abbreviations lhs (Riehm).
- 'edit' option: When off changing the buffer is not possible (Really read-only
- mode).
- Allow multiple arguments to ":stag", make one window for each.
- 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)?
- Add command to go to Nth character in the file, "123g|"?
- Add an option to ":map" that makes it display the special keys in byte values
- instead of <>.
- Command to show keys that are not used and available for mapping ":freekeys".
- Add a way to execute a mapping when entering a window (something like autocmd,
- but always executed when entering another window).
- Allow completion with all words in the current AND the other opened buffers.
- Add 'echo' option: When off don't echo shell commands.
- 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?
- Add a command (for visual mode?) to capitalize the first letter of some words.
- (Haritsis)
- In Insert mode (and command line editing?): Allow undo of CTRL-U (and CTRL-W,
- delete and backspace) (Marinichev).
- Make contents of status line configurable, with a printf-like format string.
- Add include files for emacs-tags files (David Brown).
- Option to make a .swp file only when a change is made (Templeton).
- Make CTRL-C on Unix generate a signal, avoid using select() to check for a
- CTRL-C (it's slow).
- Add "+=" and "-=" to option setting: add or remove parts of a string option,
- add or subtract a number from a number option. How do we insert in
- front/at the end of a sting option? Automatically add a comma?
- Support mapping for replace mode and "r" command (Vi doesn't do this)?
- Set boolean options on/off with ":set paste=off", ":set paste=on".
-
- From Elvis:
- fontchanges recognized "\\fB" etc.
- :color command
- :if and friends, conditional statements
- Read .exfilerc when starting to edit a new file (can be used to load macros for
- specific file type).
- Change cursor shape in command/insert mode. Use options t_cun (normal mode),
- t_cuv (visual mode), t_cur (replace mode), t_cui (insert mode), t_cuc
- (command line mode), t_cuq (back to standard cursor).
- Search patterns:
- \{m,n\} match at least m and at most n of preceding pattern.
- \= match empty string, leave cursor here.
- \@ match word under cursor.
- but do:
- \{m,n\} m to n matches. \{m\} is m matches, \{m,\} is at least m
- matches, \{,n\}: up to n matches.
- \@ leave the cursor "at" this position
- \w match the word under the cursor
- \W match the WORD under the cursor.
-
- From nvi:
- 'cdpath' option.
- Allow editing lines that do not fit in the window.
-
- From xvim:
- Use '\' before commands to make them linewise.
- 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:]
- Use "\s" for "space" characters (like Perl): space, tab, newline, etc.
- Add option to switch on matches crossing ONE line boundary.
- Add register for '?' and '/' commands? (yank_buf()).
- Remember last cursor position, optimize setcursor().
- Add :collapse, remove multiple blank lines (Demirel, Webb)?
-
- From xvi:
- CTRL-_ : swap 8th bit of character
- Add egrep-like regex type, like xvi (Ned Konz)
-
- From vile:
- Show unprintable characters in hex. (or in octal)
- When horizontal scrolling, use '<' and '>' for lines continuing outside of
- 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 extentions:
-
- Make it possible to edit a register, in a window, like a buffer.
- Highlighting of different kinds of text (e.g. for showing variables, keywords).
- Mode to keep C-code formatted (sort of on-line indent). Use colors for
- keywords, comments, etc.
- Add Ex mode (some people like to use it).
- Add macro language with real functions (Perl, TCL?).
- Allow vertical splitting of screen (once?).
- Option for filter when reading/writing a file for compression or crypting (-x
- command line option, -z option: gzip/gunzip). Also for crypting the
- swap file. Support compression of documentation files.
- Allow editing beyond end of line, just like there are all spaces. Switch this
- on with an option or special insert mode command. Also allow editing
- above start and below end of buffer.
- When executing macro's: Save each line for undo only once.
- Make undo more memory-efficient: Compare text before and after change, only
- remember the lines that really changed. When calling u_save with a
- single line, don't save it if line is already saved for undo.
- When doing a global substitute, causing almost all lines to be changed, undo
- info becomes very big. Put undo info in swap file??
- When inserting/deleting characters in a line, adjust marks.
- Smart cut/paste: recognize words and adjust spaces before/after them.
- Option verbose; when on keep the screen uptodate, when off only redisplay when
- input needed. Also possible to use Vim from a shell script.
- Change the output to the message line. Don't redraw the screen until the next
- vi command. Remember message line for redraw. Integrate the command line
- in updateScreen().
- Mode to keep text formatted while inserting/deleting. Use soft/hard returns
- with an option to switch this off.
- Korn-shell or tcsh like command line editing (like editing a single line with
- vi). Use :cmap! for mappings. Can be implemented like a buffer containing
- command lines. Use CTRL-O instead of <Esc>, to remain vi-compatible?
- Add column numbers to ":" commands ":line1,line2[col1,col2]cmd". Block can be
- selected with CTRL-V. Allow '$' (end of line) for col2.
- Add 'hidecomment' option: don't display comments in /* */ and after //.
- 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).
- Add a command or option to save the current editing session (which files are
- open, window sizes, file positions, etc.), so it can be resumed later.
- Perform commands on multiple windows (:W%s/foo/bar/g), multiple arguments (:A)
- or multiple buffers (:B). Implement ":Bset", set option in all
- buffers. Also ":Wset", set in all windows, ":Aset, set in all
- arguments and ":Tset", set in all files mentioned in the tags file.
- Add buffer/arg range, like in ":2,5B%s/..." (do we really need this???)
- Add search string: "B/*.c/%s/.."? Or ":F/*.c/%s/.."?
- Support for underlining (underscore-BS-char), bold (char-BS-char) and other
- standout modes switched on/off with , 'overstrike' option (Reiter).
- Add vertical mode (Paul Jury, Demirel): "5vdw" deletes a word in five lines,
- "3vitextESC" will insert "text" in three lines, etc..
- Internationalization: wide characters and multibyte char support.
- When editing a readonly file, don't use a swap file but read parts from the
- original file.
- 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
-
- vim:ts=4:tw=78:sw=4:
-