home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / vim42os2.zip / vim-4.2 / todo < prev    next >
Text File  |  1996-06-18  |  44KB  |  765 lines

  1. Known problems and priority improvements:
  2.  
  3. GUI:
  4. - Motif: Scrollbar for cmdline disappears with ":set go=", ":set go=lbrm".
  5. - Motif: Tear-off menu item "----------" crashes Vim on some machines.
  6.   (Netherton)
  7. - When font shape changes, but not the size, doing ":set font=" does not
  8.   redraw the screen with the new font.
  9. - Horizontal scrollbar doesn't work in rightleft mode.
  10. - Pasting in Replace mode insert the text, instead of overwriting.
  11.  
  12. MSDOS:
  13. - Error in the DJGPP version: ":r!ls" eats file descriptors.  After a few
  14.   times Vim crashes with an illegal instruction under Windows 95.  Looks like
  15.   the system() library function of DJGPP is wrong.  Sometimes Vim gives errors
  16.   like "File creation error", "Can't read file volaaaaa", and when exiting:
  17.   "Can't write viminfo file vomaaaaa!".
  18. - ":n doc\*.txt" doesn't work, have to use ":n doc/*.txt" instead.
  19.  
  20. Windows 95:
  21. - ":e $VIM/.vimrc" doesn't work.
  22. - When 'lines' is set in _vimrc or columns is not 80, executing external
  23.   commands sometimes hangs or crashes Vim or the PC.  This is a Windows 95
  24.   problem.
  25. - There is an occasional lockup when repeating a key while scrolling.  Vim
  26.   unlocks when resizing the window.  Might be a Windows 95 problem.
  27. - Dead keys don't work properly with Windows 95.  Not really a Vim problem,
  28.   but it should work.  It's difficult to fix...
  29. - Screen updating is slow with Windows 95 (compared to 16 bit version, DJGPP
  30.   version is in between).  It becomes fast when 'lines' or 'columns' is set to
  31.   a non-standard value!!!
  32. - Editing a file by it's short file name and writing it, makes the long file
  33.   name disappear.
  34.  
  35. AIX 4:
  36. - After running Vim tty setting "cs8" is not restored, it becomes "cs5".  This
  37.   causes 8 bit characters to loose their 8th bit.  Only with AIX 4, AIX 3 is
  38.   fine. (Albayrak)
  39.  
  40. hpterm: Highlighting isn't always correct.  Could use 'weirdinvert', but that
  41.     slows down screen updating too much.
  42.  
  43. I can't reproduce these:
  44.  
  45. With backupdir=~/tmp,/tmp nowritebackup nobackup patchmode=.smr 
  46.     and the patchmode file exists, backup files in the tmp directory are left
  47.     lying around - they should be deleted! (Riehm)
  48.  
  49. [These have been reported for version 3.0, they may not appear in this version]
  50. Some terminals start inverting at the position where the invert code is put.
  51.     This is not handled correctly. Remove 'weirdinvert' hack.
  52. On Diamond Viper 132x43 mode crash on exit (John Lange)
  53. MSDOS: After writing on a network the 'w' bit for others is set.
  54.  
  55.  
  56. Documentation:
  57.  
  58. Give names to some messages, e.g. hit-return, file (buffer?) message, etc. Use
  59.     the same name everywhere.
  60. Autocommand example: use ":retab! 4" when reading, ":retab! 8" when writing.
  61. Replace "toggle" with "boolean" for options?
  62. Make a few sample menu sets (.gvimrc files) for novice vi users, novice Vim
  63.     users, C programmers, ...
  64.  
  65.  
  66. Problems that will probably not be solved:
  67.  
  68. Problem with HPterm under X: old contents of window is lost (Cosentino).
  69. Amiga: When using quickfix with the Manx compiler we only get the first 25
  70.     errors. How do we get the rest?
  71. Amiga: The ":cq" command does not always abort the Manx compiler. Why?
  72. Linux: A file with protection r--rw-rw- is seen readonly for others. The
  73.     access() function in GNU libc is probably wrong.
  74. MSDOS: When using smardrive with write-back buffering, writing to a readonly
  75.     floppy will cause problems. How to test for writable floppy first?
  76. When doing a CTRL-Z and typing a command for the shell, while Vim is busy
  77.     (e.g. writing a file), the command for the shell is sometimes eaten by
  78.     Vim, because the terminal mode is changed from RAW to CBREAK.
  79.  
  80.  
  81. Main changes for version 5.0:
  82. - Syntax coloring/highlighting, configurable for different languages.
  83. - Add scripting language support (probably Perl).
  84. - GUI version for Windows (3.1/95/NT).
  85. - The last few things for Vi compatibility (POSIX compatible mode, "Q"?).
  86. - VINE (Vim Is Not Emacs): Keep it small!
  87.  
  88.  
  89. Further extentions and improvements:
  90.  
  91. GUI stuff (see ":help gui_todo").
  92.  
  93. Make "5dd" on last-but-one-line not delete anything (vi compatible).
  94.     Change cursor_down()???  Many other commands will change too: "5j", "c5j",
  95.     etc.  Add flag in 'cpoptions'?
  96. CTRL-I and CTRL-O should work in Visual mode, but only jump to marks in the
  97.     current buffer.
  98. Include variation on text objects, without the white space (e.g. "vp" only
  99.     selects the paragraph, not the following empty lines).
  100. Searching: "/this//that/" should find "that" after "this".
  101.     ":/this//that/" should find "that" after "this", this being one address.
  102. incsearch is incorrect for "/that/<Return>/this/;//" (last search pattern
  103.     isn't updated).
  104. Disallow setting the 'shell', 'makeprg', 'formatprg' or 'keywordprg' options
  105.     in a modeline???  Also 'secure' and 'exrc' should be forbidden.
  106. Multiple tags: CTRL-] again jumps to next tag?
  107. Add flag in 'cpoptions' that makes <BS> after a count work like <Del> (Sayre).
  108. Add flag in 'cpoptions' that makes operator (yank, filter) not move the
  109.     cursor, at least when canceled. (default vi compatible).
  110. MSDOS: Support the use of "~" for $HOME.  Expand $VAR in file names.
  111. Search commands in a tags file: Allow optional "e", "b" and "s" flags to
  112.     position the cursor in the right column.
  113. findmatchlimit() should be able to skip comments.
  114. Add redirecting of Ex commands.  Add a command to dump all the settings,
  115.     mappings, autocommands, etc. in a file, to be included in a bug report.
  116. Using a tags file relative to the current file, and 'tags' contains
  117.     "./../tags", the file name becomes "/path/dir/a/../b/file.c".  Should
  118.     remove the ".." from the name of the tags file.  Should not always use
  119.     absolute path. (Hiebert)
  120. Detect textmode after executing the autocommands, otherwise the .gz
  121.     autocommands don't work for MS-DOS.  Needs to be able to remove the ^Ms at
  122.     the end of each line.  Alternative: don't use a filter command, write the
  123.     file, gunzip, set nobin, delete the lines, read the file.
  124. When hitting <Esc> or CTRL-C in Normal mode, give a message to help novice
  125.     users to get out: "Type  :q!  to quit Vim".
  126. "6x" at end of line should not break a mapping (vi compatible).
  127.     "6X" at start of line should beep, but not break a mapping (vi compatible).
  128.     But "6hll" at start of line does break!
  129. Add :delcr command:
  130.                             *:delcr*
  131.     :[range]delcr[!]    Check [range] lines (default: whole buffer) for lines
  132.             ending in <CR>.  If all lines end in <CR>, or [!] is
  133.             used, remove the <CR> at the end of lines in [range].
  134.             A CTRL-Z at the end of the file is removed.
  135.             If [range] is omitted, or it is the whole file, and
  136.             all lines end in <CR> 'textmode' is set.  {not in Vi}
  137. Should integrate addstar() and file_pat_to_reg_pat().
  138. Make it possible to enter a digraph after "r" (with CTRL-K).
  139. Autoconf: Use @datadir@ for the system independent files.  Make sure the
  140.     system dependend and system independed files are separated. (Leitner).
  141. When working over a serial line with 7 bit characters, remove meta characters
  142.     from 'isprint'.
  143. Change 'smarttab' into an option to make <Tab> always insert 'shiftwidth'
  144.     characters?  Better: behave like 'ts' is 'shiftwidth', but write files
  145.     like 'ts' is 8.
  146.     Alternative: Add 'softtab': Possibility to keep 'ts' at 8 and insert
  147.     'softtab' characters when <Tab> is hit.
  148. MSDOS: look for .vimrc, helpfile and .viminfo in argv0 dir. (Ferenc)
  149. Add autoconf check for waitpid()/wait4().
  150. Add autoconf check for library path "/usr/lib" and remove it (like for
  151.     /usr/include).
  152. Always output <CR><NL> to the screen, never just <NL>. (Olaf Seibert)
  153. Option to make all swap file names start with ".", to make them hidden
  154.     (Grundman).
  155. Use fchdir() in init_homedir(), like in FullName().
  156. In win_update(), when the GUI is active, always use the scrolling area.  Avoid
  157.     that the last status line is deleted and needs to be redrawn.
  158. Vi compatibility (optional): make "ia<CR><ESC>10." do the same strange thing.
  159.     (only repeat insert for the first line).
  160. Make marks present in .viminfo usable as file marks: Display a list of "last
  161.     visited files" and select one to jump to.
  162. Add ":echo" command, display a message.
  163. Include turbo_loader patches, speeding up reading a file.
  164. Include regexp {n,m} patches/webb.regexp.
  165. Change request: "/^$\|the" finds both empty lines and "the", but "/the\|^$"
  166.     doesn't.  Make '^' after "\|" also a special character?
  167. Call maketitle() whenever curbuf->b_changed is set or reset, and include
  168.     "Vim +" in the title for changed buffers.  How about the icon?
  169. Add events to autocommands:?
  170.     normalenter  - Entering normal mode.
  171.     insertenter  - Entering insert mode.
  172.     replaceenter - Entering replace mode.
  173.     cmdenter     - Entering cmdline mode.
  174.     visualenter  - Entering visual mode.
  175. Implement mouse support for the Amiga.
  176. Give better error messages by using errno (strerror()).
  177. Add 'sidescrolloff' option, like 'scrolloff' for sideways scrolling.
  178. Make 'restorescreen' option also work for xterm (and others), replaces the
  179.     SAVE_XTERM_SCREEN define.
  180. When 'wrap' is off, add commands to scroll screen left/right by half the
  181.     screen width: "zH" and "zL"?
  182. Include an option (or flag to 'cpoptions') that makes errors in mappings not
  183.     flush the rest of the mapping (like nvi does).
  184. Implement a "sticky" help window, some help text lines that are always
  185.     displayed in a window with fixed height. (Guckes)  Use "~/.vimhelp" file,
  186.     user can edit it to insert his favorite commands, new account can contain
  187.     a default contents.
  188. 'path' can become very long, don't use NameBuff for expansion.
  189. Avoid calls to plines() for cursor line, use w_cline_height.
  190. Give warning message when using ":set t_xx=asdf" for a termcap code that Vim
  191.     doesn't know about.  Add flag in 'shortmess'?
  192. Remove fcntl() from autoconf, all systems have it?
  193. Add command to reset ALL options to their default value: ":set all&".
  194. Make it possible to redo all the commands from a mapping with "."!!!
  195. Make it possible to undo all the commands from a mapping, including a trailing
  196.     unfinished command, e.g. for ":map K iX^[r".
  197. Add ":che <file>", list all the include paths which lead to this file.
  198. "-V" command line argument: Verbose, show which .vimrc, .exrc, .viminfo files
  199.     etc. are used for initializing.
  200. For a commandline that has several commands (:s, :d, etc.) summarize the
  201.     changes all together instead of for each command (e.g. for the rot13 macro).
  202. Add command like "[I" that also shows the tree of included files.
  203. "[p" and "]p" should use 'cindent' code if it's on (only for the first line).
  204. ":set sm^L" results in ":set s", because short names of options are also
  205.     expanded.  Is there a better way to do this?
  206. Set default for 'dictionary', add search for dictionary to autoconf.
  207. Add 'wildlongest' option: Key to use to find longest common match for command
  208.     line completion (default CTRL-L), like 'wildchar'. (Cregut)
  209.     Also: when there are several matches, show them line a CTRL-D.
  210. Add command line completion for '%' and '#'.
  211. Add ":@!" command, to ":@" like what ":source!" is to ":source".
  212. Should be possible to write to a device, e.g. ":w! /dev/null".
  213. Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
  214. Improve 'cindent'
  215. - formatting of struct/array inits:
  216.     - The lines used to initialise the struct or array above should
  217.       not be considered 'continuation' lines just because the previous one
  218.       does not end with ';'.  If you go back line by line I think it should be
  219.       possible to tell the difference.  If you find a line that ends in ';',
  220.       then it's OK to have continuation lines.  If you find a "{", and the
  221.       character before it (not counting space & comments) is either ',' or
  222.       '=', then there should not be continuation lines.  If the character
  223.       before the "{" is another "{", then you have to check before that one
  224.       too.
  225. - When 'cindent'ing a '}', showmatch is done before fixing the indent.  It
  226.     looks better when the indent is fixed before the showmatch. (Webb)
  227.  
  228. ":cab map test ^V| je", ":cunab map" doesn't work.  This is vi compatible!
  229. Add command to remove (all) digraphs. (Brown)
  230. Make it possible to toggle 'paste' in Insert mode.
  231. Make 'paste' work without resetting other options, but override their value.
  232.     Avoids problems when changing files and modelines or autocommands are used.
  233. Include option to switch shell off, for secure version (impossible to switch
  234.     on again).
  235. For visual mode: Command to do a search for the string in the marked area. Only
  236.     when less than two lines. Use "g/" and "g?".
  237. Add "K" command in visual mode: use Visual text for keyword program.
  238. CTRL-W CTRL-E and CTRL-W CTRL-Y should move the current window up or down if
  239.     it is not the first or last window.
  240. Include-file-search commands should look in the loaded buffer of a file (if
  241.     there is one) instead of the file itself.
  242. Make 'lisp' code more vi compatible.
  243. Add 'complete' option: Which completion to be done for CTRL-N/CTRL-P in insert
  244.     mode: 'w' for other windows, 'b' for other buffers, 'd' for dictionaries
  245.     (Webb).
  246. Add CTRL-A command in CTRL-X mode: show all matches.
  247. CTRL-X CTRL-F: Use 'path' to find completions.
  248. Add command in CTRL-X mode to add following words to the completed string
  249.     (e.g. to complete "Pointer->element" with CTRL-X CTRL-P CTRL-W CTRL-W)
  250. CTRL-A command: When there are leading zeros, don't use the number as octal
  251.     (with an option?).
  252. "g CTRL-A" and "g CTRL-X": Increment/decrement alphabetical char (a -> b -> c)?
  253. Add ":setenv" command: set environment variable.
  254. Add possibility for file name on the command line to be searched for in the
  255.     'path',  when there is a special character before the file name ('<' ?).
  256. Allow the use of wildcards in 'path'.
  257. Add possibility in 'path' to define the top of a tree to be searched, e.g.
  258.     ":set path=.,/usr/include,~/include/**".
  259. When unhiding a hidden buffer, put the same line at top of the window as the
  260.     one before hiding it. Or: keep the same relative cursor position (so
  261.     many percent down the windows).
  262. File name put into swap file should have first part of the path replaced by
  263.     "~user", also when editing a file in somebody else his home directory,
  264.     to make it work from different machines (Webb).
  265. When entering the help window, don't resize to 'helpheight' if the user has
  266.     reduced the size before (Webb). Keep the window height that the user set
  267.     the window to in a "preferred window height" entry for each window.
  268. "i" flag to search command: ignore case; "u" flag: use case.
  269. Add flag to search command to not remember it for "n", e.g. "/foo/n" (not
  270.     remember). Also for ":s/pat//n".
  271. Add command to display the current search pattern, substitue pattern and last
  272.     used pattern. (Margo)
  273. Add a command like ":cn" that jumps to the next error, but uses an open window
  274.     for the buffer with the error if possible, and opens a new window
  275.     otherwise. Use ":cj"?
  276. When in replace mode and 'expandtab' set, make tab look like spaces.
  277. When started to edit another file, make message "file 1 of 8" different (add
  278.     "not"?).
  279. When stdin is not a tty, and Vim reads commands from it, an error should make
  280.     Vim exit.
  281. Allow file name "-" as command line argument: Read file from stdin. Open
  282.     /dev/tty for commands (use "more" "vi" or "vile" as an example how to
  283.     do this).
  284. Make it possible for the 'showbreak' to be displayed at the end of the line.
  285.     Use a comma to separate the part at the end and the start of the line?
  286.     Highlight the linebreak characters, add flag in 'highlight'.
  287. Some string options should be expanded if they have wildcards, e.g.
  288.     'dictionary' when it is "*.h".
  289. Use a specific type for number and boolean options, making it possible to
  290.     change it for specific machines (e.g. when a long is 64 bit).
  291. Use context sensitiveness of completion to switch abbreviations and mappings
  292.     off for :unab and :unmap.
  293. completion of existing mappings for ":unmap", ":unab", etc.
  294. Local mappings for a buffer. Useful for autocmds. Count for map command is
  295.     buffer number. ":0map bar foo" = enter mapping for current buffer.
  296. Add option for <Insert> in replace mode going to normal mode. (Nugent)
  297. Add mappings for replace mode: ":rmap".  How do we then enter mappings for
  298.     non-replace insert mode?
  299. When incsearch used and hitting return, no need to search again in many cases,
  300.     saves a lot of time in big files.
  301. With incsearch, use CTRL-N/CTRL-P to go to next/previous match, some other key
  302.     to copy matched word to search pattern (Alexander Schmid).
  303. Add a next/previous possibility to "[^I" and friends. Also for multiple
  304.     matches in the tags file.
  305. When doing "[^I" or "[^D" add position to tag stack.
  306. Add command to put current position to tag stack: ":push" or "gp".
  307. Add command to put all filenames from the tag files in the argument list. When
  308.     given an argument, only use the files where that argument matches
  309.     (like `grep -l ident`) and jump to the first match.
  310. Add ":grep" command. Works like ":make" but uses "grep -n" instead of "make",
  311.     'grepprg' instead of 'makeprg', 'grepformat' instead of 'errorformat'.
  312. Add global search commands: Instead of wrapping at the end of the buffer,
  313.     they continue in another buffer. Use flag after search pattern: "a"
  314.     for the next file in the argument list, "f" for file in the buffer
  315.     list, "w" for file edited in a window. e.g. "/pat/f". Then "n" and "N"
  316.     work through files too. "f" flag also for ":s/pat/foo/f"??? Then when
  317.     'autowrite' and 'hidden' are both not set, ask before saving files:
  318.     "Save modified buffer "/path/file"? (Yes/Hide/No
  319.     Save-all/hide-All/Quit) ".
  320. Add command to form an args list from all the buffers.
  321. Keep a list of most recently used files for each window, use "gp" to go back
  322.     and "gn" to go forward (like ^O and ^I for jumps) (Webb). Use ":files"
  323.     and ":ls" to list the files in history order.
  324. Add 'scrollmax' option, maximum number of lines to scroll display, above this
  325.     a redraw is done.
  326. Add ":alias" command, like ":cmap" or ":cabb", but only for the command name
  327.     and it isn't displayed.
  328. xterm: Implement support for visual feedback of mouse dragging.
  329. Using right mouse button to extend a blockwise selection should attach to the
  330.     nearest corner of the rectangle (four possible corners).
  331. Precede mouse click by a number to simulate double clicks?!?
  332. Change ":fixdel" into option 'fixdel', t_del will be adjusted each time t_bs
  333.     is set? (Webb)
  334. "gc": goto character, move absolute character positions forward, also counting
  335.     newlines. "gC" goes backwards, "g^C" goes to absolute position
  336.     (Weigert).
  337. When doing CTRL-^, redraw buffer with the same topline (Demirel). Store cursor
  338.     row and window height to redraw cursor at same percentage of window
  339.     (Webb).
  340. Besides remembering the last used line number of a file, also remember the
  341.     column. Use it with CTRL-^ et. al.
  342. When a window resizes, the line with the cursor should stay at the same
  343.     percentage from the start of the window as it was before.
  344. Check for non-digits when setting a number option (careful when entering
  345.     hex codes like 0xff).
  346. Add option to make "." redo the "@r" command, instead of the last command
  347.     executed by it.  Also an option to make "." redo the whole mapping.
  348.     Basically: redo the last TYPED command.
  349. Support URL links for ^X^F in insert mode, like for "gf".
  350. ":help :s^I" should expand to ":help :substitute".
  351. Highlight control characters on the screen: Shows the difference between 
  352.     CTRL-X and "^" followed by "X" (Colon).
  353. Amiga: Need terminal input for quickfix, how do we read commands from stdin?
  354. Integrate parsing of cmdline command and parsing for expansion.
  355. When inserting a register in insert mode with CTRL-R, don't insert comment
  356.     leader when line wraps?
  357. 'flipcase' variable: upper/lower case pairs. (alternative: translate command,
  358.     e.g. ":tr \248-\254 \216-\222") (From Elvis, don't like it). Insert
  359.     comma's between pairs and allow a range, e.g. :set flipcase=a-zA-Z,..
  360. Make the help key (<F1>) context sensitive?
  361. Create a program that can translate a .swp file from any machine into a form
  362.     usable by Vim on the current machine.
  363. Add commands to push and pop all or individual options. ":setpush tw",
  364.     ":setpop tw", ":setpush all".  ":setflush" resets the option stack.
  365. Add ":highlight" command to set highlight modes and colors (Webb).
  366. Have a look at Elvis and Vile's highlighting methods. Also look at
  367.     vgrind/vgrindefs.
  368. Add option to switch on highlighting all matches from a search that are on the
  369.     screen.  Unhighlight as soon as a command is given.
  370. Add "." command for visual mode: redo last visual command (e.g. ":fmt").
  371. Add "." command after operator: repeat last command of same operator. E.g.
  372.     "c." will repeat last change, also when "x" used since then (Webb).
  373.     Also: keep history of Normal mode commands, add command to list the
  374.     history and/or pick an older command.
  375.     Also: add ":history" command for command lines and search patterns.
  376. Add support for both <M-^A> and <~A> in mappings.
  377. Add ":noro" command: Reset 'ro' flag for all buffers, except ones that have a
  378.     readonly file. ":noro!" will reset all 'ro' flags.
  379. Make repeating insert faster. Don't redisplay the screen.
  380. Add "KeyWasTyped" flag: It's reset before each command and set when a
  381.     character from the keyboard is consumed. Value is used to decide to
  382.     put a command line in history or not. Put line in history if it didn't
  383.     completely resulted from one mapping.
  384. Add a variant of CTRL-V that stops interpretation of more than one character.
  385.     For entering mappings on the command line where a key contains several
  386.     special characters, e.g. a trailing newline.
  387. The ":@r" commands should take a range and execute the register for each line
  388.     in the range.
  389. Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'. Combine the
  390.     two into a regex for searching. (Ned Konz)
  391. When selecting in visual block mode, use curswant instead of cursor column.
  392.     (Webb 97) adjust 'o' command etc.
  393. When in blockwise visual selection (CTRL-V), allow cursor to be placed
  394.     right of the line. Could also allow cursor to be placed anywhere on a
  395.     TAB or other special character.
  396. Support the "abbreviate" command in modelines (Kearns).  Careful for
  397.     characters after <Esc>, that is a security leak.
  398. Make it possible to set options from modelines only temporarily for that file
  399.     (needs a stack for saving old options).
  400. Make '2' option in 'formatoptions' also work inside comments.
  401. Consider adding patches/list_indent (indenting for bullet lists).
  402. When formatting a comment after some text, insert the '*' for the new line
  403.     (indent is correct if 'cindent' is set, but '*' doesn't get inserted).
  404. Make smartindenting configurable. Add 'sioptions', e.g. '#' setting the indent
  405.     to 0 should be switched on/off.
  406. For smart indent: When typing 'else' line it up with matching 'if'.
  407. Add commands ":C", ":P" and ":X". ":C" does encryption and ":P" the same as
  408.     ":p". What should they do exactly?
  409. When window size changed (with the mouse) and made too small, set it back to
  410.     the minimal size.
  411. Add "]>" and "[<", shift comment at end of line (command;  /* comment */).
  412. Add 'mapstop' command, to stop recursive mappings.
  413. Should not call cursorcmd() for each vgetc() in getcmdline().
  414. Add the ex address '}', next empty line (like the "}" command).
  415. Add command line completion for ":ilist" and friends, show matching
  416.     identifiers (Webb).
  417. When switching to another file and screen scrolls because of the long message
  418.     and return must be typed, don't scroll the screen back before redrawing.
  419. For u_save() include the column number. This can be used to set '[ and ']. And
  420.     in the future the undo can be made more efficient (Webb).
  421. ":split file1 file2" adds two more windows (Webb).
  422. Add the possibility to use more than one argument list: ":arglist 2".
  423. Add command to show last search pattern and substitute string. Maybe make it
  424.     accessible through a register ("/ for search string)?
  425. When mouse click after 'r' command, get character that was pointed to.
  426. For duplicate tags: Add commands ":ntag", "Ntag", ":prevtag", ":rewtag",
  427.     :lasttag". Make CTRL-D listing of matching tags more informative. Keep
  428.     count for tag index in the tag stack, so CTRL-T and :ta work.
  429. Don't give message "Incomplete last line" when editing binary file.
  430. When writing a file, name it "foo.new". Then rename "foo" to "foo.bak" and
  431.     "foo.new" to "foo". If dir is not writable or on write error copy
  432.     "foo" to "backupdir/foo.bak" and overwrite "foo". Check for correct
  433.     group/owner and try to set it if not. NO: this breaks with hard links.
  434.     INSTEAD: make Amiga and MSDOS work like unix: first make copy of file,
  435.     then truncate and overwrite original file. Use an option for this,
  436.     default on for Unix, off for Amiga/MSDOS (Sayre has the algorithm
  437.     worked out).
  438. When appending to a file, should Vim also make a backup and a 'patchmode'
  439.     file?
  440. Only make a backup when overwriting a file for the first time. Avoids loosing
  441.     the original when writing twice. (Slootman)
  442. On non-Unix machines, also overwrite the original file in some situations
  443.     (file system full, it's a link on an NFS partition).
  444. Add number option to ":s//2": replace second occurance of string? Or:
  445.     :s///N substitutes N times.
  446. Add ":a", ":i" for preloading of named buffers.
  447. In Replace mode, tab replaces as many characters as it takes on the screen,
  448.     text remains at the same position. Requires replace-stack to work with
  449.     strings instead of characters? Implement 'replacealign' in a different
  450.     way from Webb.
  451. Allow autowrite when doing ":e file" (with an option 'eaw').
  452. Make command line arguments options to be combined after a single dash, eg
  453.     "-nb".
  454. Allow a "+command" argument before each file name in the Vim command line:
  455.     "vim +123 file1 +234 file2 +345 file3".
  456. When entering text, keep other windows on same buffer updated (when a line
  457.     entered)?
  458. Bind windows together, scrolling is done in both windows synchronous
  459.     (horizontally and vertically). Use CTRL-W b?
  460. Change ".swp" to ".vim", because it give a hint who created the file?
  461. Use termcap 'ts' and 'fs' entries for setting the window title. Check 'hs'
  462.     and use minimum of 'ws' (if present) and Columns to truncate the title.
  463. In dosub() regexec is called twice for the same line. Try to avoid this.
  464. When line is too long to fit on screen, display part where cursor is (like
  465.     nvi). Use an offset to the start of the first line on the screen.
  466. Window updating from memline.c: insert/delete/replace line.
  467. Optimize ml_append() for speed, esp. for reading a file.
  468. V..c should keep indent when 'ai' is set, just like <count>cc.
  469. :s///p prints the line after a substitution.
  470. Updatescript() can be done faster with a string instead of a char.
  471. When searching with 'n' give message when getting back where the search first
  472.     started. Remember start of search in '/ mark.
  473. Add option that scrolls screen to put cursor in middle of screen after search.
  474. Add \! to search patterns: matches string that does not match previous atom.
  475. Screen updating is inefficient with CTRL-F and CTRL-B when there are long lines.
  476. Uppercase characters in ex commands can be made lowercase?
  477. Filtering a block should only apply to the block, not to the whole lines. When
  478.     the number of lines is increased, add lines. When decreased, padd with
  479.     spaces or delete? Use ":`<,`>" on the command line.
  480. CTRL-V :s should substitute only in the block.
  481. CTRL-V > should move the block, not whole lines.
  482. Add commands to move selected text, without deselecting.
  483. Add visual command to swap selected text with unnamed buffer.
  484. Add "P" command to insert contents of unnamed buffer, move selected text to
  485.     position of previous deleted (to swap foo and bar in " + foo")
  486. In out-of-memory situations: Free allocated space in undo (after asking).
  487. When memory gets low, reduce the number of undo levels (with confirmation).
  488. Insert octal numbers with CTRL-V o, hexadecimal with CTRL-V x and binary
  489.     with CTRL-V b.
  490. List mappings that have a raw escape sequence both with the name of the key
  491.     for that escape sequence (if there is one) and the sequence itself.
  492. List mappings: Once with special keys listed as <>, once with meta chars as
  493.     <M-a>, once with the byte values (octal?). Sort of "spell mapping"
  494.     command?
  495. When entering mappings: Add the possibility to enter meta keys like they are
  496.     displayed, within <>: <M-a>, <~@> or <|a>.
  497. Add option to show character value under the cursor in octal, decimal, hex and
  498.     screen code all the time (like 'ruler' plus "g CTRL-G").
  499. Add option to show characters in text not as "|A" but as decimal ("^129"), hex
  500.     ("\x81") or octal ("\201") or meta (M-x).
  501. How does vi detect whether a filter has messed up the screen? Check source.
  502.     After ":w !command" a wait_return?
  503. Improve screen updating code for doput() (use s_ins()).
  504. With 'p' command on last line: scroll screen up (also for terminals without
  505.     insert line command).
  506. Amiga: ExpandWildCards in amiga.c: don't expand if there are no wildcards.
  507. unix: Speedup wildcard expansion of "*", "~" and "$": do it internally, more
  508.     complicated things can still be done with the shell.
  509. In regexp.c: "\^" after "\|" or "\(" is start of line, and "\$" before "\|"
  510.     and "\)" is end of line.
  511. Option to set time for emsg() sleep. Interrupt sleep when key is typed? sleep
  512.     before second message?
  513. Delete message after new command has been entered and have waited for key.
  514. History stack for . command? Use "g." command.
  515. Use insert/delete char when terminal supports it.
  516. With undo with simple line delete/insert: optimize screen updating.
  517. Optimize screen redraw for slow terminals.
  518. Add "-d null" for editing from a script file without displaying.
  519. MSDOS: search for _exrc in the directory where the binary is, instead
  520.     of using $VIM\_exrc.
  521. In insert mode: Remember the characters that were removed with backspace and
  522.     re-insert them one at a time with <key1>, all together with <key2>.
  523. Amiga: Add possibility to set a keymap. The code in amiga.c does not work yet.
  524. Implement 'redraw' option.
  525. Add possibility to put the value of an option into the text: "'lines'p
  526. Unix: WildExpand: Without csh file name with embedded space will be split in
  527.     two.
  528. With wildcard expansion after '%' and '#', expand current/alternate file name,
  529.     so it can be edited.
  530. Add special code to 'sections' option to define something else but '{' or '}'
  531.     as the start of a section (e.g. one shiftwidth to the right).
  532. Nopaste option: Mappings with non-printable characters are OK.
  533. Add 'indent' option: Always use this amount of indent when starting a new line
  534.     and when formatting text.
  535. Use pipes for filtering on Unix.
  536. Allow for +command and -option on any position in argv[].
  537. Add commands like ]] and [[ that do not include the line jumped to.
  538. When :unab without matching "from" part and several matching "to" parts,
  539.     delete the entry that was used last, instead of the first in the list.
  540. After :set nowrap remove superflous redraw with wrong hor. offset if cursor
  541.     is right of the screen.
  542. Recognize "$*" in 'makeprg'; replace it by the arguments to :make.
  543. Allow multiple arguments to :unmap.
  544. With :s///c replace \&, ~, etc. when showing the replacement pattern.
  545. In insert mode add # for CTRL-R  (alternate filename).
  546. Command line: cursor up on empty line: go to previous command, on non-empty
  547.     line: go to previous matching command.
  548. Add text justification option.
  549. When the edited file is a symlink, try to put the .swp file in the same dir as
  550.     the actual file. Adjust FullName().
  551. Add put function that replaces the text under it.
  552. After "inv"ing an option show the value: ":set invpaste" gives "paste is off".
  553. Check handling of CTRL-V and '\' for ":" commands that do not have TRLBAR.
  554. When a file cannot be opened but does exist, give error message.
  555. Amiga: When 'r' protection bit is not set, file can still be opened
  556.     but gives read errors. Check protection before opening.
  557. When writing check for file exists but no permission, "Permission denied".
  558. If file does not exists, check if directory exists.
  559. MSDOS: although t_cv and t_ci are not set, do invert char under cursor.
  560. Settings edit mode: make file with ":set opt=xx", edit it, parse it as
  561.     ex commands.
  562. ":set -w all": list one option per line.
  563. When writing to a not writable file (with ":w!") ask for permission to
  564.     overwrite it (if file can be made writable) and restore file to readonly
  565.     afterwards.
  566. Amiga: test for 'w' flag when reading a file.
  567. Error message for ambiguous mapping: Include the arguments.
  568. :table command (Webb)
  569. Add command to go to last non-blank in line (like 0 vs. ^, $ vs. ???)
  570. With blockwise visual mode and "c" command, insert same text in every line.
  571.     With "r" replace all chars in visual area witht the next char. With
  572.     "C" replace each line with entered text (go to next line with <CR>).
  573.     With "i" insert the same text in front of the block in each line.
  574. Add new operator: clear, make area white (replace with spaces): "gb".
  575. For 'shell' option add possibility to give arguments for fast start (e.g. -f).
  576.     Not to be used for ":shell".
  577. Make ":sleep" accept floating point numbers, like ":sleep 0.01".
  578. Support multiple search buffers, so macros can be made without side effects.
  579. On the command line, where a % is expanded: "%:s/r/s/" substitution (Dixon)
  580.     patches/dixon.329
  581. Add command to ":read" a file at a certain column (blockwise read?).
  582. Include several sets of options. Make settings from modelines valid only in
  583.     the file where they were set, reset when exiting that file.
  584. Add option to set the characters for "%", 'matchpairs', default "{,};(,)".
  585.     Could set to "{,};(,);/*,*/;<,>". Or 'matchstrings' =
  586.     (/*,*/),(^#if,^#else,^#endif).  Also: set hierarchy for which things
  587.     include other things that should be ignored (like "*/" inside /* */).
  588. Add 'resizecmd' option: vi command to be executed when window is resized.
  589. Add sort of replace mode where case is taken from the old text (Goldfarb).
  590. When 'backup' is not set and 'writebackup is set, use a unique name for the
  591.     backup file, don't deleted the ".bak" file.
  592. Allow multiple arguments for ":edit", add them to the argument list.
  593. Allow multiple arguments for ":read", read all the files.
  594. Support for tabs in specific columns: ":set tabcol=8,20,34,56" (Demirel).
  595. Add 'searchdir' option: Directories to search for file name being
  596.     edited (Demirel).
  597. Modifier for the put command: Change to linewise, charwise, blockwise, etc.
  598. Add commands for saving and restoring options ":set save" "set restore", for
  599.     use in macro's and the like.
  600. Add possibility to ":jumps" to show the text in the line (for loaded files).
  601.     Only show the part of the line that fits in the current screen width and
  602.     contains the mark.  Highlight the column with the mark.  Show
  603.     "<not loaded>" for not loaded buffers.  Also for ":tags" and ":marks".
  604. Each swap file should include a flag that shows if the swapfile contains any
  605.     changes. Report this when giving the ATTENTION message.
  606. Add visual command to do rot13 encoding.
  607. Add option to set the number of lines when not to scroll, instead of the fixed
  608.     number used now (for terminals that scroll slow with a large number of
  609.     lines but not with a single line).
  610. Keep output from listings in a window, so you can have a look at it while
  611.     working in another window. Put cmdline in a separate window?
  612. Add possibility to put output of ex commands in a buffer or file, e.g. for
  613.     ":set all".  ":r :set all"?
  614. Allow any character except white space in abbreviations lhs (Riehm).
  615. 'edit' option: When off changing the buffer is not possible (Really read-only
  616.     mode).
  617. Allow multiple arguments to ":stag", make one window for each.
  618. When the 'equalalways' option is set, creating a new window should not result
  619.     in windows to become bigger. Deleting a window should not result in a
  620.     window to become smaller (Webb).
  621. When resizing the whole Vim window, the windows inside should be resized
  622.     proportionally (Webb).
  623. Include options directly in option table, no indirect pointers. Use mkopttab
  624.     to make option table?
  625. When doing ":w dir", where "dir" is a directory name, write the current file
  626.     into that directory, with the current file name (without the path)?
  627. Add command to go to Nth character in the file, "123g|"?
  628. Add an option to ":map" that makes it display the special keys in byte values
  629.     instead of <>.
  630. Command to show keys that are not used and available for mapping ":freekeys".
  631. Add a way to execute a mapping when entering a window (something like autocmd,
  632.     but always executed when entering another window).
  633. Allow completion with all words in the current AND the other opened buffers.
  634. Add 'echo' option: When off don't echo shell commands.
  635. Support for 'dictionary's that are sorted, makes access a lot faster
  636.     (Haritsis).
  637. Add "^Vrx" on the command line, replace with contents of register x. Used
  638.     instead of CTRL-R to make repeating possible. (Marinichev)
  639. Add "^Vb" on the command line, replace with word before or under the cursor?
  640. Add a command (for visual mode?) to capitalize the first letter of some words.
  641.     (Haritsis)
  642. In Insert mode (and command line editing?): Allow undo of CTRL-U (and CTRL-W,
  643.     delete and backspace) (Marinichev).
  644. Make contents of status line configurable, with a printf-like format string.
  645. Add include files for emacs-tags files (David Brown).
  646. Option to make a .swp file only when a change is made (Templeton).
  647. Make CTRL-C on Unix generate a signal, avoid using select() to check for a
  648.     CTRL-C (it's slow).
  649. Add "+=" and "-=" to option setting: add or remove parts of a string option,
  650.     add or subtract a number from a number option.  How do we insert in
  651.     front/at the end of a sting option?  Automatically add a comma?
  652. Support mapping for replace mode and "r" command (Vi doesn't do this)?
  653. Set boolean options on/off with ":set paste=off", ":set paste=on".
  654.  
  655. From Elvis:
  656. fontchanges recognized "\\fB" etc.
  657. :color command
  658. :if and friends, conditional statements
  659. Read .exfilerc when starting to edit a new file (can be used to load macros for
  660.     specific file type).
  661. Change cursor shape in command/insert mode. Use options t_cun (normal mode),
  662.     t_cuv (visual mode), t_cur (replace mode), t_cui (insert mode), t_cuc
  663.     (command line mode), t_cuq (back to standard cursor).
  664. Search patterns:
  665.     \{m,n\}     match at least m and at most n of preceding pattern.
  666.           \=        match empty string, leave cursor here.
  667.           \@        match word under cursor.
  668.     but do:
  669.     \{m,n\}        m to n matches. \{m\} is m matches, \{m,\} is at least m
  670.                 matches, \{,n\}: up to n matches.
  671.       \@        leave the cursor "at" this position
  672.           \w        match the word under the cursor
  673.       \W        match the WORD under the cursor.
  674.  
  675. From nvi:
  676. 'cdpath' option.
  677. Allow editing lines that do not fit in the window.
  678.  
  679. From xvim:
  680. Use '\' before commands to make them linewise.
  681. Allow a newline in search patterns (also for :s, can delete newline).
  682.     Add BOW, EOW, NEWL, NLORANY, NLBUTANY, magic 'n' and 'r', etc.
  683.     [not in xvim:]
  684.     Use "\s" for "space" characters (like Perl): space, tab, newline, etc.
  685.     Add option to switch on matches crossing ONE line boundary.
  686. Add register for '?' and '/' commands? (yank_buf()).
  687. Remember last cursor position, optimize setcursor().
  688. Add :collapse, remove multiple blank lines (Demirel, Webb)?
  689.  
  690. From xvi:
  691. CTRL-_ : swap 8th bit of character
  692. Add egrep-like regex type, like xvi (Ned Konz)
  693.  
  694. From vile:
  695. Show unprintable characters in hex. (or in octal)
  696. When horizontal scrolling, use '<' and '>' for lines continuing outside of
  697.     window.
  698. Support putting .swp files in /tmp: Command in rc.local to move .swp files
  699.     from /tmp to some directory before deleting files.
  700.  
  701.  
  702. Far future extentions:
  703.  
  704. Make it possible to edit a register, in a window, like a buffer.
  705. Highlighting of different kinds of text (e.g. for showing variables, keywords).
  706. Mode to keep C-code formatted (sort of on-line indent). Use colors for
  707.     keywords, comments, etc.
  708. Add Ex mode (some people like to use it).
  709. Add macro language with real functions (Perl, TCL?).
  710. Allow vertical splitting of screen (once?).
  711. Option for filter when reading/writing a file for compression or crypting (-x
  712.     command line option, -z option: gzip/gunzip).  Also for crypting the
  713.     swap file. Support compression of documentation files.
  714. Allow editing beyond end of line, just like there are all spaces. Switch this
  715.     on with an option or special insert mode command. Also allow editing
  716.     above start and below end of buffer.
  717. When executing macro's: Save each line for undo only once.
  718. Make undo more memory-efficient: Compare text before and after change, only
  719.     remember the lines that really changed. When calling u_save with a
  720.     single line, don't save it if line is already saved for undo.
  721. When doing a global substitute, causing almost all lines to be changed, undo
  722.     info becomes very big. Put undo info in swap file??
  723. When inserting/deleting characters in a line, adjust marks.
  724. Smart cut/paste: recognize words and adjust spaces before/after them.
  725. Option verbose; when on keep the screen uptodate, when off only redisplay when
  726.     input needed. Also possible to use Vim from a shell script.
  727. Change the output to the message line. Don't redraw the screen until the next
  728.     vi command. Remember message line for redraw. Integrate the command line
  729.     in updateScreen().
  730. Mode to keep text formatted while inserting/deleting. Use soft/hard returns
  731.     with an option to switch this off.
  732. Korn-shell or tcsh like command line editing (like editing a single line with
  733.     vi). Use :cmap! for mappings. Can be implemented like a buffer containing
  734.     command lines. Use CTRL-O instead of <Esc>, to remain vi-compatible?
  735. Add column numbers to ":" commands ":line1,line2[col1,col2]cmd".  Block can be
  736.     selected with CTRL-V.  Allow '$' (end of line) for col2.
  737. Add 'hidecomment' option: don't display comments in /* */ and after //.
  738. Add open mode, use it when terminal has no cursor positioning.
  739. Special "drawing mode": a line is drawn where the cursor is moved to. Backspace
  740.     deletes along the line (from jvim).
  741. Add a command or option to save the current editing session (which files are
  742.     open, window sizes, file positions, etc.), so it can be resumed later.
  743. Perform commands on multiple windows (:W%s/foo/bar/g), multiple arguments (:A)
  744.     or multiple buffers (:B). Implement ":Bset", set option in all
  745.     buffers. Also ":Wset", set in all windows, ":Aset, set in all
  746.     arguments and ":Tset", set in all files mentioned in the tags file.
  747.     Add buffer/arg range, like in ":2,5B%s/..." (do we really need this???)
  748.     Add search string: "B/*.c/%s/.."?  Or ":F/*.c/%s/.."?
  749. Support for underlining (underscore-BS-char), bold (char-BS-char) and other
  750.     standout modes switched on/off with , 'overstrike' option (Reiter).
  751. Add vertical mode (Paul Jury, Demirel): "5vdw" deletes a word in five lines,
  752.     "3vitextESC" will insert "text" in three lines, etc..
  753. Internationalization: wide characters and multibyte char support.
  754. When editing a readonly file, don't use a swap file but read parts from the
  755.     original file.
  756. Recognize l, #, p as 'flags' to EX commands:
  757.     :g/RE/#l shall print lines with line numbers and in list format.
  758.     :g/RE/dp shall print lines that are deleted.
  759.     POSIX: Commands where flags shall apply to all lines written: list,
  760.     number, open, print, substitute, visual, &, z. For other commands,
  761.     flags shall apply to the current line after the command completes.
  762.     Examples: :7,10j #l Join the lines 7-10 and print the result in list
  763.  
  764.  vim:ts=4:tw=78:sw=4:
  765.