vim annoyances Yes, vim bit me again today (2011-04-06), :q! wouldn't quit, and it quite repeatedly forgot the name of the file I was editing. And all that even with its "compatible" mode. From my vim annoyances collection (at least what I bothered to note, anyway): vim never ceases to annoy me: I edit a series of files using their full pathnames - given as command line arguments, I use ^G to note which file I'm editing - vim displays only a partial relative pathname - omitting the portion which allows me to distinguish which of two files I might be editing that have the last two parts of their pathname that are identical. To make it worse, "Ah, workaround; :!echo % ... no go, it still only tells me that relative pathname tail component! ARRRRGH! This causes various problems, e.g. things like this don't behave as one would expect: :!cd / && ls -ld % vim should never have the arrogance to presume it's smarter than those using it or knows better what they want than they do bloody .swp files! When one does an operation that happens to take a long time in vim, e.g. deleting a bunch of lines: :1,BIGNUMd It's darn near impossible to interrupt/stop vim! interrupt (e.g. control-C) doesn't stop it, neither does: quit (e.g. control-\) and it doesn't even let one use job control to suspend (e.g. control-Z) so that one can manually kill the sucker with some appropriate signal(s). One typically has to resort to killing the sucker via some other login session on the host. Dark blue on black? You've got to be kidding! If I wanted comments to be bloody invisible I wouldn't have written them! Colors? Ewwww, ... yuck! Distracting! Makes it much harder for the eyeballs to scan and see what I want to identify. Oh my gosh, something went horribly wrong! I invoked vi with no arguments, and there's a whole lot more on the screen than just the tildie (~) characters in the leftmost column. Must be some catastrophic error. Oh, yes, it is ... vim. ~ ~ VIM - Vi IMproved ~ ~ version 7.1.314 ~ by Bram Moolenaar et al. ~ Vim is open source and freely distributable ~ ~ Sponsor Vim development! ~ type :help sponsor for information ~ ~ type :q to exit ~ type :help or for on-line help ~ type :help version7 for version info "Oh, you can change that in vim, just configure ..." - bloody heck, it should do the right thing by default! And yes, I've tried vim's :se compatible - it's not very compatible, and it's also not the default either. bloody .sw[o-z] files bloody non-FHS compliant doesn't know where to properly write temporary files! I did mention .sw[o-z] files, right? I don't think I mentioned them enough yet. regular expressions, there's shell metasyntax, there's Basic Regular Expressions, there's Extended Regular Expressions, there's Perl Regular Expressions, and damn near everyone does it exactly or almost exactly like one of those, but vim, no, you couldn't do like those with one or two or three or so exceptions, but you add a whole bunch of stuff in vim regular expressions that matches no one else's regular expressions - highly incompatible. And yes I tried vim's compatible option, and no it's not compatible. I've used (classic UNIX) vi and BSD vi / nvi for decades, my fingers fly on the keyboard issuing vi commands - it works, and works damn well. I know what to expect and it does what I expect. Vim does not, and repeatedly slows me down, frustrates me, and causes significant errors. And yes I tried vim's compatible mode - it's not compatible. :se all Though shallt fit complete full output of :se all within a single 80x24 window, ... not 3 bloody screenfulls of 80x24. vim is bloated: $ ls -lLs /usr/bin/nvi /usr/bin/vim /usr/bin/vim.tiny | sort -bn 372 -rwxr-xr-x 3 root root 372740 Jan 28 2010 /usr/bin/nvi 624 -rwxr-xr-x 1 root root 632884 Jul 11 2010 /usr/bin/vim.tiny 1480 -rwxr-xr-x 1 root root 1510796 Jul 11 2010 /usr/bin/vim $ Yes, even its tiny version is bloated can't recover cleanly without tracking down all the bloody .sw[o-z] files - oh, did I mention the bloody .sw[o-z] files? :q! fails to quit!!!! :se --- Options --- nobuflisted shelltemp ttyfast fileencoding=utf-8 fileencodings=ucs-bom,utf-8,default,latin1 Press ENTER or type command to continue :q! E37: No write since last change (add ! to override) E162: No write since last change for buffer "[No Name]" Press ENTER or type command to continue :q!! E488: Trailing characters :!kill -1 $PPID [No write since last change] Vim: Caught deadly signal HUP Vim: preserving files... Vim: Finished. Hangup $ rm .swp $ vim repeatedly bloody annoyingly forgets what file I'm working on. Yes, I've tried its compatible mode, it's not. It also very annoyingly tells me the permissions on the file have changed - duh, of course they have, I did it - stupid annoying vim: $ vi foo "foo" [New File] //i - go into insert mode //insert a bunch of stuff // :w "foo" [New] 73L, 1254C written :!chmod a+rx % Press ENTER or type command to continue //Bloody hell - and compatible doesn't shut this stupidity off: W16: Warning: Mode of file "foo" has changed since editing st artedSee ":help W16" for more info. Press ENTER or type command to continue :!ls -ld % //Now you're really pissing me off! You forgot what file I'm working on! E499: Empty file name for '%' or '#', only works with ":p:h" Press ENTER or type command to continue :w E32: No file name //bloody hell! I'll tell the damn poor excuse for an editor!: :f foo "foo" [Not edited] line 1 of 73 --1%-- col 1 //yeah, right, whatever ... :w E13: File exists (add ! to override) :w! "foo" 73L, 1254C written :!chmod go=r % Press ENTER or type command to continue W16: Warning: Mode of file "foo" has changed since editing st artedSee ":help W16" for more info. :!ls -ld % E499: Empty file name for '%' or '#', only works with ":p:h" Press ENTER or type command to continue :help W16 E433: No tags file E149: Sorry, no help for W16 Press ENTER or type command to continue //bloody tell this retarded editor again :f foo //make an edit change, then change permissions again: :!chmod go=r % [No write since last change] Press ENTER or type command to continue W16: Warning: Mode of file "foo" has changed since editing st artedSee ":help W16" for more info. :w E32: No file name :w! E32: No file name :q! E37: No write since last change (add ! to override) E162: No write since last change for buffer "foo" Press ENTER or type command to continue :!kill -1 $PPID [No write since last change] Vim: Caught deadly signal HUP Vim: preserving files... Vim: Finished. Hangup $ rm .swp $ Rats, and it bit me again earlier today (2014-02-19) ... first time in a while that particular way, but yes, again. Certainly not the first time I've addressed vim annoyances: http://buug.org/pipermail/buug/2011-April/003724.html and a bit more here: http://buug.org/pipermail/buug/2011-April/003731.html and example du jour of vim not allowing :q! to quit!: Rats, hit it *again*!: And following each with or the like, we have (showing the prompt and command, which is otherwise overwritten on the display by vim with its error messages: :q! E37: No write since last change (add ! to override) E162: No write since last change for buffer "[No Name]" Press ENTER or type command to continue :q!! E488: Trailing characters :q E37: No write since last change (add ! to override) vim - there is no escape! Arrrrrrrgh! Bloody vim ... let's see if this works: :f /dev/null :w! :q! Yeah, that did it, ... Geez, what a friggin' stupid annoyance. And how many novice vi(1)(/nvi(1)/vim(1)) users would easily determine how to do that (or shell out and terminate the dang thing). Ugh ... When entering an ex command from visual mode: :command ... Oh, no, but not vim - ESC aborts the command. Ugh, NOT compatible with vi! Bloody hell, when invoked as ex, don't be starting off by clearing or overwriting the screen! If I wanted screen oriented, I would've used vi, if I wanted screen cleared I would've first invoked clear, why the hell do you think I used ex? Q Entering Ex mode. Type "visual" to go to Normal mode. :file "vim_annoyances.txt" [Modified] 252 lines --97%-- Ugh, no, you're supposed to (als) tell me the current line, I shouldn't have to also type: :.= 246 to coerce that out of you. Likewise ^G in visual mode: "vim_annoyances.txt" [Modified] 258 lines --95%-- No, not what I want, I want what vi always did and POSIX says to do: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html -G This command shall be equivalent to the ex file command https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html File Synopsis: f[ile][file] If a file argument is specified, the alternate pathname shall be set to the current pathname, and the current pathname shall be set to file. Write an informational message. If the file has a current pathname, it shall be included in this message; otherwise, the message shall indicate that there is no current pathname. If the edit buffer contains lines, the current line number and the number of lines in the edit buffer shall be included in this message; otherwise, the message shall indicate that the edit buffer is empty. If the edit buffer has been modified since the last complete write, this fact shall be included in this message. If the readonly edit option is set, this fact shall be included in this message. The message may contain other unspecified information. Current line: Unchanged. Current column: Unchanged. E.g. nvi (and) BSD's vi handle it perfectly fine (as does classic vi), ^G and: vim_annoyances.txt: unmodified: line 246 of 276 [89%] Oh, yeah, and I'm not the only one that knows vim sucks: http://www.galexander.org/vim_sucks.html https://www.reddit.com/r/suckless/comments/ucr8ez/vim_sucks/ https://weblog.pell.portland.or.us/~orc/2004/09/14/001/ https://blog.sanctum.geek.nz/vim-annoyances/