home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-09-25 | 139.1 KB | 2,700 lines | [TEXT/MPS ] |
- *todo.txt* For Vim version 5.5. Last change: 1999 Sep 19
-
-
- VIM REFERENCE MANUAL by Bram Moolenaar
-
-
- TODO list for Vim *todo*
-
- This is a veeeery long list of known bugs, current work, and desired
- improvements. To make it a little bit accessible, the items are grouped by
- subject. In the first column of the line a classification is used to be able
- to look for "the next thing to do":
-
- Priority classification:
- 9 next point release
- 8 next release
- 7 as soon as possible
- 6 soon
- 5 should be included
- 4 nice to have
- 3 consider including
- 2 maybe not
- 1 probably not
- - unclassified
-
- Plan:
- 1. Following 5.x releases will be the "stable" branch. Bug fixes only.
- 2. Start work on version 6.0, the "unstable" branch. Many new features to be
- included. First of all: Folding.
-
- See |votes-for-changes| for a list of votes on desired changes in Vim.
- See |develop.txt| for development plans.
-
- *known-bugs*
- -------------------- Known bugs and current work -----------------------
-
- Vi incompatibility:
- 8 With undo/redo only marks in the changed lines should be changed. Other
- marks should be kept. Vi keeps each mark at the same text, even when it
- is deleted or restored. (Webb) Also: A mark is lost after: make change,
- undo, redo and undo.
- 8 When using ":s" to split a line, marks are moved to the next line. (Geddes)
- 8 When using ":n" ":rew", the prev. context mark is in the same place as the
- cursor, not on the first line.
- 8 text is put in register 1 when using "c" and "d" with a motion character:
- <control-A> % ( ) `<character> / ? N n { }
- (from Nvi manual).
- 8 When stdin is not a tty, and Vim reads commands from it, an error should
- make Vim exit.
- 8 Unix Vim (not gvim): Typing CTRL-C in Ex mode should finish the line
- (currently you can continue typing, but it's truncated later anyway).
- 8 When loading a file in the .exrc, Vi loads the argument anyway. Vim skips
- loading the argument if there is a file already. When no file argument
- given, Vi starts with an empty buffer, Vim keeps the loaded file. (Bearded)
- 8 In Insert mode, when using <BS> or <Del>, don't wipe out the text, but
- only move back the cursor. Behaves like '$' in 'cpoptions'. Use a flag
- in 'cpoptions' to switch this on/off.
- 8 When editing a file which is a symbolic link, Vim opens another symbolic
- link on the same file under the name of the first one. Adjust the file
- name in the buffer to the last one used? Use several file names in one
- buffer???
- 7 The ":g/re/p" command overwrites the command. This makes it difficult to
- see where the text ends and the matches start. Add a 'cpoptions' flag for
- this?
- The ":map" command does the same. Perhaps it should keep the ":map" when
- it's used without arguments?
- 7 When interrupting reading a file, Vi considers the buffer modified. Add a
- 'cpoptions' flag for this (we don't want it modified always to be able to
- do ":q")?
- 7 CTRL-L is not the end of a section? It is for Posix! Make it an option.
- 7 Implement 'prompt' option. Init to off when stdin is not a tty.
- 7 CTRL-T in Insert mode inserts 'shiftwidth' of spaces at the cursor. Add a
- flag in 'cpoptions' for this.
- 7 Add a way to send an email for a crashed edit session. Create a file when
- making changes (containing name of the swap file), delete it when writing
- the file. Supply a program that can check for crashed sessions (either
- all, for a system startup, or for one user, for in a .login file).
- 7 Vi doesn't do autoindenting when input is not from a tty (in Ex mode).
- 7 "z3<CR>" should still use the whole window, but only redisplay 3 lines.
- 7 ":tag xx" should move the cursor to the first non-blank. Or should it go
- to the match with the tag? Option?
- 7 Implement 'autoprint'/'ap' option.
- 7 Add flag in 'cpoptions' that makes <BS> after a count work like <Del>
- (Sayre).
- 7 Add flag in 'cpoptions' that makes operator (yank, filter) not move the
- cursor, at least when canceled. (default vi compatible).
- 7 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'?
- 7 This Vi-trick doesn't work: "Q" to go to Ex mode, then "g/pattern/visual".
- In Vi you can edit in visual mode, and when doing "Q" you jump to the next
- match. Nvi can do it too.
- 7 Support '\' for line continuation in Ex mode for these commands: (Luebking)
- g/./a\ g/pattern1/ s/pattern2/rep1\\
- line 1\ line 2\\
- line 2\ line 3\\
- . line4/
- 6 ":e /tmp/$tty" doesn't work. ":e $uid" does. Is $tty not set because of
- the way the shell is started?
- 6 After ":cd", meaning of file names for existing buffers changes. Do we
- care?
- 6 Vi compatibility (optional): make "ia<CR><ESC>10." do the same strange
- thing. (only repeat insert for the first line).
-
-
- GTK+ GUI known bugs:
- 9 Can't paste a Visual selection from GTK-gvim to vim in xterm when it is
- longer than 4000 characters. Works OK from gvim to gvim and vim to vim.
- This is a GTK problem.
- 9 With the guifont "-*-clean-medium-r-*-*-8-*-*-*-*-80-*" bold characters
- are drawn wrong. Try on C source code. Probably a font problem. Check
- font cell size and use bold font trick if it's wrong?
- 8 Menu item ordering is not according to priority.
- 8 'mousefocus' doesn't work. (Roemer)
- 8 Some keys don't work: Shift-TAB, CTRL-@.
- 8 When using "gvim -geom 40x30" or setting 'columns' in .gvimrc or with a
- GUIEnter autocommand, the width is still set to fit the toolbar. Also
- happens when changing the font. How to avoid that the toolbar specifies
- the minimal window width?
- 8 Changing GTK themes isn't handled correctly. Background color is wrong
- when scrolling with keyboard commands. Selection has no color. (Akkerman)
- 8 Implement "no" value for 'winaltkeys': don't use Alt-Key as a menu
- shortcut, when 'wak' changed after creating the menus.
- 8 Dialogs sometimes appear a bit far away. Apply a patch from brent verner
- to make it work better?
-
-
- Win32 GUI known bugs:
- 9 Clipboard doesn't always work as it should:
- - Selecting text while editing a command-line has an implied copy to the
- clipboard. Remove this, and add a command character to copy/cut/delete
- the selected text (used in the popup menu).
- - When selecting at the more-prompt or hit-return-prompt right mouse
- button doesn't give popup menu. Also has an implied copy to the
- clipboard. Use the popup menu "Copy" entry for that.
- 9 When there are more than 32767 lines, the scrollbar has a roundoff error.
- Clicking the up or down error scrolls two lines or more. Looks like there
- is an extra event that reports the new position of the scrollbar.
- 9 The "Edit with Vim" registry entry really causes trouble for MS-Office
- users. Can this be avoided?
- 8 When 'grepprg' doesn't execute, the error only flashes by, the
- user can hardly see what is wrong. (Moore)
- Could use vimrun with an "-nowait" argument to only wait when an error
- occurs, but "command.com" doesn't return an error code.
- 8 When the 'shell' cannot be executed, should give an appropriate error msg.
- 8 MessageBox used for error messages can be too big. There is no way to
- scroll it, or even hit the OK button (but you can hit return).
- 7 Add an option to disable adding a pixel row for bold and italic fonts?
- Same option as for multy-byte (patch from Nam)?
- 7 At the hit-return prompt scrolling now no longer works. Need to use the
- keyboard to get around this. Pretend <CR> was hit when the users tries to
- scroll?
- 7 'mousefocus' is disabled until the next mouse click, when trying to exit
- by hitting the X in the title bar. (Webb)
- 7 Scrollbar width doesn't change when selecting other windows appearance.
- Also background color of Toolbar and rectangle below vert. scrollbar.
- 7 "!start /min cmd" should run in a minimized window, instead of using
- "/min" as the command name. (Rogall)
- 6 Drawing text transparantly doesn't seem to work (when drawing part cursor).
- 8 CTRL key doesn't always work in combination with ALT key. It does work
- for function keys, not for alphabetic characters.
- 8 CTRL-- doesn't work for AZERTY, because it's CTRL-[ for QWERTY. How do we
- know which keyboard is being used?
- 8 When using ":se guifont=Courier_New" bold chars leave pixels behind, in
- front of a character, after a TAB. (McRae)
- 7 When scrolling, and a background color is dithered, the dither pattern
- doesn't always join correctly between the scolled area and the new drawn
- area (Koloseike).
- 7 File/Print uses notepad, which puts the name of the temp file on top of
- each page. How do we get the actual file name there?
- 8 install.exe, vimrun.exe and ctags are not build from Gvim_vc.mak. When
- added, check that this works from the command line and from the IDE.
- 8 ":r !mycommand" doesn't pass the environment to the external command.
- 8 When dropping a shortcut on gvim (.lnk file) should edit the target, not
- the shortcut itself.
- 9 OleVim doesn't send <C-\><C-N>, which causes trouble if Vim is in Insert
- mode. (Thakkar)
-
-
- Athena GUI:
- 9 Use one of the Syntax menu items. Then ":aunmenu Syntax", Vim crashes.
- Also crashes when using Buffers.Refresh.
- 9 When using ":unmenu" in menu item, the reversing of menu items is wrong.
- Happens with Syntax/manual. Problem with not removing the reversed text
- when destroying the menu item? For Rochholz Vim crashes.
- 9 Because destroying a menu can cause a crash, it is not destroyed but
- unmanaged. The destoyed Widgets are remembered, this list is never
- cleaned up.
- 9 Menu ordering doesn't work.
- 9 When using "menu a.b.c.d lll", the "b" submenu does not disappear.
- 8 When "j" or "k" repeated quickly, display is messed up (Lauther).
- 8 Has extra stripes here and there. (Zeitlin).
- When dragging last status line with the mouse, small black lines appear in
- the command line pseudo-scrollbar (only when status line moved quickly).
- 7 The file selector is not resizable. With a big font it is difficult to
- read long file names. (Schroeder)
-
-
- Motif GUI:
- 9 When starting GUI with ":gui" while 'writedel' is non-zero, escape
- sequences are split up. Motif version crashes.
- 9 Motif 1.2: Adding many menu items, making two rows, still doesn't work
- properly on HPUX.
- 8 Implement ":tearoff".
- 9 When using the right mouse button, for some people gvim freezes for a
- couple of seconds. This doesn't happen when there is no Popup menu.
- (Halevy)
- 8 Popup menu ordering is wrong.
- 8 Dialog: Pointer should be moved to the default button. Accelerators don't
- work yet.
- 8 Lesstif: Adding a menu item that doesn't fit crashes Vim.
- 8 Lesstif 0.88: Using tear-off menu causes a few warnings. When using
- "Refresh" in a tear-off buffer menu it becomes empty (because the menu was
- deleted?).
- 8 Lesstif: When deleting a menu that's torn off, the torn off menu becomes
- very small instead of disappearing. When closing it, Vim crashes.
- (Phillipps)
- 5 There is a small white box that appears in the upper left-hand corner of
- the root window. It appears to be a problem with the popup menu. When
- the popup menu is removed from runtime/menu.vim, the little box no longer
- appears. Stepping through the debugger, the box appears when
- gui_x11.c::gui_mch_menu_hidden() handles a popup menu.
-
-
- GUI:
- 9 On Solaris, creating the popup menu causes the right mouse button no
- longer to work for extending the selection. (Halevy)
- 9 When running an external program, it can't always be killed with CTRL-C.
- e.g. on Solaris 5.5, when using "K" (Keech). Other 'guipty' problems on
- Solaris 2.6. (Marley)
- 9 On Solaris: Using a "-geometry" argument, bigger than the window where Vim
- is started from, causes empty lines below the cmdline. (raf)
- 8 Basic flaw in the GUI code: NextScreen is updated before calling
- gui_write(), but the GUI code relies on NextScreen to represent the state
- of where it is processing the output.
- Need better separation of Vim core and GUI code.
- 8 When fontset support is enabled, setting 'guifont' to a single font
- doesn't work.
- 8 Menu priority for sub-menus for: Athena, Amiga, Mac, VMS, BeOS.
- 8 Commands to enable/disable menu entries. Patch in HierAssist. (Shah)
- 8 Add menu separators for Athena, Amiga, Mac, RISCOS.
- 8 Add dialog for search/replace to other GUIs? Tk has something for this,
- use that code? Or use console dialog.
- 8 gui_check_colors() is not called at the right moment. Do it much later,
- to avoid problems.
- 8 gui_update_cursor() is called for a cursor shape change, even when there
- are mappings to be processed. Only do something when going to wait for
- input. Or maybe every 100 ms?
- 8 X11: When the window size is reduced to fit on screen, there are blank
- lines below the text and bottom scrollbar. "gvim -geometry 80x78+0+0".
- When the "+0+0" is omitted it works.
- 8 When the character cell of some fonts is different (ascent/descent), the
- cursor leaves an underline behind (Hiebert).
- 8 When starting an external command, and 'guipty' set, BS and DEL are mixed
- up. Set erase character somehow?
- 8 A dead circumflex followed by a space should give the '^' character
- (Rommel). Look how xterm does this.
- Also: Bednar has some code for dead key handling.
- 8 The compose key doesn't work properly (Cepas). Both for Win32 and X11.
- 7 The compiled-in highlight defaults allocate colors, which will never be
- freed. Move them to a startup script? Only use bold and underline for
- the compiled-in defaults.
- 7 The cursor in an inactive window should be hollow. Currently it's not
- visible.
- 8 With wrapping lines, clicking below the scrollbar thumb moves more than a
- screenfull of lines. Adjust the thumb size when lines wrap.
- 7 GUI on Solaris 2.5.1, using /usr/dt/..: When gvim starts, cursor is
- hollow, after window lowered/raised it's OK. (Godfrey)
- 7 When starting GUI with ":gui", and window is made smaller because it
- doesn't fit on the screen, there is an extra redraw.
- 8 When setting font with .Xdefaults, there is an extra empty line at the
- bottom, which disappears when using ":set guifont=<Tab>". (Chadzelek)
- 8 When font shape changes, but not the size, doing ":set font=" does not
- redraw the screen with the new font. Also for Win32.
- When the size changes, on Solaris 2.5 there isn't a redraw for the
- remaining part of the window (Phillipps).
- - Flashes really badly in certain cases when running remotely from a Sun.
-
-
- MSDOS/DJGPP:
- 9 DOS: Make CTRL-Fx and ALT-Fx work.
- CTRL-F1 = CE-5E, CTRL-F2 = CE-5F, .., CTRL-F10 = CE-67
- ALT-F1 = CE-68, ALT-F2 = CE-69, .., ALT-F10 = CE-71
- Shifted cursor keys produce same codes as unshifted keys. Use bioskey(2)
- to get modifier mask for <S-C-M-Fx>.
- Use CSI codes to insert modifier mask in input stream? Make this work
- like in the GUI, but do handle a typed CSI.
- Mapping things like <M-A> doesn't work, because it generates an extended
- key code. Use a translation table?
- 9 Can't read an opened swap file when the "share" command has not been used.
- At least ignore the swap files that Vim has opened itself.
- 8 Vim busy waits for new characters or mouse clicks. Should put in some
- sort of sleep, to avoid eating 50% of the CPU time. Test on an unpatched
- Windows 95 system!
- 8 DJGPP: ":mode" doesn't work for many modes. Fix "fast" text output
- functions?
- 7 F11 and F12 under MSDOS don't work. Can this be fixed? Check the
- interrupt list for a BIOS function for an extended keyboard.
- 7 Hitting CTRL-P twice quickly (e.g. in keyword completion) on a 8088 machine,
- starts printer echo! (John Mullin).
- 7 MSDOS 16 bit version can't work with COMSPEC that has an argument, e.g.:
- COMSPEC=C:\WINDOWS\COMMAND.COM /E:4096 (Bradley)
- Caused by BCC system() function (Borland "make" has the same problem).
- 8 Check if with DJGPP 2.01 the problem of a path starting with a backslash is
- still present.
- 8 Mouse: handle left&right button pressed as middle button pressed. Add
- modifier keys shift, ctrl and alt.
- 7 When too many files are open (depends on FILES), strange things happen.
- The Dos16 version runs out of memory, in the Dos32 version "!ls" causes a
- crash. Another symptom: .swp files are not deleted, existing files are
- "[New file]".
- 7 DJGPP version doesn't work with graphics display mode. Either disallow
- them or switch to system functions.
-
-
- MSDOS, OS/2 and Win32:
- 8 OS/2: Add backtick expansion. Undefine NO_EXPANDPATH and use
- gen_expand_wildcards().
- 8 Win32 console: <M-Up> and <M-Down> don't work. (Geddes) We don't have
- special keys for these. Should use modifier + key.
- 8 Environment variables in DOS are not case sensitive. Make a define for
- STRCMP_ENV(), and use it when comparing environment var names.
-
-
- Windows 95:
- 8 Editing a file by it's short file name and writing it, makes the long file
- name disappear. Use Unix method for making a backup file? Better: make
- the way the backup file is made (copy or rename) an option, not a #define
- (also needed for OS/2, the icon goes to the backup file).
- Use FindFirstFile()->cAlternateFileName in fname_case() (George).
- 8 Doing wildcard expansion, will match the short filename, but result in the
- long filename (both DJGPP and Win32).
-
-
- Win32 console:
- 9 When editing a file by its short file name, it should be expanded into its
- long file name, to avoid proplems like these: (Mccollister)
- 1) Create a file called ".bashrc" using some other editor.
- 2) Drag that file onto a shortcut or the actual executable.
- 3) Note that the file name is something like BASHRC~1
- 4) Go to File->Save As menu item and type ".bashrc" as the file name.
- 5) Press "Yes" to indicate that I want to overwrite the file.
- 6) Note that the message "File exists (use ! to override)" is displayed
- and the file is not saved.
- Use FindFirstFile() to expand a file name and directory in the path to its
- long name.
- 8 Add an option (command line?) not to switch console buffers. Required for
- telnetd (Ford). Change termcap_mode_start() and termcap_mode_end().
- Test with ataman telnet daemon.
- 8 Also implement 'conskey' option for the Win32 console version? Look at
- how Xvi does console I/O under Windows NT.
- 7 Re-install the use of $TERM and support the use of different terminals,
- besides the console.
- 8 Use of <altgr> modifer doesn't work? 5.3 was OK. (Garcia-Suarez/Guckes)
- 9 Mapping <C-S-Tab> doesn't work correctly.
- 9 tmpnam() uses file in root of file system: "\asdf". That doesn't work on
- a Netware network drive. Use same function as for Win32 GUI?
- 8 When exiting, sends ^M^M^J to the console in raw mode (Webb).
-
-
- Amiga:
- 9 In mch_expandpath() a "*" is to be expanded, but "\*" isn't. Remove
- backslashes in result.
- 8 Executing a shell, only one option for 'shell' is separated. Should do
- all options, using white space separation.
-
-
- Macintosh:
- 9 In mac_expandpath() check that handling of backslashes is done properly.
-
-
- VMS:
- 9 Make a runtime archive for VMS.
- 8 VMS: Inserts <NL> every 8291 bytes when writing. (Howie) 4.5 didn't have
- this problem. It's caused by the write() function, need to write() every
- line separately. It seems read() also returns a single line. Switch I/O
- to binary mode somehow?
- 7 Lots of code in common with os_unix.c, but many fixes are missing. For
- example, usage of t_ts and t_fs.
-
-
- "Small" problems:
- 9 optwin.vim: Restoring a mapping for <Space> or <CR> is not correct for
- ":noremap". Add "mapcmd({string}, {mode})? Use code from ":mkexrc".
- 8 When some features are disabled, the related commands cannot check for a
- following command: ":syntax", ":[id]jump", ":[id]search", "[id]list" and
- "[id]split". Add special function to check for a trailing argument when
- the feature is not included.
- 9 When starting gvim in an xterm, Vim sends t_vi and t_ve to the terminal
- (cursor invisible/visible). Should not happen.
- 9 On non-Unix systems it's possible to write over a readonly file, when
- 'readonly' is not set. Need to check the file permissions explicitly.
- Add a mch_writable(perm) function for each OS.
- 9 incsearch is incorrect for "/that/<Return>/this/;//" (last search pattern
- isn't updated).
- 9 term_console is used before it is set (msdos, Amiga).
- 9 Get out-of-memory for ":g/^/,$s//@/" on 1000 lines, this is not handled
- correctly. Get many error messages while redrawing the screen, which
- cause another redraw, etc.
- 9 Using "-FOlimit,2000" may actually reduce optimization. How to catch a
- warning for this?
- 9 When a library is added twice, it will add to the size of Vim. E.g. for
- "-lXt". Remove the first one?
- 8 Vim can overwrite a read-only file. ":w" can't overwrite an existing
- file, "w!" can, but perhaps not a read-only file? Then use ":w!!" for
- that.
- 8 Is calling msg_start() in main() really needed? Any printed message
- should include it already.
- 8 When in Insert mode with 'scrolloff' set, inserting text at the end of the
- file, "!" lines will stay there while they could be used. (Park)
- 8 When writing an encryption file the extra 12 bytes are not reported, but
- when reading they are. Be consistent! (Colombo)
- 8 Unix in an xterm: Select something on the cmdline; go back to text; now
- <S-MiddleMouse> pastes the selection, but <MiddleMouse> doesn't. Xterm
- first tries getting the primary selection, and if that doesn't work it
- gets CUT_BUFFER0.
- 8 "fg" and "bg" don't work in an xterm. Get default colors from xterm with
- an ESC sequence. See ~/vim/patches/vikas.xtermcolors .
- 8 For xterm need to open a connection to the X server to get the window
- title, which can be slow. Can also get the title with "<Esc>[21t", no
- need to use X11 calls. This returns "<Esc>]l{title}<Esc>\".
- 8 Add term entries for function keys on xterm with alt and ctrl (new in pl
- 94). E.g., Control adds ";5" in "<Esc>[20;5~". Find a generic way to
- prepend a modifier in console mode, to avoid having to specify each
- individual modified key.
- 8 When the builtin xterm termcap contains codes that are not wanted, need a
- way to avoid using the builtin termcap.
- 8 '[ and '] should be set to start/end of line when using a linewise operator
- (e.g., ":w").
- 8 CTRL-A can't handle big "long" numbers, they become negative. Check for
- "-" character, if not present, use unsigned long.
- 8 Make it possible to disable the special meaning of "#" in the first column
- for ">>".
- 8 When doing ":qa", and there is a change in a buffer that is being edited
- in another window, the current window will also be editing the buffer with
- the change. Should jump to the window with the changed buffer.
- 8 Should replace "screen_Columns" with "Columns", and use "new_Columns" for
- the value to be used for Columns. Same for "Rows". Helps when using a
- GUI with threads.
- 8 Add suspending with CTRL-Z at the "more" prompt, and when executing a long
- script in do_cmdline().
- 8 When using 'hidden', many swap files will be open. When Vim runs into the
- maximum number of open files, error messages will appear. Detect that
- this problem is present, and close any hidden files that don't have
- changes.
- 8 With 'viminfo' set such that the ".viminfo" file is written on a FAT
- filesystem, an illegal file name may be created: ".vim".
- 8 For each buffer that is opened, the viminfo file is opened and read to
- check for file marks. This can be slow.
- 7 "dd" on the last line of the file, causes the last but one line to be
- redrawn. Should not be necessary.
- 7 Using "gqj" near the last line of the window, makes the window scroll up,
- even though this isn't necessary.
- - These mappings don't work with the Win32 versions: (Bradley)
- nmap ,p {<Right>V}<Left>
- nmap ,> ,p,>
- vmap ,> >
- Looks like the nmap is used instead of the vmap.
- 8 Should be able to compile Vim in another directory, with $(srcdir) set to
- where the sources are. Add $(srcdir) in the Makefile in a lot of places.
- (Netherton)
- 8 Perl adds arguments to the compiler. Check that compiling a program still
- works after that, otherwise following configure checks will fail.
- 7 In xterm, recognize both vt100 and vt220 cursor keys. Change
- add_termcode() to not remove an existing entry for a name, when it's
- needed.
- Recognize <C-Left> and <C-Right> in new xterm.
- Need a generic solution to recognize different codes for the same key.
- 8 Core dump within signal function: gdb doesn't show stack backtrace! Option
- to skip catch_signals()?
- 8 Pasting with the mouse in Replace mode inserts the text, instead of
- overwriting, when it is more than one line. Same for using <C-R>.
- 7 When using search history, the trailing '/' or '?' needs to be changed
- depending on the search command. When there was no '/' or '?', add one, so
- flags can be added easily?
- 7 CTRL-F at the end of the file, when 'so' is set, redraws twice. When the
- window is small (< 2 * 'so') it behaves differently.
- 9 CTRL-E and CTRL-Y don't work in small window when 'so' is 4 and lines are
- wrapping (Acevedo/in.226). E.g., when using CTRL-E, window height 7,
- window might actually scroll down when last line of buffer is displayed.
- --> Remember if the previous command was "cursor follows screen" or
- "screen follow cursor" and use this in cursupdate().
- 9 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 without stop!!!!
- 7 tilde_replace() can only handle "~/", should also do "~user/".
- Get the list of home directories (from /etc/passwd? Use getpwent()) and
- use some clever algorithm to match a path with that. Find common strings
- in the list?
- 8 Add 'o' flag to 'mouse'?
- 8 When dragging status line with mouse, sometimes a jump when first clicking
- on the status line (caused by 'winheight'). Select window on button up,
- instead of on button down.
- 7 There are often a few <CR> on a row sent to the screen, should not be
- necessary.
- 8 When performing incremental search, should abort searching as soon as a
- character is typed.
- 8 Make CTRL-C on Unix generate a signal, avoid using select() to check for a
- CTRL-C (it's slow). Allow using CTRL-C for "*y, like in MS-Windows.
- 8 When writing viminfo file, handle CTRL-J in filename (needs to be escaped
- with CTRL-V). (Acevedo)
- 8 When starting Vim, switch terminal to RAW mode asap, so typeahead is
- handled correctly (without the need for a <CR>).
- 8 When the value of $MAKE contains a path, configure can't handle this.
- It's an autoconf bug. Remove the path from $MAKE to work around it.
- 8 How to set VIMRC_FILE to \"something\" for configure? Why does this not
- work: CFLAGS='-DVIMRC_FILE=\"/mydir/myfile\"' ./configure
- 8 The temporary file is sometimes not writable. Check for this, and use an
- alternate name when it isn't. Or add the 'temptemplate' option: template
- for the temp file name ":set temptemplate=/usr/tmp/?????.tmp".
- 7 Get error "*, \+ or \( operand could be empty" for pattern "\(.\)\1\{3}".
- Don't check when compiling, check while matching?
- 7 When switching to Daylight Saving Time, Vim complains that a file has been
- changed since last read. Can we use a function that uses GMT?
-
-
- I can't reproduce these (if you can, let me know how!):
- - 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)
- 9 Crash when changing fonts in Athena (Hiebert). gui_mch_set_scrollbar_pos
- gets an "sb" argument that points to all zero entries...?
- 9 Crash in Motif GUI, when pasting text with middle mouse button while in
- Insert mode. SunOS 4.1.3 only? (Janssen).
- 8 Motif: Tear-off menu item crashes Vim on some machines. (Netherton) It
- works fine for me, maybe it's a Motif problem.
- - On Diamond Viper 132x43 mode crash on exit (John Lange)
- 9 NT 4.0: Editing ".bashrc" (drag and drop), file disappears.
- Editing ".xyz" is OK. (McCollister)
- 8 Win32 GUI: NT: When regaining focus at the more prompt, there is an extra
- newline. (Webb)
- 8 Win32 GUI: Writable File in read-only dir can be deleted but not written?
- (Canup)
- 9 GUI: Between version 5.0h and 5.0i the Home and End keys stopped working
- for Micheal Schulz (Linux and AIX).
- 9 Win32 console: <M-S-Left> causes a crash. (Geddes)
- 9 In MSDOS version(s): typing ESC three or four times crashes Vim, when
- 'visualbell' is set (Kielhorn).
-
-
- [These have been reported for version 3.0, they may not appear in this version]
- - MSDOS: After writing on a network the 'w' bit for others is set.
-
-
- Problems that will (probably) not be solved:
- - Win32: All files created on the day of switching from winter to summer
- time cause "changed since editing started" messages. It goes away when
- the file is written again the next day, or the timezone is adjusted.
- DJGPP version is OK. (Zaimi) Looks like a problem with the Win32 library.
- - Moving the cursor removes color in color-xterm. This is a color-xterm
- problem! color-xterm ver. 6.1 beta 3 and later work properly.
- - The Dos32 version (DJGPP) can't use long file names on Windows NT.
- - In zsh, "gvim&" changes the terminal settings. This is a zsh problem.
- (Jennings)
- - Problem with HPterm under X: old contents of window is lost (Cosentino).
- - Amiga: When using quickfix with the Manx compiler we only get the first 25
- errors. How do we get the rest?
- - Amiga: The ":cq" command does not always abort the Manx compiler. Why?
- - Linux: A file with protection r--rw-rw- is seen readonly for others. The
- access() function in GNU libc is probably wrong.
- - MSDOS: When using smartdrive with write-back buffering, writing to a
- readonly floppy will cause problems. How to test for a writable floppy
- first?
- - MSDOS: Both 16 and 32 bit versions: File name expansion doesn't work for
- names that start with a dot. These used to be illegal file names.
- - When doing a CTRL-Z and typing a command for the shell, while Vim is busy
- (e.g. writing a file), the command for the shell is sometimes eaten by Vim,
- because the terminal mode is changed from RAW to CBREAK.
- - An old version of GNU tgoto can't handle the terminfo code for "AF". The
- "%p1" is interpreted as "%p" and "1", causing color not to be working.
- Fix: Change the "%p1" in the "AF" and "AB" terminfo entries to "%p".
- (Benzinger).
- - When running an external command from the GUI, typeahead is going to that
- program, not to Vim. It looks like the shell eats the characters, Vim
- can't get back what the external command didn't use.
- - Win32 GUI: Error code from external command not returned in shell_error.
- It appears that cmd.exe and command.com don't return an error code.
- - Win32 GUI: The Toolbar is a bit too high when the flat style is being
- used. We don't have control over the height of the Toolbar.
- - SunOS 5.5.1 with Motif: The file open dialog does not have a horizontal
- scroll bar for the "files" selection. This is a problem in the Motif
- libraries, get a patch from Sun.
- - Solaris 2.6 with GTK and Perl: gvim crashes when started. Problem with X
- input method called from GDK code. Without Perl it doesn't crash.
-
- --------------------- extensions and improvements ----------------------
- *extensions-improvements*
-
- Considered for release 6.0:
- 7 Folding.
- 7 Vertically splitting the screen. Show differences between files (sdiff).
- Some way create a new file to merge differences. Examples: Ted
- (moon.csie.ntu.edu.tw/pub/X/ted), Aurora (www.ntext.net)
- 7 Editing the command line with Normal mode Vi commands. See readline(3)
- for ideas.
- 7 Support for editing a remote file through ftp or http (with a script).
- 7 Further support for editing files in projects (see ":idselect").
- 7 Patch to add 'autoload' option: Automatically reload buffers that were
- changed outside of Vim ~/vim/patches/aaron.autoload . (Aaron)
- Also handle the 'reaonly' flag of a file when it was changed outside of
- Vim?
- 9 Add "toolbar" feature, to be used in mswin.vim (it can be disabled at
- compile time).
- 9 Add "mswin" feature, for Win16 and Win32.
- 8 Add option to disable the dialog for the ATTENTION prompt. In general:
- Better control for protecting the user for editing a file twice, file
- changed outside of Vim, file protection changed outside of Vim, etc.
- 8 Patch to use 'suffixes' for included files. ~/vim/patches/waghorn.suffixes
- . (Waghorn)
- - Add patch from Wall for this one:
- '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,..
- 8 Win32 GUI: Implement flag to avoid "hit any key to continue" in DOS
- console used to execute external commands. Pass a flag to vimrun.exe.
- 8 Add cscope_connection() function ~/vim/patches/kahn.cscopeconn .
- Also ~/vim/patches/kahn.5.4.cscope . (Kahn)
- 8 Make ":normal" command accept <Key> notation, like ":map".
- 8 Rename all version directories to vim54 instead of vim-5.4, also for the
- distribution.
- 9 Drag'n drop support for GTK ~/vim/patches/dalecki.dnd4 .
- Also fixes background color changing on the fly.
- 8 GNOME support for GTK version ~/vim/patches/kahn.5.4.gnome .
- 8 Remove runtime/macros/html.
- 8 Adjust colortest.vim: Include colors on normal background (Szalai).
- Reduce the size by using a while loop.
- 8 Use $install_prefix? (Cabric)
- 8 When color cannot be allocated, use nearest match. Useful when netscape
- has eaten many colors. Check FindClostestColor in Tcl/Tk. (Shah)
- 8 Add the possibility for a maintainer of a binary version to include his
- e-mail address. In the ":version" or ":intro" message?
- 8 ">>" with 'softtabstop' set should work like 'tabstop' is set to
- 'softtabstop'. (Zivkov) But what about when there is a string?
- 8 Rename vim-5.5x to vim55x for all distributions, also Unix. Easier to
- type and no differences between systems.
-
-
- Documentation:
- 9 Change examples in docs: Instead of a ">" in front of every line, use " >"
- once at end of line before the example and "<" after the last line (or a
- not-indented line). Use the syntax cmd:
- :syn region helpExample matchgroup=Ignore start=" >$"
- \ end="^[^ \t]"me=e-1 end="^<"
- Allows for copy/pasting the examples. Put ">" on a separate line when
- there is room.
- 9 In change.txt, remark about Javadoc isn't right. Right alignment would
- work too.
- 8 Spread the windows commands over the other files. For example, ":stag"
- should be with ":tag". cross-link with tags to avoid too much double
- text.
- 8 make vimtutor.bat for DOS and vimtutor script for Amiga. Then add
- vimtutor.man to the runtime archive.
- 8 Add an example vimrc for using Vim as a modeless editor. Emulate an
- existing editor (WordStar, Brief?).
- 7 Windows: When a wrong command is typed with an ALT key, give a hint to
- look at the help for 'winaltkeys'.
- - Check text editor compendium for vi and Vim remarks.
- - Add some text for xxd.
-
-
- Help:
- - First try using the ":help" argument literally, before using it as a
- pattern. And then match it as part of a tag.
- - Use GNU Texinfo for the help files somehow? Use Info format files?
- At least the other way around: Use Vim to view (and edit) .info files.
- - Default mapping for help files: <Tab> to position cursor on next |:tag|.
- - When hitting <Esc> or CTRL-C in Normal mode, give a message to help novice
- users to get out: "Type :q! to quit Vim".
- - 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.
- - 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.
- - ":help :s^I" should expand to ":help :substitute".
- - Make the help key (<F1>) context sensitive?
- - Learn mode: show short help while typing commands.
-
-
- "make test":
- - Find a way to skip tests that can't be done. For non-Unix systems, but
- also for e.g. the Perl interface.
-
-
- Syntax highlighting:
- 8 Add specific syntax item to match with parens/braces that don't have a
- match. :syntax nomatch cParenError "("
- 8 Add a command to jump to the next characterw highlighted with "Error".
- 8 Highlight the text between two matching parens (e.g., with a grey
- background) when on one of the parens or in between them.
- 8 When using a cterm, and no ctermfg or ctermbg are defined, use start/stop
- sequences. Add remark in docs that :if 'term' == "term-name" should be
- used.
- 8 Add @spell cluster to String and Comment groups for many languages. Will
- allow spell checking. (Fleiner)
- 8 When listing syntax items, try to sort the keywords alphabetically. And
- re-insert the [] if possible.
- 8 Make it possible to use color of text for Visual highlight group (like for
- the Cursor).
- 8 Make it possible to only highlight a sub-expression of a match. Like
- using "\1" in a ":s" command.
- 8 Add a way of syncing where it always starts at the beginning of the file,
- to find the group where redrawing starts. Useful for "#if 0" constructs
- in C. (Geddes)
- c.vim: Use advanced syncing to make long "#if 0" constructs work.
- 8 Keep more context for syncing, but not for every line. Make this settable
- with some command ":syn sync context=1000 skip=10" (store state for 1000
- lines, every 10 lines).
- Store the context with the window, instead of the buffer. Useful when
- there are two windows on the same buffer.
- OR: Use three options:
- syntaxminsyncs: minimal number of sync points (for speedy small files)
- syntaxmaxsyncs: maximum number of sync points (for very big files)
- syntaxsyncdist: number of lines between two sync points (overruled by
- the other two options).
- 8 Support for deleting syntax items:
- :syn keyword cTodo remove this
- :syn match cTodo remove "pattern"
- :syn region cString remove start="this" end="that"
- 8 Make it possible for a skip pattern to include "$", so that it can skip
- over newlines for a "oneline" region.
- 8 Make it possible to use "inverted" highlighting, invert the original
- character. For Visual mode. (xterm-selection already does this).
- 8 Highlight non-printable characters with "SpecialChar", linked to
- "Special". Display them with the digraph characters, if possible.
- 8 Highlight the clipboard-selection with a highlight group.
- 8 Be able to reset highlighting to its original (default) values.
- 8 Reduce the number of regexp in c.vim (for speed).
- 8 Add check for unterminated strings in c.vim, with a variable to switch it
- on: "c_strict_ansi".
- 8 Add a flag to temporarily disable highlighting. Set it while dragging the
- status line.
- 8 Add an option to restrict the updating of syntax highlighting to the
- current line while in Insert mode.
- 8 When guessing value of 'background', the syntax file has already been
- loaded (from the .gvimrc). After changing 'background', load it again?
- 8 Add ":syn resync" command, to re-parse the whole file until the current
- display position.
- 8 Should support "me" offset for a region start pattern. To be used to
- allow searching for the end pattern inside the match of the end pattern.
- Example: syn region pikeXX start="([^{]" end=")" should work on "()".
- 8 When using a regexp for "contains=", should delay matching with it until
- redrawing happens. Set a flag when a group is added, check this flag when
- highlighting starts.
- 7 Add "semitrans": Add highlighting. E.g., make the text bold, but keep the
- colors. And add colors, so that Green+Red becomes Yellow.
- 7 Wild idea: Not only set highlighting, but also change what is displayed
- (e.g., remove characters, so that "<B>bold</B>" can be shown as "bold").
- Also: CTRL-] checks the highlight group for finding out what the tag is.
- 6 Not possible now: Two regions that add up. E.g. for this html:
- <B> bold text <I> italic+bold text </B> italic text </I>
- 7 Not only change highlighting of text, also change what is displayed. Can
- be used to hide tags, e.g.
- :syn region boldstuff start="<B>" display="" end="</B>" display=""
- 7 Add an explanation how a list of words can be used to highlight misspelled
- words.
- 7 Should find a better way to parse the :syntax and :highlight commands.
- Use tables or lists that can be shared by parsing for execution and
- completion?
- 7 Add a few sets of colors (e.g. Borland Turbo C one). With a menu to
- select one of the sets.
- 8 Add offsets to sub-matches: "\(a*\) *"he=e1-1
- 'e' is end of match 'e1' is end of sub-match 1, 's2' is start of submatch
- 2, etc.
- 8 Add more command line completion for :syntax.
- 8 Add more command line completion for :highlight.
- 8 In Insert mode, when there are typeahead characters, postpone the
- highlighting (for "." command).
- 8 Syncing on comments isn't 100% correct when / / lines mix with / * and * /.
- For example: What about a line that starts with / / and contains * /?
- 8 Ignore / * and * / inside strings, when syncing.
- 8 Add possibility to sync on something else, when the syncing in one way
- doesn't find match. For HTML: When no {script} is found, try looking for
- a '<'. (Fleiner)
- 8 Replace the synchronizing method with a state machine specification.
- Should be able to start at any line in the file, search forwards or
- backwards, and use the result of matching a pattern.
- 7 Build a few more syntax files from the file "/usr/share/misc/vgrindefs":
- ISP, LDL, Icon, ratfor. And check "nedit/source/highlight.c".
- - Make it possible to add "contains" items for all items in a group. Useful
- when extending an already existing syntax file.
- - Allow the use of "blink". Make a new attr when it's used.
- - Add line-continuation pattern for non-syncing items too?
- 7 Allow "\@1" in end (and skip) pattern, use first sub-match of start
- pattern. To be used in e.g.: 'start="[/=+]" end="\@1"' Also for Perl.
- 8 Add cursor-column highlighting. Enable it with 'cursorcolumn' option, set
- highlighting with "CursorColumn" group. Useful for aligning text.
- Also cursor-row highlighting.
- - Add possibility to highlight specific columns (for Fortran).
- - Add possibility to highlight the whole line, including the right margin
- (for comment blocks).
- - Add 'hlmatch' option: List of flags:
- 'c': highlight match for character under the cursor.
- 'b': highlight the previous (, and its match.
- 'a': highlight all text from the previous ( until its match.
- Also for {}, <>, etc.?
- 'e': highlight all braces without a match (slow?)
- OR: add an argument "cursor" to the syntax command, which means that the
- region/match/keyword is only highlighted when the cursor is on it.
- (Campbell)
- 7 Make it possible to use all words in the tags files as Keyword.
- Can also be done with a script (but it's slow).
- 7 Make it possible to call a ":" command when a match is found. Should
- allow for adding keywords from the text (e.g. variables that are set).
- And allows for sections with different highlighting.
- 7 Add highlight group for commandline: "Commandline". Make sure it
- highlights the command line while typing a command, and any output from
- messages. And external commands?
- 8 Make a version that works like less, but with highlighting: read stdin for
- text, exit at end of file, don't allow editing, etc. moreim? lessim?
-
-
- Built-in script language:
- 8 Add referring to key options with "&t_xx". Both for "echo &t_xx" and
- ":let &t_xx =". Useful for making portable mappings.
- 8 Allow range for ":exec". Pass it on to the executed command. (Webb)
- 8 Add a way to catch errors:
- :try
- : [commands that can fail]
- :catch [error-type]
- : [error handling]
- :endtry
- 8 Have a look at VSEL. Would it be useful to include? (Bigham)
- 8 Add ":fungroup" command, to group function definitions together. When
- encountered, all functions in the group are removed. Suggest using an
- obscure name to avoid name clashes. Require a ":fungroup END" in the same
- sourced file? Assume the group ends at the end of the file. Handle
- nested packages?
- Alternative: Support packages. {package-name}:{function-name}().
- Packages are loaded automatically when first used, from
- $VIMRUNTIME/packages (or use a search path).
- Or add a FuncUndefined autocommand, so that the user can handle loading a
- function as he pleases. (Aaron)
- Pre-parse or compile Vim scripts into a bytecode. Put the bytecode with
- the original script, with an ":if" around it, so that it's only used with
- a Vim that supports it.
- 8 The input() function should not read mapped characters, but always get
- characters from the user (or a script). Need to change vgetorpeek() to
- ignore mapped characters.
- 8 Add functions:
- cursor(lnum, col) Position cursor (when lnum or col 0 keep val)
- menuname({menu_name}, {idx}) get name of menu. menuname("", 1)
- returns "File", menuname("File", 1) returns
- "Open...".
- menuarg({menu_name}) return argument of a menu item by name.
- mapname({idx}, mode) return the name of the idx'th mapping.
- match({pat}, {string}, [count]) get index of count'th match
- stridx(bigstr, smallstr) return index of first smallstr in bigstr
- strridx(bigstr, smallstr) return index of last smallstr in bigstr
- sprintf(format, arg, ..) How to prevent a crash???
- attributes() return file protection flags "drwxrwxrwx"
- perl(cmd) call Perl and return string
- shorten(fname) shorten a file name, like home_replace()
- input(prompt, complete) like input() but do specified completion
- getfperm() file permissions, in form "rwxrwxrwx"
- getfsize() file size in bytes (directory is 0)
- getftype() "file", "dir", "link", "other"?
- getbufvar({bufid}, {name})
- setbufvar({bufid}, {name}, {value})
- get/set value of variable {name} in buffer
- {bufid} See ~/vim/patches/aaron.getbufvar
- setwinvar() see ~/vim/patches/aaron.getbufvar2 .
- getwinvar()
- libcall() Allow more than one argument.
- libcallnr() Like libcall(), but function returns a number.
- fnamemod({fname}, {mod}) {mod} can be ":p:h" etc., to be applied to
- {fname}
- getchar() get one character from the user.
- confirm() add "flags" argument, with 'v' for vertical
- layout and 'c' for console dialog. Also add
- 'c' to 'guioptions'
- toupper({string})
- tolower({string})
- filter({cmd} [, {string}]) Filter {string} through the shell command
- {cmd} and return the result. If {string} is
- omitted no input is given to {cmd}.
- 8 argc() returns 0 when using "vim -t tag". How to detect that no file was
- specified in any way? To be able to jump to the last edited file.
- 8 When starting to source a vim script, delete all functions that it has
- previously defined. Avoids using ":fun!" all the time.
- 8 Include support for arrays? Patch from Robert Webb.
- 7 Add optional arguments to user functions:
- :func myFunc(arg1, arg2, arg3 = "blah", arg4 = 17)
- 6 User functions: Functions local to buffer "b:func()"?
- 7 Allow writing to the "= register, in which case the expression must be the
- name of a variable which is written to. (Erhardt)
- 8 Add ":let var[{expr}] = {expr}".
- 8 The "= register should be writable, if followed by the name of a variable,
- option or environment variable.
- 8 ":let &option" should list the value of the option.
- 7 Add synIDlist(), making the whole list of syntax items on the
- stack available (separated with '\n').
- 8 Add autocommand-event for when a variable is changed:
- :au VarChanged {varname} {commands}
- 8 Add per-buffer and per-window variables:
- b4:xxx buffer 4 variable
- b4:&yyy buffer 4 option 'yyy'
- w2:xxx window 2 variable
- Alternative: use getwinvar(), getbufvar(), setwinvar() and setbufvar().
- ( ~/vim/patches/aaron.getbufvar3 )
- Mostly the buffer/window number is not known, avoid using ":exe".
- 8 Add "has("gui_capable")", to check if the GUI can be started.
- 8 Add possibility to use variables like registers: characterwise (default),
- linewise (when ending in '\n'), blockwise (when ending in '\001'). reg0,
- rega, reg%, etc. Add functions linewise({expr}), blockwise({expr}) and
- charwise({expr}).
- 7 Make it possible to do any command on a string variable (make a buffer
- with one line, containing the string). Maybe add an (invisible) scratch
- buffer for this?
- result = scratch(string, command)
- result = apply(string, command)
- result = execute(string, command)
- "command" would use <> notation.
- 7 Add function to generate unique number (date in milliseconds).
- 7 Automatically load a function from a file when it is called. Need an
- option for the search path. (Sekera)
- 6 "g{if cond}" "g{while cond}", etc. in Normal mode, for mappings.
- 6 Like Lotus: <IF cond>commands<ELSE>commands<ENDIF> (in any mode, handle in
- vgetorpeek())
- ":map _a athe term is <IF $TERM=="xterm">xterm<ELSE>unknown<ENDIF>.<Esc>"
- Use "<IF expression>commands<ELSE>commands<ENDIF>
-
-
- Code cleanup:
- 8 expand_context and expand_pattern should not be global. Pass them to
- ExpandOne() and lower.
-
-
- Performance:
- 8 Avoid alloc() for scratch buffer use, esp. in syntax.c. It's very slow on
- Win16.
- 9 Setting GUI options in the console (e.g., 'guifont') should not cause a
- redraw.
- 8 When editing a file with extremely long lines (e.g., an executable), the
- "linerest" in readfile() is allocated twice to be able to copy what was
- read so far. Use realloc() instead? Or split the line when allocating
- memory fails and "linerest" is big (> 100000)?
- 8 When defining autocommands (e.g., from $VIMRUNTIME/filetype.vim), need to
- compare each pattern with all existing patterns. Use a hash code to avoid
- using strcmp() too often?
- 7 Include turbo_loader patches, speeding up reading a file?
- Speed up reading a file by reading it into a fixed-size buffer, creating
- the list of indexes in another buffer, and then copying the result into a
- memfile block with two copies. Then read the next block into another
- fixed-size buffer, create the second list of indexes and copy text from
- the two blocks to the memfile block.
- 7 do_cmdline(): Avoid that the command line is copied to allocated memory
- and freed again later all the time. For while loops, and for when called
- with an argument that can be messed with.
- Generic solution: Make a struct that contains a pointer and a flag that
- indicates if the pointer should be freed when replaced.
- 7 Check that that the file size is not more than "sizeof(long)".
- - Further improve finding mappings in maphash[] in vgetorpeek()
- 8 Dragging the status line doesn't scroll but redraw.
- 8 Syntax highlighting is slow when deleting lines. Try in
- $VIMRUNTIME/filetype.vim.
- 8 "p" and "P" redraw everything after the put text. Should insert lines.
- - "out of memory" after deleting (1,$d) and changing (:%s/^/> /) a lot of
- lines (27000) a few times. Memory fragmentation?
- - Have a look at how pdksh does memory allocation (alloc.c). (Dalecki)
- - Do profiling on:
- - :g/pat/normal cmd
- - 1000ii<Esc>
- - deleting 10Mbyte worth of lines (netscape binary)
- - ":g/^/m0" on a 450Kbyte file. And the "u".
- - highlighting "~/vim/test/longline.tex", "~/vim/test/scwoop.tcl" and
- "~/vim/test/lockup.pl".
- - loading a syntax file to highlight all words not from a dictionary.
- 7 Screen updating can be further improved by only redrawing lines that were
- changed (and lines after them, when syntax highlighting was used, and it
- changed).
- - On each change, remember start and end of the change.
- - When inserting/deleting lines, remember begin, end, and line count.
- - Use macros/duarte/capicua for profiling. Nvi 1.71 is the fastest!
- - When using a file with one long line (1Mbyte), then do "$hhhh", is still
- very slow. Avoid calling getvcol() for each "h"?
- - Executing a register, e.g. "10000@@" is slow, because ins_typebuf has to
- move the previous commands forward each time. Pass count from
- normal_cmd() down to do_execreg().
- - Repeating insert "1000i-<Esc>" displays --INSERT-- all the time, because of
- the <Esc> at the end. Make this work faster (disable redrawing).
- - Avoid calls to plines() for cursor line, use w_cline_height.
- - When only need to redraw the status lines in status_redraw_all(), need to
- update NOT_VALID to force the redraw. Should detect that only the status
- lines need to be redrawn (add STATUSLN between VALID and NOT_VALID?).
- - After :set nowrap remove superflous redraw with wrong hor. offset if cursor
- is right of the screen.
-
-
- Code size:
- 8 Can't optimize normal.c, because of the big switch. Make it into a table
- of functions?
- 8 GUI: When NO_CONSOLE is defined, more code can be excluded.
- - Put getline() and cookie in a struct, so only one argument has to be
- passed to do_cmdline() and other functions.
- 8 move common files between os_unix.c and os_vms.c to one file?
- 8 Make a GUI-only version for Unix?
-
-
- Messages:
- - Delete message after new command has been entered and have waited for key.
- Perhaps after ten seconds?
- - Remember message line for redraw. Integrate the command line in
- updateScreen().
- - Make message history available in "msg" variables: msg1, msg2, .. msg9.
- 9 Check handling of overwriting of messages and delays:
- Very wrong: errors while redrawing cause endless loop.
- When switching to another file and screen scrolls because of the long
- message and return must be typed, don't scroll the screen back before
- redrawing.
- 9 ":redir @*" should work: Redirect to the clipboard. Just allow using this
- register and add a flag to write_reg_contents() to append.
- 7 Add an option, which is a regexp, that disables warning messages which
- match that regexp (Tsirkin).
- 8 When address range is wrong you only get "Invalid range". Be a bit more
- specific: Negative, beyond last line, reverse range? Include the text.
- 8 Make it possible to ignore errors for a moment ('errorignore'?). Another
- option to switch off giving error messages ('errorquiet'?). Also an option
- not to give any messages ('quiet')? Or ":quiet on", ":quiet off".
- Careful: For a severe error (out of memory), and when the user starts
- typing, error messages must be switched back on.
- Also a flag to ignore error messages for shell commands (for mappings).
- 8 Add ":silent {cmd}", silently run a command: no echoing, no hit-return
- prompt. Use ":silent!" to also skip error messages. Should work for
- ":silent !cmd". Still do the messages for ":redir"?
- 8 When using ":silent !cmd", run the external command silently, don't give
- the hit-return prompt. Already done for Risc OS with ":!~cmd", see
- do_shell(). Don't redraw the screen, make a note in the docs that CTRL-L
- should be used if the command has any output.
- - Option to set time for emsg() sleep. Interrupt sleep when key is typed?
- sleep before second message?
- 8 In Ex silent mode or when reading commands from a file, what exactly is
- not printed and what is? Check ":print", ":set all", ":args", ":vers",
- etc. At least there should be no prompt. (Smulders) And don't clear the
- screen when reading commands from stdin. (Kendall)
- --> Make a difference between informative messages, prompts, etc. and
- error messages, printing text, etc.
- 8 Window should be redrawn when resizing at the hit-return prompt.
- Also at the ":tselect" prompt. Find a generic solution for redrawing when
- a prompt is present (with a callback function?).
-
-
- Screen updating:
- - screen_line():
- - insert/delete character stuff.
- - improve delete rest of line (spaces at end of line).
- - When moving or resizing window, try to avoid a complete redraw (esp. when
- dragging the status line with the mouse).
- - When 'lazyredraw' set, don't echo :ex commands? Need a flag to redraw when
- waiting for a character.
- 8 Add a ":refresh [winnr]" command, to force updating a window. Useful from
- an event handler where ":normal" can't be used. Also useful when
- 'lazyredraw' is set in a mapping.
-
-
- Scrolling:
- 8 Add "zm" command: scroll horizontally to put the cursor in the middle.
- 6 Add option to set the overlap for CTRL-F and CTRL-B. (Garhi)
- - extend 'scrollbind' option: 'scrollopt' words "search", "relative", etc..
- Also 'e'xecute some commands (search, vertical movements) in all bound
- windows.
- - Allow scrolling by dragging with the mouse. Like the "hand" in Acrobat
- reader. With which mouse button?
- - Add command to execute some commands (search, vertical movements) in all
- bound windows.
- - Add 'search' option to 'scrollopt' to allow 'scrollbind' windows to
- be bound by regexp searches
- - Add "z>" and "z<": scroll sideways one screenfull. (Campbell)
- - Add 'sidescrolloff' option, like 'scrolloff', to make the cursor always
- appear in the middle of the window horizontally (Benjamin Griffin).
- - Add option to set the number of lines when not to scroll, instead of the
- fixed number used now (for terminals that scroll slow with a large number
- of lines but not with a single line).
-
-
- Autoconf:
- 8 Should use acconfig.h to define prototypes that are used by autoheader.
- - Autoconf: Use @datadir@ for the system independent files. Make sure the
- system dependend and system independed files are separated. (Leitner).
- - Add autoconf check for waitpid()/wait4().
- - Remove fcntl() from autoconf, all systems have it?
- - Set default for 'dictionary', add search for dictionary to autoconf.
-
-
- Perl interface:
- 8 Rename typemap file to something else?
- 7 Make buffers accessed as Perl arrays. (Clark)
- 7 Make it possible to compile with non-ANSI C?
- 6 Tcl/Tk has the "load" command: load a shared library (.so or .dll).
-
-
- Shared libraries:
- 6 Add support for loading shared libraries, and calling functions in it.
- :libload internal-name libname
- :libunload internal-name
- :liblist
- :libcall internal-name function(arg1, arg2, ...)
- :libcall function(arg1, arg2, ...)
- libcall() can have only one integer or String argument at the moment.
- 6 Have a look on how Perl handles loading dynamic libraries.
-
-
- Tags:
- 8 Scope arguments for ":tag", e.g.: ":tag class:cPage open", like Elvis.
- 8 When output of ":tselect" is long, getting the more-prompt, should be able
- to type the tag number directly.
- 8 Add "**" wildcard from 'path' to 'tags': search a tree for tags files.
- And some way to search directories upwards in the tree:
- "./**/tags;$HOME", where the part after ';' tells where to stop.
- Richardson has a patch for some of this.
- 7 Add 'tagignorecase' option from Vile: ignore case for tags.
- 7 Make output of ":tselect" a bit nicer. Use highlighting?
- 7 Highlight the "tag 1 of >2" message. New highlight group, or same as "hit
- bottom" search message.
- 7 When using ":tag" at the top of the tag stack, should add another entry,
- so CTRL-T can bring you back to where you are now AND to where you were
- before the previous ":tag" command. (Webb)
- 7 When using CTRL-] on someClass::someMethod, separate class from method and
- use ":ta class:someClass someMethod".
- Include C++ tags changes (Bertin). Change "class::func" tag into "func"
- with "class=class"? Docs in oldmail/bertin/in.xxx.
- 7 Add ":tagargs", to set values for fields:
- :tagargs class:someclass file:version.c
- :tagargs clear
- These are then the default values (changes the order of priority in tag
- matching).
- 7 Support for "gtags" and "global"? With ":rtag" command? See
- ~/src/global". There is an example for how to do this in Nvi.
- Or do it like Elvis: 'tagprg' and 'tagprgonce' options. (Yamaguchi)
- The Elvis method is far more flexible, do it that way.
- 7 Support "col:99" extra field, to position the cursor in that column. With
- a flag in 'cpoptions' to switch it off again.
- 7 Better support for jumping to where a function or variable is used. Use
- the id-utils, with a connection to "gid" (Emacs can do it too). Add
- ":idselect", which uses an "ID" database (made by "mkid") like "tselect".
- 6 Don't store the search pattern from a tag command in the search history
- (with an option)?
-
-
- Security:
- 8 Add 'security' option. When "paranoid", disallow many things, like
- setting 'grepprg' and 'makeprg' from a modeline. When "trusted" allow
- these things. When "warn" give a warning message.
- Perhaps disallow setting these from a modeline: errorfile, backupdir,
- directory, makeef and viminfo. And maybe backup and writebackup?
- 7 Disallow changing the buffer for commands from a tags file. Also for
- commands from a local .vimrc? Sort of strict secure mode.
-
-
- Win32 GUI:
- 8 Add font argument to set the lfCharSet. (Bobcik)
- 8 Could keep console open to run multiple commands, to avoid the need to hit
- return in every console.
- Also: Look at how Emacs does runs external commands:
- http://www.cs.washington.edu/homes/voelker/ntemacs.html.
- 7 Add a way to change the filter menu in the file selection dialog.
- 8 Need a separate PopUp menu for modeless selection. Need two new commands:
- Copy selection to clipboard, Paste selection (as typed text).
- 8 Dropping a file on a gvim that edits a modified buffer splits the window.
- Make an option to replace the current file (use ":e" instead of ":sp")?
- When dropping multiple files, display the first one and adjust the
- arglist. Or make it an option for the user to chose betwen ":e" and ":sp"?
- 8 Support copy/paste for other file formats. At least HTML, perhaps RTF.
- Add "copy special" and "paste special" commands?
- 7 Use <C-Tab> to cycle through open windows (e.g., the find dialog).
- 7 <Esc> should close a dialog.
- 7 Keep the console for external commands open. Don't wait for a key to be
- hit. Re-open it when the user has closed it anyway. Or use a prepended
- command: ":nowait {cmd}", or ":quiet", which executes {cmd} without any
- prompts.
- 7 Should be able to set an option so that when you double click a file that
- is associated with Vim, you can either get a new instance of Vim, or have
- the file added into an already running Vim.
-
-
- GUI:
- 8 Make the split into system independend code and system specific code more
- explicit. There are too many #ifdefs in gui.c.
- If possible, separate the Vim code completely from the GUI code, to allow
- running them in separate processes.
- 8 Visual highlighting should keep the same font (bold, italic, etc.).
- 7 Allow setting the mouse pointer shape, for different modes. Ralston has
- an old patch for this. Negri has one for Win32.
- 8 Add flag to 'guioptions' to not put anything in the clipboard at all?
- 8 ":let @* = 'text'" should set the selection. (Krishna)
- 8 Should take font from xterm where gvim was started (if no other default).
- 8 Selecting font names in X11 is difficult, make a script or something to
- select one.
- 8 Should support a way to use keys that we don't recognize yet. Add a
- command that adds entries to special_keys somehow. How do we make this
- portable (X11, Win32, ..)?
- 8 Add option to use some lines of space between characters. Useful for
- multi-byte fonts. See patch from Nam.
- 7 Add a flag to 'guioptions' that tells not to remove inactive menu items.
- For systems where greying-out or removing menu items is very slow. The
- menu items would remain visibly normally, but not do anything.
- 7 Add ":minimize" and ":maximize", which iconize the window and back.
- Useful when using gvim to run a script (e.g. 2html.vim).
- 7 X11: Is it possible to free allocated colors, so that other programs can
- use them again? Otherwise, allow disabling allocating the default colors.
- Or allocate an own colormap (check UAE). With an option to use it. For
- the commandline, "-install" is mostly used for X11 programs.
- Or: Find the nearest color. Patch from HierAssist. (Shah)
- 7 X11: Check for keypad keys, so that they can be mapped separately.
- (Wellesz) ~/vim/patches/wellesz.keypad . But don't differentiate for
- different modes. Use key codes like xterm?
- 7 GUI: Allow selection without moving the cursor by keeping CTRL and SHIFT
- pressed. (Wellesz) ~/vim/patches/wellesz.keypad .
- 7 Add command line argument for "gvim" not to start the GUI. Sort of the
- inverse of "vim -g". (Vikas)
- 6 Local buffer menus. (Zachmann)
- 7 Should support multi-column menus.
- - Should add option for where to put the "Help" menu: like Motif at the far
- right, or with the other menus (but still at the right).
- - Add menu item to "Keep Insert mode".
- 8 ":mkgvimrc" command, that includes menus.
- 6 Big change: Move GUI to separate program "vimgui", to make startup of vim a
- lot faster, but still be able to do "vim -g" or ":gui".
- 6 Make it possible to "drag the text" (grab a character and move it
- up/down). Use Alt-LeftMouse for this? (Goldfarb)
- 7 More explicit mouse button binding instead of 'mousemodel'?
- 7 Add option to set the position of the window on the screen. 'windowpos',
- which has a value of "123,456": <x>,<y>.
- Or add a command, like ":winsize"?
- 7 Add toolbar for non-Win32 GUIs.
- 7 Make it possible to put the toolbar on top, left, right and/or bottom of
- the window? Allows for softkey-like use.
- 6 Separate the part of Vim that does the editing from the part that runs the
- GUI. Communicate through a pseudo-tty. Vim starts up, creates a
- pty that is connected to the terminal. When the GUI starts, the pty is
- reconnected to the GUI process. When the GUI stops, it is connected to
- the terminal again. Also use the pty for external processes, it looks
- like a vt100 terminal to them. Vim uses extra commands to communicate GUI
- things.
- - Motif steals <F10> from us, to pop up menus with the keyboard. How do we
- get it back if we want it?
- - Paste in Insert mode should not do autowrap etc. Or maybe this should be
- changeable with an option?
- - Put a nice picture in the icon (but how do we do that?).
- 7 When using a pseudo-tty Vim should behave like some terminal (vt52 looks
- simple enough). Terminal codes to/from shell should be translated.
- - Would it be useful to be able to quit the GUI and go back to the terminal
- where it was started from?
-
-
- Autocommands:
- 9 Make sure that side effects of autocommands are handled correctly. Don't
- execute autocommands when a buffer or window is halfway some changes.
- Move all apply_autocmds() calls to a higher level where needed.
- 8 Use another option than 'updatetime' for the CursorHold event. The two
- things are unrelated for the user (but the implementation is more
- difficult).
- 8 Can't use ":normal" in CursorHold autocommands. Make the CursorHold event
- insert a special key code, and call the autocommand functions from a
- higher level, so that vgetc() isn't used recursively.
- 8 Autocommands should not change registers. And marks? And the jumplist?
- And anything else?
- 8 Autocommand for when modified files have been found, when getting input
- focus again (e.g., FileChangedFocus).
- Check when: getting focus, jumping to another buffer, ...
- 8 Add autocommands, user functions and user commands to ":mkvimrc".
- 8 Add "TagJumpFile" autocommand: When jumping to another file for a tag.
- Can be used to open "main.c.gz" when "main.c" isn't found.
- 7 Add a way to skip an autocommand if going from one *.c file to another *.c
- file.
- 7 When trying to open a directory, don't load the file but trigger an
- autocommand event OpenDirectory.
- 7 Add file type in front of file pattern: <d> for directory, <l> for link,
- <x> for executable, etc. <&xxx> for Risc OS. With commas to separate
- alternatives. The autocommand is only executed when both the file type
- AND the file pattern match. (Leonard)
- 5 Add option that specifies extensions which are to be discarded from the
- file name. E.g. 'ausuffix', with ".gz,.orig". Such that file.c.gz will
- trigger the "*.c" autocommands. (Belabas)
- 7 Add something to break the autocommands for the current event, and for
- what follows. Useful for a "BufWritePre" that wants to avoid writing the
- file.
- 8 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.
- - Add events to autocommands:?
- Error - When an error happens
- NormalEnter - Entering Normal mode
- InsertEnter - Entering Insert mode
- ReplaceEnter - Entering Replace mode
- CmdEnter - Entering Cmdline mode
- VisualEnter - Entering Visual mode
- *Leave - Leaving the mode
- SearchPost - After doing a search command (e.g. to do "M")
- BufModified - When a buffer becomes modified, or unmodified (for
- putting a [+] in the window title).
- HierAssist has patch to add BufChangePre, BufChangePost
- and RevertBuf. (Shah)
- PreDirChanged/PostDirChanged
- - Before/after ":cd" has been used (for changing the
- window title)
- BufReadAction - replaces reading a file
- BufWriteAction - replaces writing a file
- ShutDown - when the system is about to shut down
- InsertKeyPre - key hit in Insert mode, before inserting the char.
- InsertKeyPost - key hit in Insert mode, after inserting the char.
- FuncUndefined - calling a user function which doesn't exist (
- ~/vim/patches/aaron.getbufvar3 )
- - Add autocommand to be executed every so many seconds? For writing the
- file now and then ('autosave').
- *'autosave'* *'as'* *'noautosave'* *'noas'*
- 'autosave' 'aw' number (default 0)
- Automatically write the current buffer to file N seconds after the
- last change has been made and when |'modified'| is still set.
- Default: 0 = do not autosave the buffer.
-
-
- Insert mode completion:
- 9 ^X^L completion doesn't repeat correctly. It uses the first match with
- the last added line, instead of continuing where the last match ended.
- (Webb)
- 8 The code has become too complex. Redesign it, or at least add proper
- comments.
- 8 Add a command to undo the completion, go back to the original text.
- 8 Use the class information in the tags file to do context-sensitive
- completion. After "foo." complete all member functions/variables of
- "foo". Need to search backwards for the class definition of foo.
- Should work for C++ and Java.
- 8 Add thesaurus completion: ~/vim/patches/negri.thesaurus-mouseshape .
- 7 Add CTRL-X command in Insert mode like CTRL-X CTRL-N, that completes WORDS
- instead of words.
- 8 Add completion of previously inserted texts (like what CTRL-A does).
- Requires remembering a number of insertions.
- 8 Add 'f' flag to 'complete': Expand file names.
- Also apply 'complete' to whole line completion.
- - Make it possible to search include files in several places. Use the
- 'path' option? Can this be done with the dictionary completion (use
- wildcards in the file name)?
- - Make CTRL-X CTRL-K do a binary search in the dictionary (if it's sorted).
- - Speed up CTRL-X CTRL-K dictionary searching (don't use a regexp?).
- - Set a mark at the positition where the match was found (file mark, could
- be in another file).
- - Add CTRL-A command in CTRL-X mode: show all matches.
- - Make CTRL-X CTRL-L use the 'complete' option?
- - Add command in CTRL-X mode to add following words to the completed string
- (e.g. to complete "Pointer->element" with CTRL-X CTRL-P CTRL-W CTRL-W)
- - CTRL-X CTRL-F: Use 'path' to find completions.
- - CTRL-X CTRL-F: Don't replace "$VIM" with the actual value. (Kelly)
- - Add option 'isexpand', containing characters when doing expansion (so that
- "." and "\" can be included, without changing 'iskeyword'). (Goldfarb)
-
-
- Command line completion:
- 8 Change expand_interactively into a flag that is passed as an argument.
- 8 When completing command names, either sort them on the long name, or list
- them with the optional part inside [].
- - For 'wildmenu': Simplify "../bar" when possible.
- - When using <Up> in wildmenu mode for a submenu, should go back to the
- current menu, not the first one. E.g., ":emenu File.Save<Up>".
- 8 For ":find" and ":sfind" expand files found in 'path'.
- 8 When using backtick expansion, the external command may write a greeting
- message. Add an option or commands to remove lines that match a regexp?
- 7 When listing matches of files, display the common path separately from the
- file names, if this makes the listing shorter. (Webb)
- - Add command line completion for ":ilist" and friends, show matching
- identifiers (Webb).
- 8 Add command line completion for "old value" of a command. ":args <key>"
- would result in the current list of arguments, which you can then edit.
- 6 Add command line completion with CTRL-X, just like Insert mode completion.
- Useful for ":s/word/xx/".
- - Add command to go back to the text as it was before completion started.
- Also to be used for <Up> in the command line.
- - Add 'wildlongest' option: Key to use to find longest common match for
- command line completion (default CTRL-L), like 'wildchar'. (Cregut)
- Also: when there are several matches, show them line a CTRL-D.
- 7 With command line completion after '%' and '#', expand current/alternate
- file name, so it can be edited.
-
-
- Command line history:
- - Add "KeyWasTyped" flag: It's reset before each command and set when a
- character from the keyboard is consumed. Value is used to decide to put a
- command line in history or not. Put line in history if it didn't
- completely resulted from one mapping.
- - When using ":browse", also put the resulting edit command in the history,
- so that it can be repeated. (Demirel)
-
-
- Command-line editing:
- 8 Change CTRL-U on cmdline to delete from cursor to start of line?
- For compatibility, map CTRL-U to CTRL-E CTRL-U.
- 7 Add commands (keys) to delete from the cursor to the begin or the end of
- the command line.
- - 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? See remarks from Steve (oldmail/kirkendall/in.012).
- - Add 'cedit' option like Nvi: editing commandline in a window?
- NO! It's too confusing (e.g. when using ^W^W to go to another window, when
- doing ":" and starting another commandline edit windows, etc.).
- YES! Some people like it anyway (forbid ^W^W).
- Use Elvis's method too (commandline is like a one-line window into a buffer
- that contains the commandline history).
- - Add flags to 'whichwrap' for command line editing (cursor right at end of
- lines wraps to start of line).
-
-
- Insert mode:
- 8 <C-G><Up> and <C-G><Down> in Insert mode move to the column where insert
- started, like Elvis. (patch from Lord) Perhaps an option to allow "j" and
- "k" after an insert to go to the column where inserting started.
- 8 When using CTRL-O in Insert mode, then executing an insert command
- "a" or "i", should we return to Insert mode after <Esc>? (Eggink)
- Perhaps it can be allowed a single time, to be able to do
- "<C-O>10axyz<Esc>". Nesting this further is confusing.
- ":map <F2> 5aabc<Esc>" works only once from Insert mode.
- 7 Make ":startinsert" command work directly for functions and scripts?
- 8 Make it possible to start Insert mode with an Ex command. ":normal a"
- doesn't work.
- - In Insert mode (and command line editing?): Allow undo of the last typed
- character. This is useful for CTRL-U, CTRL-W, delete and backspace, and
- also for characters that wrap to the next line.
- Possibly use 'backspace'="whole" for a mode where at least a <CR> that
- inserts autoindent is undone by a single <BS>.
- - Use CTRL-G in Insert mode for an extra range of commands, like "g" in
- Normal mode.
- - Make 'paste' work without resetting other options, but override their
- value. Avoids problems when changing files and modelines or autocommands
- are used.
- - When typing CTRL-V and a digit higher than 2, only expect two digits.
- - Insert binary numbers with CTRL-V b.
- - Make it possible to undo <BS>, <C-W> and <C-U>. Bash uses CTRL-Y.
-
-
- 'cindent', 'smartindent':
- 9 "case xx: {", or in general: any { with text before it, a matching }
- should not line up with the {, but with the indent at that position.
- Add setting for K&R paren style? Should be used for this:
- case xx: {
- some_cmd;
- }
- 8 "int asdf,<CR>asdf;" should indent the second line more. (Zellner)
- 7 Separate "(0" option into inside/outside a function (Zellner):
- func(
- int x) // indent like "(4"
- {
- if (a
- && b) // indent like "(0"
- 9 Wrong indent for continuation line with a string:
- void foo()
- {
- x = f("s \
- asd\
- tem");
- ff;
- }
- Also note that the "tem" line has an extra indent. It appears that the
- brace matching doesn't work, because of the single " in the line.
- 7 Make indenting more flexible, like syntax highlighting.
- - Make smartindenting configurable. Add 'sioptions', e.g. '#' setting the
- indent to 0 should be switched on/off.
- 7 Support ANSI style function header, with each argument on its own line.
- - "[p" and "]p" should use 'cindent' code if it's on (only for the first
- line).
- - Add option to 'cindent' to set indent for comments outside of {}?
- - Make a command to line up a comment after a code line with a previous
- comment after a code line. Can 'cindent' do this automatically?
- 7 Add 'j' flag to 'formatoptions': Remove comment leader when joining lines.
- - 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)
- - Add option to make indenting work in comments too (for commented-out
- code), unless the line starts with "*".
- - Don't use 'cindent' when doing formatting with "gq"?
- - When formatting a comment after some text, insert the '*' for the new line
- (indent is correct if 'cindent' is set, but '*' doesn't get inserted).
- - For smartindent: When typing 'else' line it up with matching 'if'.
- - 'smartindent': allow patterns in 'cinwords', for e.g. TeX files, where
- lines start with "\item".
- - Support this style of comments (with an option): (Brown)
- /* here is a comment that
- is just autoindented, and
- nothing else */
- - Add words to 'cinwords' to reduce the indent, e.g., "end" or "fi".
- 7 Use Tabs for the indent of starting lines, padd with spaces for
- continuation lines. Allows changing 'tabstop' without messing up the
- indents.
- And/or: Add option to copy indent as-is, without changing spaces to tabs.
-
-
- Java:
- 8 Can have {} constructs inside parens. Include changes from Steve
- Odendahl?
- 8 Recognize "import java.util.Vector" and use $CLASSPATH to find files for
- "[i" commands and friends.
-
-
- 'comments':
- 7 When using "comments=fg:--", Vim inserts three spaces for a new line.
- When hitting a TAB, these spaces could be removed.
- 7 The 'n'esting flag doesn't do the indenting of the last (rightmost) item.
- 6 Make strings in 'comments' option a RE, to be able to match more
- complicated things. (Phillipps) Use a special flag to indicate that a
- regexp is used.
- 8 Make the 'comments' option with "/* * */" lines only repeat the "*" line
- when there is a "/*" before it? Or include this in 'cindent'?
-
-
- Text objects:
- 8 Add test script for text object commands "aw", "iW", etc.
- 8 Add "gp" and "gP" commands: insert text and make sure there is a single
- space before it, unless at the start of the line, and after it, unless at
- the end of the line or befor a ".".
- 7 Add "g{" and "g}" to move to the first/last character of a paragraph
- (instead of the line just before/after a paragraph as with "{" and "}").
- 6 Ignore comment leaders for objects. Make "das" work in reply-email.
- 5 Make it possible to use syntax group matches as a text object. For
- example, define a "ccItem" group, then do "da<ccItem>" to delete one.
- Or, maybe just define "dai", delete-an-item, to delete the syntax item the
- cursor is on.
-
-
- Select mode:
- 7 Alt-leftmouse starts block mode selection in MS Word.
- 7 Add Cmdline-select mode. Like Select mode, but used on the command line.
- - Change gui_send_mouse_event() to pass on mouse events when 'mouse'
- contains 'C' or 'A'.
- - Catch mouse events in ex_getln.c. Also shift-cursor, etc., like in
- normal_cmd().
- - remember start and end of selection in cmdline_info.
- - Typing text replaces the selection.
-
-
- Visual mode:
- 8 In non-blockwise Visual mode, "r" should replace all characters with the
- typed one, like in blockwise Visual mode.
- What is "R" supposed to do?
- 7 Support dragging the Visual area to drop it somewhere else. (Aaron)
- 7 With blockwise Visual mode and "c", "C", "I", "A", etc., allow the use of
- a <CR>. The entered lines are repeated over the Visual area.
- 7 CTRL-V :s should substitute only in the block.
- 7 Don't move the cursor when scrolling? Needed when the selection should
- stay the same. Scroll to the cursor at any movement command. With an
- option!
- 7 In Visual block mode, need to be able to define a corner on a position
- that doesn't have text? Also: when using the mouse, be able to select
- part of a TAB. Even more: Add a mode where the cursor can be on a screen
- position where there is no text. When typing, add spaces to fill the gap.
- Other solution: Always use curswant, so that you can move the cursor to
- the right column, and then use up/down movements to select the line,
- without changing the column.
- 6 ":left" and ":right" should work in Visual block mode.
- 7 For Visual mode: Command to do a search for the string in the marked area.
- Only when less than two lines. Use "g/" and "g?".
- 7 Filtering a block should only apply to the block, not to the whole lines.
- When the number of lines is increased, add lines. When decreased, padd with
- spaces or delete? Use ":`<,`>" on the command line.
- 7 CTRL-I and CTRL-O should work in Visual mode, but only jump to marks in the
- current buffer.
- 7 CTRL-A and CTRL-X should increase/decrease all numbers in the Visual area.
- 7 "g_CTRL-G" should count the number of characters in the Visual area.
- 6 "I" should insert the same text in front of the selected text, in each
- line.
- 6 "A" should append the same text after the selected text, in each line.
- 6 "p" should replace the Visual area with the contents of a register (swap
- register contents with Visual text).
- 6 ":'<,'>source" should read the selected lines and ":source" them.
- 6 When in blockwise visual selection (CTRL-V), allow cursor to be placed
- right of the line. Could also allow cursor to be placed anywhere on a TAB
- or other special character.
- 6 Add commands to move selected text, without deselecting.
- 6 Add visual command to swap selected text with unnamed register.
-
-
- Quickfix:
- 8 Quickfix mode: Column number should be interpreted with an 8-character
- tabstop.
- 6 Show quickfix lines (same as ":cl!") in a window. Use a command to
- jump to the error (perhaps CTRL-], like with tags). Does this open a new
- window, or use an existing window?
-
-
- More advanced repeating commands:
- - 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).
- "y." will repeat last yank.
- "2gc." will repeat the last but one change?
- Also: keep history of Normal mode commands, add command to list the history
- and/or pick an older command.
- - History stack for . command? Use "g." command.
-
-
- Mappings and Abbreviations:
- 8 To make a mapping work with a prepended "x to select a register, store the
- last _typed_ register name and access it with "+.
- 8 Add ":amap", like ":amenu".
- 8 Add ":cab!", abbreviations that only apply to Command-line mode and not to
- entering search strings.
- 8 Allow mapping of CTRL-@ (anywhere in the LHS).
- 8 Add a way to save a current mapping and restore it later. Use a function
- that returns the mapping command to restore it: mapcmd()? mapcheck() is
- not fool proof. How to handle ambigious mappings?
- 7 Mappings local to a buffer. Or Mappings local to a filetype?
- 7 Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
- 7 Allow mapping "Q" and "Q}" at the same time. Need to put a flag with "Q",
- that it needs an extra character before it can match. See Vile 'maplonger'
- option.
- 7 When someone tries to unmap with a trailing space, and it fails, try
- unmapping without the trailing space. Helps for ":unmap xx | unmap yy".
- 7 Make it possible to map 'wildchar', but only when it's a special character
- (like CTRL-E). Currently it's only recognized when typed. Useful for
- mapping a key to do something and then completion.
- 6 Context-sensitive abbreviations: Specify syntax group(s) in which the
- abbreviations are to be used.
- - Add mappings that take arguments. Could work like the ":s" command. For
- example, for a mouse escape sequence:
- :mapexp <Esc>{\([0-9]*\),\([0-9]*\); H\1j\2l
- - Add the possibility to enter mappings which are used whenever normal text
- could be enetered. E.g., for "f" command. But not in Normal mode. Sort
- of opposite of 'langmap'. Use ":tmap" command?
- - Make it possible to include a <Nul> in the lhs and rhs of a mapping.
- - Add command to repeat a whole mapping ("." only repeats the last change in
- a mapping). Also: Repeat a whole insert command, including any mappings
- that it included. Sort-of automatic recording?
- - Make it possible to undo all the commands from a mapping, including a
- trailing unfinished command, e.g. for ":map K iX^[r".
- - Add an option to ":map" that makes it display the special keys in
- <> notation (e.g. <CR> instead of ^M). Or just always do this?
- - Include an option (or flag to 'cpoptions') that makes errors in mappings
- not flush the rest of the mapping (like nvi does).
- - Use context sensitiveness of completion to switch abbreviations and
- mappings off for :unab and :unmap.
- 6 When using mappings in Insert mode, insert characters for incomplete
- mappings first, then remove them again when a mapping matches. Avoids
- that characters that are the start of some mapping are not shown until you
- hit another character.
- - Add optional <Number> argument for mappings:
- :map <Number>q ^W^W<Number>G
- :map <Number>q<Number>t ^W^W<Number1-1>G<Number2>l
- :map q<Char> :s/<Char>/\u\0/g
- Or implicit:
- :map q <Register>d<Number>$
- - Add mappings for replace mode: ":rmap". How do we then enter mappings for
- non-replace Insert mode?
- - Add separate mappings for Visual-character/block/line mode?
- 6 Alias for Normal mode commands, works like :substitute? Would allow
- mappings with arguments.
- - Add 'mapstop' command, to stop recursive mappings.
- - List mappings that have a raw escape sequence both with the name of the key
- for that escape sequence (if there is one) and the sequence itself.
- - List mappings: Once with special keys listed as <>, once with meta chars as
- <M-a>, once with the byte values (octal?). Sort of "spell mapping" command?
- - When entering mappings: Add the possibility to enter meta keys like they
- are displayed, within <>: <M-a>, <~@> or <|a>.
- - Allow multiple arguments to :unmap.
- - Command to show keys that are not used and available for mapping
- ":freekeys".
- - Allow any character except white space in abbreviations lhs (Riehm).
- 8 Add spell checking. For example, include ispell:
- ~/vim/patches/wm_vim-5_4d.zip .
- Or: Use "ispell -a".
-
-
- Incsearch:
- - Add a limit to the number of lines that are searched for 'incsearch'?
- - When incsearch used and hitting return, no need to search again in many
- cases, saves a lot of time in big files. (Slootman wants to work on this?)
- When not using special characters, can continue search from the last match
- (or not at all, when there was no match). See oldmail/webb/in.872.
- - With incsearch, use CTRL-N/CTRL-P to go to next/previous match, some other
- key to copy matched word to search pattern (Alexander Schmid).
-
-
- Searching:
- 8 Allow identical pairs in 'matchpairs'. Restrict the search to the current
- line.
- 8 "/:/e+1" gets stuck on a match at the end of the line. Do we care?
- 8 A pattern like "\([^a]\+\)\+" takes an awful long time. Recognize that
- the recursive "\+" is meaningless and optimize for it.
- This one is also very slow on "/* some comment */": "^\/\*\(.*[^/]\)*$".
- 7 Recognize "[a-z]", "[0-9]", etc. and replace them with the faster "\l" and
- "\d".
- - Add an option not to use 'hlsearch' highlighting for ":s" and ":g"
- commands. (Kahn) Or an extra flag to skip it once.
- - Add {group-name} flag for search string, to restrict the search to a
- specific highlight group. Use "/./<Group>" to find the start of a group.
- - Support Perl regexp. Use PCRE (Perl Compatible RE) package. (Shade)
- Switch on with an option for typed commands/mappings/functions?
- 8 Why does ".*" have a limit of 32767 characters? Can it be removed?
- 7 Add POSIX regexp, like Nvi, with 'extended' option? It's like very-magic.
- - Remember flags for backreferenced items, so that "*" can be used after it.
- Check with "\(\S\)\1\{3}". (Hemmerling)
- - Add flags to search command:
- i ignore case
- I use case
- p use Perl regexp syntax (or POSIX?)
- v use Vi regexp syntax
- Perl uses these too:
- e evaluate the right side as an expression (Perl only)
- m multiple line expression
- o compile only once (Perl only)
- s single line expression
- x extended regexp
- When used after ":g" command, backslash needed to avoid confusion with the
- following command.
- Add 'searchflags' for default flags (replaces 'gdefault').
- - Add command to display the last used substitute pattern and last used
- pattern. (Margo) Maybe make it accessible through a register (like "/
- for search string)?
- 8 Make "/ register writable. (Maxi)
- How to take care of the flags (offset, magic)?
- 7 Should notice that "\(a\|ab\|abc\|abcd\)" doesn't work, automatically
- change it to "\(abcd\|abc\|ab\|a\)"? (Campbell)
- 7 Use T-search algorithm, to speed up searching for strings without special
- characters. See C't article, August 1997.
- - Add 'fuzzycase' option, so that case doesn't matter, and '-' and '_' are
- equivalent (for Unix filenames).
- - Add 'v' flag to search command: enter Visual mode, with the matching text
- as Visual area. (variation on idea from Bertin)
- - Searching: "/this//that/" should find "that" after "this".
- - Add flag to search command to forget it for "n", e.g. "/foo/f". Also for
- ":s/pat//f". Also add flag to 'r'emember (for mappings).
- - 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) ".
- - Special characters in patterns:
- \A beginning of string (for multi-line matching)
- \Z end of string (idem)
- Inside []:
- \012 octal character
- \0x1a hex character
- \<BS> special character
- 7 When searching with 'n' give message when getting back where the search
- first started. Remember start of search in '/ mark.
- 7 Add option that scrolls screen to put cursor in middle of screen after
- search always/when off-screen/never. And after a ":tag" command. Maybe
- specify how many lines below the screen causes a redraw with the cursor in
- the middle (default would be half a screen, zero means always).
- 6 Add \! to search patterns: matches string that does not match previous
- atom.
- 6 Use \& for "and", like \| for "or".
- 6 Support multiple search buffers, so macros can be made without side
- effects.
- 7 From xvim: Allow a newline in search patterns (also for :s, can delete
- newline). Add BOW, EOW, NEWL, NLORANY, NLBUTANY, magic 'n' and 'r', etc.
- [not in xvim:] Add option to switch on matches crossing ONE line boundary.
- 7 Add register for '?' and '/' commands? (yank_buf()).
- - In regexp, allow use of special characters with "\<nn>" notation?
- 7 Add ":iselect", a combination of ":ilist" and ":tselect". (Aaron)
- Also ":dselect".
-
-
- Undo:
- 8 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 was already saved for undo.
- 7 Add an undo tree: When making a change, instead of clearing any future
- undo (thus redo) info, make a new branch. How to navigate through the
- undo tree?
- - For u_save() include the column number. This can be used to set '[ and '].
- And in the future the undo can be made more efficient (Webb).
- - In out-of-memory situations: Free allocated space in undo, and reduce the
- number of undo levels (with confirmation).
- - Instead of [+], give the number of changes since the last write: [+123].
- When undoing to before the last write, change this to a negative number:
- [-99].
- 7 Make it possible to jump to the location of the last change. Like doing
- "u" "CTRL-R". (Lange)
- - With undo with simple line delete/insert: optimize screen updating.
- - When executing macro's: Save each line for undo only once.
- - Store undo info in a file that survives until the next edit. Then it's
- possible to undo to before the current editing session. Combined with
- viminfo?
- - When doing a global substitute, causing almost all lines to be changed,
- undo info becomes very big. Put undo info in swap file??
-
-
- Buffer list:
- 7 Command to execute a command in another buffer: ":inbuf {bufname} {cmd}".
- Also for other windows: ":inwin {winnr} {cmd}". How to make sure that
- this works properly for all commands, and still be able to return to the
- current buffer/window? E.g.: ":inbuf xxx only".
- 8 Share things between buffers with the same 'filetype': syntax, mappings,
- autocommands, buffer-specific options, etc.. Avoids that syntax is
- reloaded when jumping from *.c to *.c file and reduces the need for
- BufEnter autocommands.
- 8 Add File.{recent_files} menu entries: Recently edited files.
- 8 Unix: Check all uses of fnamecmp() and fnamencmp() if they should check
- inode too.
- 7 Add another number for a buffer, which is visible for the user. When
- creating a new buffer, use the lowest number not in use. (or the highest
- number in use plus one?)
- 7 Offer some buffer selection from the command line? Like using ":ls" and
- asking for a buffer number. (Zachmann)
- - When starting to edit a file that is already in the buffer list, use the
- file name argument for the new short file name. (Webb)
- - Add an option to make ":bnext" and ":bprev" wrap around the end of the
- buffer list. Also for ":next" and ":prev"?
- 7 Add argument to ":ls" which is a pattern for buffers to list.
- E.g. ":ls *.c". (Thompson)
- 7 Add expansion of buffer names, so that "*.c" is expanded to all buffer
- names. Needed for ":bdel *.c", ":bunload *.c", etc.
- 8 Support for <afile> where a buffer name is expected.
- 8 Some commands don't use line numbers, but buffer numbers. '$'
- should then mean the number of the last buffer. E.g.: "4,$bdel".
- 7 Add an option to mostly use slashes in file names. Separately for
- internal use and for when executing an external program?
-
-
- Swap (.swp) files:
- 8 If writing to the swap file fails, should try to open one in another
- directory from 'dir'. Useful in case the file system is full.
- 8 When the edited file is a symlink, try to put the swap file in the same
- dir as the actual file. Adjust FullName(). Avoids editing the same file
- twice (e.g. when using quickfix). Also try to make the name of the backup
- file the same as the actual file?
- 7 When using 64 bit inode numbers, also store the top 32 bits. Add another
- field for this, using part of bo_fname[], to keep it compatible.
- 7 When editing a file on removable media, should put swap file somewhere
- else. Use something like 'r' flag in 'viminfo'. 'diravoid'?
- Also: Be able to specify minimum disk space, skip directory when not
- enough room.
- 7 Add a configure check for which directory should be used: /tmp, /var/tmp
- or /var/preserve.
- - Add an option to create a swap file only when making the first change to
- the buffer. (Liang) Or only when the buffer is not read-only.
- - Add option to set "umask" for backup files and swap files (Antwerpen).
- 'backupumask' and 'swapumask'? Or 'umaskback' and 'umaskswap'?
- - When editing a readonly file, don't use a swap file but read parts from the
- original file. Also do this when the file is huge (>'maxmem'). We do
- need to load the file once to count the number of lines? Perhaps keep a
- cached list of which line is where.
-
-
- Viminfo:
- 7 Can probably remove the code that checks for a writable viminfo file,
- because we now do the chown() for root, and others can't overwrite someone
- else's viminfo file.
- 8 Add argument to keep the list of buffers when Vim is started with a file
- name. (Schild)
- 8 Remember a list of last accessed files. To be used in the
- "File.Open Recent" menu. Default is to remember 10 files or so.
- Also remember which files have been read and written. How to display
- this?
- 6 Store a snapshot of the currently opened windows. So that when quitting
- Vim, and then starting again (without a file name argument), you see the
- same files in the windows. Use ":mksession" code?
- - Make marks present in .viminfo usable as file marks: Display a list of
- "last visited files" and select one to jump to.
- - Add jumplist to viminfo file, so that CTRL-O can be used.
-
-
- Modelines:
- 8 Before trying to execute a modeline, check that it looks like one (valid
- option names). If it's very wrong, silently ignore it.
- - When an option value is coming from a modeline, do not carry it over to
- another edited file? Would need to remember the value from before the
- modeline setting.
- - Allow ":doauto BufRead x.cpp" in modelines, to execute autocommands for
- .cpp files.
- - Support the "abbreviate" command in modelines (Kearns). Careful for
- characters after <Esc>, that is a security leak.
- - Add option setting to ask user if he wants to have the modelines executed
- or not. Same for .exrc in local dir.
-
-
- Options:
- 8 When using set +=, check for flags used twice. Add P_FLAGS for options
- that are a list of flags, and remove doubled flags.
- 8 Make ":mksession" store buffer-specific options for the specific buffer.
- 8 With ":mksession" always store the 'sessionoptions' option, even when
- "options" isn't in it. (St-Amant)
- 8 When using ":mksession", also store a command to reset all options to
- their default value, before setting the options that are not at their
- default value.
- 8 Should ":mksession" restore the current directory when writing the
- session, or the directory where the session file is? Probably need a word
- in 'sessionoptions' to make a choice.
- 8 Make "old" number options that really give a number of effects into string
- options that are a comma separated list. The old number values should
- also be supported.
- 8 Make it possible to set options from modelines, mappings and :sourced
- files only temporarily for that file (needs a stack for saving old
- options). ":this set" command? Also ":this map", ":this abbrev".
- Or use ":local"?
- 8 When entering a new buffer, don't copy buffer-specific options. Need a
- set of buffer-neutral options.
-
-
- External commands:
- 9 When filtering a buffer (e.g., to gunzip it) marks are changed when they
- shouldn't. Add an option to switch of adjusting marks. Use it for .gz
- files gunzipping and gzipping.
- 8 When filtering text, redirect stderr so that it can't mess up the screen
- and Vim doesn't need to redraw it. Also for ":r !cmd".
- 4 Set separate shell for ":sh", piping "range!filter", reading text "r !ls"
- and writing text "w !wc". (Deutsche) Allow arguments for fast start (e.g.
- -f).
- 4 Allow direct execution, without using a shell.
- 4 Run an external command in the background. But how about I/O in the GUI?
- Careful: don't turn Vim into a shell!
- - Add 'echo' option: When off don't echo shell commands.
-
-
- Folding:
- - three basic modes (with a "fold mode" setting?):
- 1. automatic: set folding level, all lines above this level will be folded
- - For C-code: fold more or less {} blocks.
- - For C-code: fold comments or non-comments.
- - Fold depending on the indent (or use a regexp).
- - Use syntax highlighting stuff to detect a folding level.
- Syntax-highlighting, syntax-folding (and syntax-indenting).
- 2. manual: the user specifies which lines to fold or unfold.
- ":[range]fold". Can use Visual mode to fold any range of lines:
- "vaB:fold". Use ":[range]fold {text}" to give a name to the fold.
- 3. half-automatic: recognize objects in the text, allow the user to
- fold/unfold these objects.
- - Allow the user to specify the marker, or regexp, or use syntax
- highlighting.
- This is actuall 2 with some commands added to select lines.
- David Harrison has some things.
- - Unfold with <Tab> on folded line? Or at least ":[line]unfold".
- Or use "<" to fold more and ">" to unfold.
- - Use the concept of a "view" on a file: Contains the folding, topline,
- 'list', 'number', 'hlsearch', 'wrap', etc.
- Be able to store and retrieve views. Automatically (use last used view
- for a file) and under a name (store combinations of options). In viminfo?
- - Programs to use as an example:
- ae (Williams): www.interalpha.net/customer/nyangau/
- f (Beton): ?
- fe (Beton prefers f): http://www.moria.de/~michael/fe/
- origami: www.hensa.ac.uk/parallel/tools/editors/folding-editors/index.html
- Elcomsoft's (has bugs): www.elcomsoft.com/origami.html
- JED (Baugher)
- WinFold (~/src/winfold).
- Codewright: regexp, brace level, indent level, preprocs, lines,
- paragraphs, functions.
- macros: ~/vim/macros/fold.vim .
- - Ex range which stands for folded lines and non-folded lines.
- :=d cmd displayed lines
- :=f cmd folded lines
- - Deleting a "folded" line deletes all the folded lines. Putting it
- somewhere else puts all the folded lines. Useful for moving functions
- around.
- - Display folded lines with "+--- %d lines folded".
- - Implementation: Remember the folding level for each line (perhaps in a
- list of ranges). Select lines when displaying the buffer in a window.
- Use an option to tell to display lines above or below a fold level.
- - Add 'hidecomment' option: don't display comments in /* */ and after //.
-
-
- Multiple Windows:
- - Allow vertical splitting of screen (once?).
- 7 When starting Vim several times, instanciate a Vim server, that allows
- communication between the different Vims. Feels like one Vim running with
- multiple top-level windows. Esp. useful when Vim is started from an IDE
- too. Requires some form of inter process communication.
- - Support a connection to an external viewer. Could call the viewer
- automatically after some seconds of non-activity, or with a command.
- Allow some way of reporting scrolling and cursor positioning in the viewer
- to Vim, so that the link between the viewed and edited text can be made.
-
-
- Marks:
- 8 Add a command to jump to a mark and make the motion inclusive. g'm and g`m?
- 8 Add mark at the last change. Per buffer. Could use "'.".
- 8 Add a command to jump to next defined mark. (Rogers) See patch from
- Sieger. "]'" and "['"?
- 8 When deleting lines, don't delete uppercase marks in them. Move the mark
- to the nearest line.
- 8 The '" mark is set to the first line, even when doing ":next" a few times.
- Only set the '" mark when the cursor was really moved in a file.
- 7 Make a list of file marks in a separate window. For listing all buffers,
- matching tags, errors, etc. Normal commands to move around. Add commands
- to jump to the mark (in current window or new window). Start it with
- ":browse cmd"?
- 7 For ":jumps", ":tags" and ":marks", for not loaded buffers, remember the
- text at the mark. Highlight the column with the mark.
- 7 Highlight each mark in some way (With "Mark" highlight group).
- Or display marks in a separate column, like 'number' does.
- 7 Use d"m to delete rectangular area from cursor to mark m (like Vile's \m
- command).
- 7 Try to keep marks in the same position when:
- - replacing with a line break, like in ":s/pat/^M/", move marks after the
- line break column to the next line. (Acevedo)
- - filtering lines, try to keep the marks in the filtered lines. Need to
- move some marks if the number of lines decreases.
- - changing text, e.g. when formatting with "gq".
- - inserting/deleting characters in a line.
- 5 Include marks for start/end of current word, sentence, paragraph, section.
- Useful in mappings.
-
-
- Digraphs:
- 8 Make it possible to enter a digraph after "r" (with CTRL-K).
- - Make it possible to enter "r<C-E>" and "r<C-Y>" (get character from line
- below/above).
- - Use digraph table to tell Vim about the collating sequence of special
- characters?
- - Add command to remove (all) digraphs. (Brown)
- 7 Make it possible to switch between DOS and ISO digraphs for Win32 GUI.
-
-
- Multibyte support:
- 9 Check "gR" for proper working of backspacing.
- 9 With Athena and Motif the status line overwrites a bottom scrollbar?
- 9 The BROKEN_LOCALE check should be done at runtime, not at compile time.
- Helps when compiling on one machine and running on another.
- 8 Include some of the patches ~/vim/patches/muraoka.diff.tgz (Muraoka)
- Find another solution for CSI from the GUI. Prepare for UTF-8.
- - Substitute doesn't work well on multibyte characters:
- ":s/\(.\)/\1\1/g" replaces each byte instead of each multi-byte.
- Requires regexp code that sees a multibyte character as one char.
- - When wrapping words, allow splitting at each multibyte character, not only
- at a space (with an option). (Nishioka)
- - Support full UTF8 format, also three to eight byte characters. Use a skip
- table (from Larry Wall). Example: mined. It contains code to detect UTF8
- and Latin-1 encoding.
- (www.inf.fu-berlin.de/~wolff/mined.html and mined-utf.html).
- Detect some encodings: FF FE: UCS-2 little endian, FE FF: UCS-2 big
- endian, FF FE 00 00: UCS-4 little endian, 00 00 FE FF: UCS-4 big endian,
- EF BB BF: UTF-8.
- - Support "overstrike" characters. E.g., vowel points for Hebrew. (Aaron)
- - Check "yudit" for its Unicode handling. But its keyboard translation
- files are not powerful enough.
- - Use OTP files from Omega. http://www/ens.fr/omega/ (Vidal)
- Or use input software like xkinput.
- - use mblen or related functions to be more portable i18n (Nagano)
- - fileencoding option should be changed to be able to specify locale
- or machine dependent encoding information such as SJIS, EUC, etc. (Nagano)
-
-
- Writing files:
- - In vim_rename(), should lock "from" file when deleting "to" file for
- systems other than Amiga. Avoids problems with unexpected longname to
- shortname conversion.
- 8 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).
- 7 Support ACLs (Access Control Lists, Security Descriptor in WinNT). Check
- with Windows NT or HPUX 10.*? Add configure check for it, add code for
- when overwriting a file (viminfo or ":w" command) that copies the ACL to
- the new file. Use info from Maximo: GetNamedSecurityInfo and
- SetNamedSecurityInfo.
- 8 When appending to a file, Vim should also make a backup and a 'patchmode'
- file.
- 6 Add an option to write a new, numbered, backup file each time. Like
- 'patchmode', e.g., 'backupmode'.
- 6 Make it possible to write 'patchmode' files to a different directory.
- E.g., ":set patchmode=~/backups/*.orig". (Thomas)
- 6 Add an option to prepend something to the backup file name. E.g., "#".
- Or maybe allow a function to modify the backup file name?
- 8 Only make a backup when overwriting a file for the first time. Avoids
- loosing the original when writing twice. (Slootman)
- 7 On non-Unix machines, also overwrite the original file in some situations
- (file system full, it's a link on an NFS partition).
- 7 When editing a file, check that it has been change outside of Vim more
- often, not only when writing over it. E.g., at the time the swap file is
- flushed. Or every ten seconds or so (use the time of day, check it before
- waiting for a character to be typed).
-
-
- Substitute:
- - :s///p prints the line after a substitution.
- - With :s///c replace \&, ~, etc. when showing the replacement pattern.
- 8 With :s///c allow scrolling horizontally when 'nowrap' is effective.
- Also allow a count before the scrolling keys.
- - Add number option to ":s//2": replace second occurrence of string? Or:
- :s///N substitutes N times.
- - Add answers to ":substitute" with 'c' flag, used in a ":global", e.g.:
- ":g/pat1/s/pat2/pat3/cg": 'A' do all remaining replacements, 'Q' don't do
- any replacements.
- 7 Substitute in a block of text. Use {line}.{column} notation in an Ex
- range, e.g.: ":1.3,$.5s" means to substitute from line 1 column 3 to the
- last line column 5.
-
-
- Mouse support:
- 8 Included jsbmouse support (Garth) ~/vim/patches/garth.jsbmouse .
- 8 Move code common to jump_to_mouse() and get_fpos_of_mouse() together.
- 8 Add 'mouse' flag, which sets a behavior like Visual mode, but automatic
- yanking at the button-up event. Or like Select mode, but typing gets you
- out of Select mode, instead of replacing the text. (Bhaskar)
- 7 Checkout sysmouse() for FreeBSD console mouse support.
- - Implement mouse support for the Amiga console.
- - Using right mouse button to extend a blockwise selection should attach to
- the nearest corner of the rectangle (four possible corners).
- - Precede mouse click by a number to simulate double clicks?!?
- - When mouse click after 'r' command, get character that was pointed to.
-
-
- Crypt:
- 8 Also crypt the swapfile, each block separately. Change mf_write() and
- mf_read(). How to get b_p_key to these functions?
- 8 Ask the key to be typed twice when crypting the first time. Otherwise a
- typo might cause the text to be lost forever.
-
-
- Argument list:
- 7 Make an argument list per window. ":argnew <file> .."?
- And/or: Add the possibility to use more than one argument list: ":arglist
- 2".
- Would require commands to switch to another argument list too.
- 6 Add command to add or remove files from the argument list. Useful when
- doing commands for all files in the argument list.
- ":argadd <file> .." and ":argdel <file> .."?
- 6 Add command to put all filenames from the tag files in the argument list.
- When given an argument, only use the files where that argument matches
- (like `grep -l ident`) and jump to the first match.
- 6 Add command to form an args list from all the buffers.
- 7 Allow multiple arguments for ":edit", add them to the argument list.
-
-
- Various improvements:
- 6 Include the ruby interface?
- 7 Include some of the HierAssist changes? (Shah)
- 7 Open a server socket (with an option for IP/port nr) to allow remote
- control. Optionally with a password to restrict access.
- Use the Simple Sockets Library? (Campbell)
- Same sample code (brent verner): http://linux1.org/misc/vim_socket.tar.bz2
- 8 Include a connection to an external program through a pipe? See patches
- from Felbinger for a mathematica inteface.
- 8 Enabling features is a mix of configure arguments and defines in
- feature.h. How to make this consistent? Feature.h is required for
- non-unix systems. Perhaps let configure define CONF_XXX, and use #ifdef
- CONF_XXX in feature.h? Then what should min-features and max-features do?
- 8 Don't display empty registers with ":display". (Etienne)
- 8 Add "g^E" and "g^Y", to scroll a screen-full line up and down.
- 6 Add ":timer" command, to set a command to be executed at a certain
- interval, or once after some time has elapsed. (Aaron)
- 8 Add ":confirm" handling in open_exfile(), for when file already exists.
- 8 Use confirm/dialog stuff to ask the user, when a file has changed outside
- of Vim, if he wants to reload it. Triggered when focus gained, after
- shell command, when entering another buffer, etc..
- Also do this when editing a new file, and another application creates
- the file before doing ":w" in Vim.
- Also check if the file protection has changed. When checking a file into
- RCS it is made read-only, when checking out it is made read-write.
- 8 When quitting with changed files, make the dialog list the changed file
- and allow "write all", "discard all", "write some". The last one would
- then ask "write" or "discard" for each changed file. Patch in HierAssist
- does something like this. (Shah)
- 7 Use growarray for replace stack.
- 7 Have a look at viH (Hellenic or Greek version of Vim). But a solution
- outside of Vim might be satisfactory (Haritsis).
- 6 Allow a local doc directory? And syntax, tools, macros...? Use 'vimpath'
- option: list of directories which are used instead of $VIM.
- 3 Make "2d%" work like "d%d%" instead of "d2%"?
- 8 Make "more" prompt accept command characters, like "hit-return" prompt?
- Or extend it with more commands, like "less": 'b' for back, 'j' for one
- line down, etc.
- 8 For the "--more--" prompt, support the 'b'ack command for more commands.
- 7 "g CTRL-O" jumps back to last used buffer. Skip CTRL-O jumps in the same
- buffer. Make jumplist remember the last ten accessed buffers?
- 7 Add a history of recently accessed buffer. Maybe make "2 CTRL-^" jump to
- the 2nd previously visited buffer, "3 CTRL-^" to the third, etc. Or use
- "3 g CTRL-^" for this?
- 5 Add an option to set the width of the 'number' column. Eight positions is
- often more than needed.
- - Add code to disable the CAPS key when going from Insert to Normal mode.
- 8 Add the possibility to have scratch buffers. They don't have a swap file.
- The name is not related to a file. Useful for the file selection macros.
- Use a 'scratch' option?
- - Set date/protection/etc. of the patchfile the same as the original file.
- - Use growarray for termcodes[] in term.c
- - Use getrlimit() (if possible) to set 'maxmemtot' and 'maxmem'.
- - Add <window-99>, like <cword> but use filename of 99'th window.
- - Should make it possible for ml_get() to keep more than one line locked.
- Use ml_get_locked()? Needed to be able to make a regexp that understands
- line breaks.
- - Make a set of operations on list of names: expand wildcards, replace home
- dir, append a string, delete a string, etc.
- - Remove mktemp() and use tmpname() only? Ctags does this.
- - When replacing environment variables, and there is one that is not set,
- turn it into an empty string? Only when expanding options? (Hiebert)
- - Option to set command to be executed instead of producing a beep (e.g. to
- call "play newbeep.au").
- - Add option to show the current function name in the status line. More or
- less what you find with "[[k", like how 'cindent' recognizes a function.
- (Bhatt).
- - "[r" and "]r": like "p" and "P", but replace instead of insert (esp. for
- blockwise registers).
- - Add 'timecheck' option, on by default. Makes it possible to switch off the
- timestamp warning and question. (Dodt).
- - Add an option to set the time after which Vim should check the timestamps
- of the files. Only check when an event occurs (e.g., character typed,
- mouse moved). Useful for non-GUI versions where keyboard focus isn't
- noticable.
- 9 When using ":w <fname>" it's possible that this file is loaded in another
- buffer. Give a warning right away, don't wait for a shell command.
- - Add ":first", ":bfirst", etc. to complement ":last", ":blast, etc.
- - Make 'smartcase' work even though 'ic' isn't set (Webb).
- 7 When formatting text, allow to break the line at a number of characters.
- Use an option for this: 'breakchars'? Useful for formatting Fortran code.
- - Add flag to 'formatoptions' to be able to format book-style paragraphs
- (first line of paragraph has larger indent, no empty lines between
- paragraphs). Complements the '2' flag. Use '>' flag when larger indent
- starts a new paragraph, use '<' flag when smaller indent starts a new
- paragraph. Both start a new paragraph on any indent change.
- - 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.
- 8 Add $CDPATH patch from Raf? Change it a little: Add 'cdpath' option,
- which is filled from $CDPATH. "." is dir of current file, "" is current
- directory. Suggestion in docs to change it when it's wrong:
- let &cdpath=substitute(substitute($CDPATH,',','\\,','g'),':',',','g')
- 8 Use a current directory per window? See patches from Chen. Does a
- "chdir" when switching to another window. ":lcd" and ":lchdir" only work
- for the current window, ":cd" for all windows.
- Check: How do we know if a window uses the global dir or its own?
- Optional: Make the current directory equal to the file that is currently
- being edited.
- 8 ":cd": echo the new current directory.
- 6 Add ":cdprev": go back to the previous directory. Need to remember a
- stack of previous directories. We also need ":cdnext".
- 7 Should ":cd" for MS-DOS go to $HOME, when it's defined?
- - Make "gq<CR>" work on the last line in the file. Maybe for every operator?
- 8 findmatchlimit() should be able to skip comments. Solves problem of
- matching the '{' in /* if (foo) { */ (Fiveash)
- - findmatch() should be adjusted for Lisp. See remark at get_lisp_indent().
- - Add more redirecting of Ex commands:
- :redir @> register (append)
- :redir # bufname
- :redir #> bufname (append)
- :redir = variable
- :redir => variable (append)
- - Setting of options, specifically for a buffer or window, with
- ":set window.option" or ":set buffer.option=val". Or use ":buffer.set".
- Also: "buffer.map <F1> quit".
- - Add :delcr command:
- *:delcr*
- :[range]delcr[!] Check [range] lines (default: whole buffer) for lines
- ending in <CR>. If all lines end in <CR>, or [!] is
- used, remove the <CR> at the end of lines in [range].
- A CTRL-Z at the end of the file is removed. If
- [range] is omitted, or it is the whole file, and all
- lines end in <CR> 'textmode' is set. {not in Vi}
- - Should integrate addstar() and file_pat_to_reg_pat().
- - When working over a serial line with 7 bit characters, remove meta
- characters from 'isprint'.
- - Use fchdir() in init_homedir(), like in FullName().
- - In win_update(), when the GUI is active, always use the scrolling area.
- Avoid that the last status line is deleted and needs to be redrawn.
- - That "cTx" fails when the cursor is just after 'x' is Vi compatible, but
- may not be what you expect. Add a flag in 'cpoptions' for this? More
- general: Add an option to allow "c" to work with a null motion.
- - Give better error messages by using errno (strerror()).
- - Give "Usage:" error message when command used with wrong arguments (like
- Nvi).
- - Make 'restorescreen' option also work for xterm (and others), replaces the
- SAVE_XTERM_SCREEN define.
- 7 Support for ":winpos" In xterm: report the current window position.
- - Give warning message when using ":set t_xx=asdf" for a termcap code that
- Vim doesn't know about. Add flag in 'shortmess'?
- 6 Add ":che <file>", list all the include paths which lead to this file.
- - For a commandline that has several commands (:s, :d, etc.) summarize the
- changes all together instead of for each command (e.g. for the rot13
- macro).
- 8 Allow something in 'include' or 'path' to automatically add a file name
- extension. For languages that use "include file" to include "file.ext".
- - Add command like "[I" that also shows the tree of included files.
- - Add command like ":ts" that shows the output of "[I" and asks for a match
- to jump to. (Zellner)
- - ":set sm^L" results in ":set s", because short names of options are also
- expanded. Is there a better way to do this?
- - Add ":@!" command, to ":@" like what ":source!" is to ":source".
- 8 Add ":@:!": repeat last command with forceit set.
- - Should be possible to write to a device, e.g. ":w! /dev/null".
- - Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
- - ":cab map test ^V| je", ":cunab map" doesn't work. This is vi compatible!
- - CTRL-W CTRL-E and CTRL-W CTRL-Y should move the current window up or down
- if it is not the first or last window.
- - Include-file-search commands should look in the loaded buffer of a file (if
- there is one) instead of the file itself.
- - "g CTRL-A" and "g CTRL-X": Increment/decrement alphabetical char
- (a -> b -> c)? With flag in 'nrformats'?
- 7 Change 'nrformats' to include the leader for each format. Example:
- nrformats=hex:$,binary:b,octal:0
- Add setting of 'nrformats' to syntax files.
- - 'path' can become very long, don't use NameBuff for expansion.
- - Allow the use of wildcards in 'path'.
- - When unhiding a hidden buffer, put the same line at top of the window as
- the one before hiding it. Or: keep the same relative cursor position (so
- many percent down the windows).
- - Make it possible for the 'showbreak' to be displayed at the end of the
- line. Use a comma to separate the part at the end and the start of the
- line? Highlight the linebreak characters, add flag in 'highlight'.
- - Some string options should be expanded if they have wildcards, e.g.
- 'dictionary' when it is "*.h".
- - Use a specific type for number and boolean options, making it possible to
- change it for specific machines (e.g. when a long is 64 bit).
- - Add option for <Insert> in replace mode going to normal mode. (Nugent)
- - Add a next/previous possibility to "[^I" and friends.
- - Add possibility to change the HOME directory. Use the directory from the
- passwd file? (Antwerpen)
- - When doing "[^I" or "[^D" add position to tag stack.
- - Add command to put current position to tag stack: ":tpush".
- 8 Add commands to push and pop all or individual options. ":setpush tw",
- ":setpop tw", ":setpush all". Maybe pushing/popping all options is
- sufficient. ":setflush" resets the option stack?
- How to handle an aborted mapping? Remember position in tag stack when
- mapping starts, restore it when an error aborts the mapping?
- - When appending to a register, also report the total resulting number of
- lines. Or just say "99 more lines yanked", add the "more".
- - Use a builtin grep command for ":grep"? Makes it possible to add the
- column number.
- - Keep a list of most recently used files for each window, use "[o" to go
- back (older file) and "]n" to go forward (newer file) (like ^O and ^I for
- jumps) (Webb). Use ":files" and ":ls" to list the files in history order.
- - Change ":fixdel" into option 'fixdel', t_del will be adjusted each time
- t_bs is set? (Webb)
- - "gc": goto character, move absolute character positions forward, also
- counting newlines. "gC" goes backwards (Weigert).
- - When doing CTRL-^, redraw buffer with the same topline (Demirel). Store
- cursor row and window height to redraw cursor at same percentage of window
- (Webb).
- - Besides remembering the last used line number of a file, also remember the
- column. Use it with CTRL-^ et. al.
- - 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 to make "." redo the whole mapping. Basically: redo
- the last TYPED command.
- - Support URL links for ^X^F in Insert mode, like for "gf".
- - Add 'wwwpath', used like 'path' for when "gf" used on an URL?
- - Add ":path" command modifier. Should work for every command that takes a
- file name argument, to search for the file name in 'path'. Use
- find_file_in_path().
- - Highlight control characters on the screen: Shows the difference between
- CTRL-X and "^" followed by "X" (Colon).
- - Integrate parsing of cmdline command and parsing for expansion.
- - When inserting a register in Insert mode with CTRL-R, don't insert comment
- leader when line wraps?
- - Create a program that can translate a .swp file from any machine into a
- form usable by Vim on the current machine.
- - Add ":noro" command: Reset 'ro' flag for all buffers, except ones that have
- a readonly file. ":noro!" will reset all 'ro' flags.
- - Add a variant of CTRL-V that stops interpretation of more than one
- character. For entering mappings on the command line where a key contains
- several special characters, e.g. a trailing newline.
- - 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)
- - Make '2' option in 'formatoptions' also work inside comments.
- - Add 's' flag to 'formatoptions': Do not break when inside a string. (Dodt)
- - Add flag to 'formatoptions' to recognize the change of indent as the start
- of a new paragraph (for paragraphs without separating empty line, but extra
- indent for the new paragraph) (Leitner).
- - When window size changed (with the mouse) and made too small, set it back
- to the minimal size.
- - Add "]>" and "[<", shift comment at end of line (command; /* comment */).
- - Should not call cursorcmd() for each vgetc() in getcmdline().
- - Add the ex address '}', next empty line (like the "}" command).
- - ":split file1 file2" adds two more windows (Webb).
- - Don't give message "Incomplete last line" when editing binary file.
- - Add ":a", ":i" for preloading of named buffers.
- - Allow autowrite when doing ":e file" (with an option 'eaw').
- - Allow a "+command" argument before each file name in the Vim command line:
- "vim +123 file1 +234 file2 +345 file3". ???
- - When entering text, keep other windows on same buffer updated (when a line
- entered)?
- - Check out how screen does output optimizing. Apparently this is possible
- as an output filter.
- - When 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.
- - Window updating from memline.c: insert/delete/replace line.
- - Optimize ml_append() for speed, esp. for reading a file.
- - V..c should keep indent when 'ai' is set, just like [count]cc.
- - Updatescript() can be done faster with a string instead of a char.
- - Screen updating is inefficient with CTRL-F and CTRL-B when there are long
- lines.
- - Uppercase characters in ex commands can be made lowercase?
- - Add "P" command to insert contents of unnamed register, move selected text
- to position of previous deleted (to swap foo and bar in " + foo")
- - Add word count to "g CTRL-G".
- 8 Add option to show characters in text not as "|A" but as decimal ("^129"),
- hex ("\x81") or octal ("\201") or meta (M-x). Nvi has the 'octal' option
- to switch from hex to octal. Vile can show unprintable characters in hex
- or in octal.
- 7 Tighter integration with xxd to edit binary files. Make it more
- easy/obvious to use. Command line argument?
- - How does vi detect whether a filter has messed up the screen? Check source.
- After ":w !command" a wait_return?
- - Improve screen updating code for doput() (use s_ins()).
- - With 'p' command on last line: scroll screen up (also for terminals without
- insert line command).
- - Use insert/delete char when terminal supports it.
- - Optimize screen redraw for slow terminals.
- - Optimize "dw" for long row of spaces (say, 30000).
- - Add "-d null" for editing from a script file without displaying.
- - In Insert mode: Remember the characters that were removed with backspace
- and re-insert them one at a time with <key1>, all together with <key2>.
- - Amiga: Add possibility to set a keymap. The code in amiga.c does not work
- yet.
- - Implement 'redraw' option.
- - Add special code to 'sections' option to define something else but '{' or
- '}' as the start of a section (e.g. one shiftwidth to the right).
- - Add 'indent' option: Always use this amount of indent when starting a new
- line and when formatting text.
- - Use pipes for filtering on Unix.
- 7 Allow using Vim in a pipe: "ls | vim -u xxx.vim - | yyy". Only needs
- implementing ":w" to stdout in the buffer that was read from stdin.
- - 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.
- - Add text justification option.
- - Add put function that replaces the text under it.
- - Set boolean options on/off with ":set paste=off", ":set paste=on".
- - After "inv"ing an option show the value: ":set invpaste" gives "paste is
- off".
- - Check handling of CTRL-V and '\' for ":" commands that do not have TRLBAR.
- - When a file cannot be opened but does exist, give error message.
- - Amiga: When 'r' protection bit is not set, file can still be opened but
- gives read errors. Check protection before opening.
- - When writing check for file exists but no permission, "Permission denied".
- - If file does not exists, check if directory exists.
- - MSDOS: although t_cv and t_ci are not set, do invert char under cursor.
- - Settings edit mode: make file with ":set opt=xx", edit it, parse it as ex
- commands.
- - ":set -w all": list one option per line.
- - 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.
- - :table command (Webb)
- - Add command to go to last non-blank in line (like 0 vs. ^, $ vs. ???)
- - Add new operator: clear, make area white (replace with spaces): "gb".
- - Make it possible for a user to define a new operator. Implementation with
- internal scripting language or Perl?
- - Add command to ":read" a file at a certain column (blockwise read?).
- - For "%" command: set hierarchy for which things include other things that
- should be ignored (like "*/" or "#endif" inside /* */).
- Also: use "%" to jump from start to end of syntax region and back.
- - 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).
- - Allow multiple arguments for ":read", read all the files.
- - Support for tabs in specific columns: ":set tabcol=8,20,34,56" (Demirel).
- - Add 'searchdir' option: Directories to search for file name being edited
- (Demirel).
- - Modifier for the put command: Change to linewise, charwise, blockwise, etc.
- - Add commands for saving and restoring options ":set save" "set restore",
- for use in macro's and the like.
- - Keep output from listings in a window, so you can have a look at it while
- working in another window. Put cmdline in a separate window?
- - Add possibility to put output of ex commands in a buffer or file, e.g. for
- ":set all". ":r :set all"?
- - 'edit' option: When off changing the buffer is not possible (Really
- read-only mode).
- - When the 'equalalways' option is set, creating a new window should not
- result in windows to become bigger. Deleting a window should not result in
- a window to become smaller (Webb).
- - When resizing the whole Vim window, the windows inside should be resized
- proportionally (Webb).
- - Include options directly in option table, no indirect pointers. Use
- mkopttab to make option table?
- - When doing ":w dir", where "dir" is a directory name, write the current
- file into that directory, with the current file name (without the path)?
- - Support for 'dictionary's that are sorted, makes access a lot faster
- (Haritsis).
- - Add "^Vrx" on the command line, replace with contents of register x. Used
- instead of CTRL-R to make repeating possible. (Marinichev)
- - Add "^Vb" on the command line, replace with word before or under the
- cursor?
- - Option to make a .swp file only when a change is made (Templeton).
- - Support mapping for replace mode and "r" command (Vi doesn't do this)?
- - In an Ex range, use '{ for start of paragraph, '} for end of paragraph,
- '(, '), etc.? See patches from Brugnara. Use "=p" for current paragraph.
- 5 Add 'ignorefilecase' option: Ignore case when expanding file names.
- ":e ma<Tab>" would also find "Makefile" on Unix.
-
-
- From Elvis:
- - Use "instman.sh" to install manpages?
- - Add ":alias" command.
- - fontchanges recognized "\\fB" etc.
- - Search patterns:
- \= match empty string, leave cursor here.
- \@ match word under cursor.
- but do:
- \@ leave the cursor "at" this position
- \w match the word under the cursor?
- \W match the WORD under the cursor?
- 8 ":window" command:
- :win + next window (up)
- :win ++ idem, wrapping
- :win - previous window (down)
- :win -- idem, wrapping
- :win nr to window number "nr"
- :win name to window editing buffer "name"
- 7 ":cc" compiles a single file (default: current one). 'ccprg' option is
- program to use with ":cc". Use ":compile" instead of ":cc"?
-
-
- From Nvi:
- - 'cdpath' option.
- - 'searchincr' option, alias for 'incsearch'?
- - 'leftright' option, alias for 'nowrap'?
- - Have a look at "vi/doc/vi.chart", for Nvi specialities.
- 8 Add 'keytime', time in 1/10 sec for mapping timeout?
- - Add 'filec' option as an alternative for 'wildchar'.
- 8 Lock a file when starting to edit it with flock() or fcntl(). Also see
- patch from Kahn: ~/vim/patches/kahn_file_locking .
- 6 Support Nvi command names as an alias:
- :bg :hide
- :fg fname :buf fname (with 'hidden' set?)
- :dis b :ls
- :Edit fname :split fname
- :Fg fname :sbuf fname (with 'hidden' set?)
- :Next :snext (can't do this, already use :Next)
- :Previous :sprevious
- :Tag :stag
-
-
- From xvim:
- - Use '\' before commands to make them linewise.
-
-
- From xvi:
- - CTRL-_ : swap 8th bit of character.
- - Add egrep-like regex type, like xvi (Ned Konz) or Perl (Emmanuel Mogenet)
-
-
- From vile:
- - When horizontal scrolling, use '<' 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 and "big" extentions:
- - Make it possible to run Vim inside a window of another program. For
- Xwindows this can be done with XReparentWindow().
- - Make it easy to setup Vim for groups of users: novice vi users, novice
- Vim users, C programmers, xterm users, GUI users,...
- - Add a mode to only view text. Like Less, but with syntax highlighting
- etc.
- - Add some way to display manpages, with tags highlighted to jump to
- locations in the same or other manpages. Requires generating a tags file
- for manpages.
- - Change layout of blocks in swap file: Text at the start, with '\n' in
- between lines (just load the file without changes, except for Mac).
- Indexes for lines are from the end of the block backwards. It's the
- current layout mirrored.
- - Make it possible to edit a register, in a window, like a buffer.
- - Add stuff to syntax highlighting to change the text (upper-case keywords,
- set indent, define other highlighting, etc.).
- - Mode to keep C-code formatted all the time (sort of on-line indent).
- - Several top-level windows in one Vim session. Be able to use a different
- font in each top-level window.
- - Allow editing 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.
- - Smart cut/paste: recognize words and adjust spaces before/after them.
- - Mode to keep text formatted while inserting/deleting. Use soft/hard
- returns with an option to switch this off. (CR-LF can be used for Unix as
- a soft return).
- - Add column numbers to ":" commands ":line1,line2[col1,col2]cmd". Block
- can be selected with CTRL-V. Allow '$' (end of line) for col2.
- - 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).
- - 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..
- 4 Recognize l, #, p as 'flags' to EX commands:
- :g/RE/#l shall print lines with line numbers and in list format.
- :g/RE/dp shall print lines that are deleted.
- POSIX: Commands where flags shall apply to all lines written: list,
- number, open, print, substitute, visual, &, z. For other commands, flags
- shall apply to the current line after the command completes. Examples:
- :7,10j #l Join the lines 7-10 and print the result in list
-
- -------------------- *votes-for-changes* -----------------------
-
- In November 1998 an inquiry was held to allow Vim users to vote for changes to
- Vim. Each person was allowed to give 10 positive and 5 negative points to a
- list of items. Below is the result. This indicates the desire of users for
- certain changes. This will be taken into account when deciding what to do
- next from the huge list above.
-
- The first number is the total number of votes. The number in brackets is the
- portion of the total which were negative points.
-
- 317 (-5) add folding (display only a selected part of the text)
- 252 (-10) vertically split windows (side-by-side)
- 197 (-3) add configurable auto-indenting for many languages (like 'cindent')
- 183 (-5) fix all problems, big and small; make Vim more robust
- 155 (-8) add Perl compatible search pattern
- 125 (-1) search patterns that cross line boundaries
- 125 (-1) improve syntax highlighting speed
- 116 improve syntax highlighting functionality
- 101 add a menu that lists all buffers
- 93 (-1) improve the overall performance
- 93 (-6) multiple top-level windows for one running Vim
- 90 (-4) be able to edit the command line with Vi commands
- 90 (-36) add a shell window (to type and execute shell commands in)
- 83 add patterns to define sections/paragraphs for "{", "[[", "%", etc.
- 81 improve Visual block mode: more commands that work on blocks
- 71 (-13) reduce the size of the executable and the runtime memory use
- 70 (-5) improve the on-line help
- 68 improve "gq" formatting of text (left&right justified, 'comments')
- 68 (-2) improve multi-byte character support
- 59 (-8) improve the Visual Studio interface (VisVim)
- 59 (-12) make it possible to run Vim inside a window of another program
- 58 (-11) add an undo tree (be able to go back to any previous situation)
- 57 (-9) add support for loading a shared library that defines new commands
- 54 (-1) add a way to execute a command in multiple buffers/windows
- 52 improve the Perl interface
- 51 (-10) improve printing from gvim (File.Print menu entry)
- 50 (-20) make a "Vim lite" version, which is small and low on features
- 47 add a method to repeat a prev. executed change ("c.", "d.", etc.)
- 44 (-8) add more features to the internal scripting language
- 37 add a command to repeat a whole mapping (not only its last change)
- 37 (-2) add better support for editing files in projects (with ID utils)
- 33 (-3) add handling for buffer-changed outside of Vim (when reg. focus)
- 28 improve Insert mode completion
- 28 (-14) add persistent undo (undo to before the file was saved/loaded)
- 25 improve command line completion
- 23 (-30) be able to run a program in a Vim window, with an interface to it
- 22 improve the quickfix commands
- 21 (-1) add mappings and abbreviations local to a buffer
- 21 (-6) add a special window for editing option values, with short docs
- 19 (-4) add file locking
- 18 (-1) add a way to disable (error) messages for a moment
- 17 (-5) add encryption for loading/storing files and for the swapfile
- 10 improve the port for MacOS X Server aka Rhapsody
- 10 add Qt interface
- 10 (-1) add scope arguments to the ":tag" command (like Elvis)
- 9 (-3) improve the tutor (course for beginners)
- 8 improve the port for OS/2
- 8 (-1) add a stack for saving/restoring options
- 8 (-3) improve 'viminfo' (keeping information when quitting Vim)
- 8 (-6) improve the performance of Vim scripts (pre-parse them)
- 7 (-2) add more autocommand events (for ":cd", start Insert mode, etc.)
- 6 (-4) improve the TCL interface
- 6 (-4) add option to move the cursor where there is no text in Visual mode
- 5 improve the port for MacOS
- 4 improve the port for GTK
- 4 add Diff, Merge capability with CVS like in emacs.
- 4 (-5) add option not to move the cursor when using a scrollbar
- 4 (-8) add POSIX compatible search patterns
- 3 improve the port for X Window (use GTK, or Athena)
- 3 (-2) improve the Cscope interface
- 3 (-14) add option to move the cursor where there is no text in any mode
- 2 add support for Borland Delphi (to replace borland's def. editor)
- 2 add on-the-fly paragraph formatting / word wraps
- 1 improve the port for "EPOC 32"
- 1 add GUI to record/stop/play a keystroke macro
- 0 (-2) improve ":mksession" support (switch to a previously saved state)
- -1 (-1) improve the port for * (fill in a system name at the *. E.g. VMS")
- -4 (-77) add more GUI functions (requesters, menus, dialogs)
- -10 (-14) add "open" mode, like the original Vi
- -10 (-15) improve the OLE interface
- -10 (-17) improve compatibility of the Ex mode
- -12 (-89) add on-the-fly spell checking
- -13 (-24) reduce the size of the distribution (harddisk usage)
- -13 (-32) improve Vi compatibility
- -25 (-38) add a lot of small features, instead of a few big ones
- -47 (-53) improve the 16 bit DOS version (avoid out-of-memory problems)
- -81 (-123) improve gvim to fit in the MS-Windows look&feel (with an option)
- -110 (-136) stop changing Vim, it's fine as it is
- -117 (-122) remove functionality, there is too much of it
-
- vim:tw=78:sw=4:ts=4:
- vim:comments=fb\:9,fb\:8,fb\:7,fb\:6,fb\:5,fb\:4,fb\:3,fb\:2,fb\:1,fb\:-,fb\:9q,fb\:8q,fb\:7q,fb\:6q,fb\:5q,fb\:4q,fb\:3q,fb\:2q,fb\:1q,fb\:9s,fb\:8s,fb\:7s,fb\:6s,fb\:5s,fb\:4s,fb\:3s,fb\:2s,fb\:1s,fb\:9l,fb\:8l,fb\:7l,fb\:6l,fb\:5l,fb\:4l,fb\:3l,fb\:2l,fb\:1l,fb\:9w,fb\:8w,fb\:7w,fb\:6w,fb\:5w,fb\:4w,fb\:3w,fb\:2w,fb\:1w,fb\:9b,fb\:8b,fb\:7b,fb\:6b,fb\:5b,fb\:4b,fb\:3b,fb\:2b,fb\:1b,fb\:9m,fb\:8m,fb\:7m,fb\:6m,fb\:5m,fb\:4m,fb\:3m,fb\:2m,fb\:1m,fb\:9?,fb\:8?,fb\:7?,fb\:6?,fb\:5?,fb\:4?,fb\:3?,fb\:2?,fb\:1?
-