If you have failed to grok vi[m], you need two things. First, to understand just a little of two other editors, ed and TECO. Second, to know that vi's <i>real</i> modes are not what the naïve user, and sadly most documentation, call ‘modes’; they are line mode (ed mode) and visual mode (TECO mode).<p>ed is a line editor based on search-and-replace using regular expressions. To edit existing text, you typically locate it with a search and change it with a replace. Sometimes you refer to nearby lines with .±n addressing, and sometimes by absolute line number (having printed a few lines with the ‘n’ command); and sometimes you change entire lines (with ‘c') rather than doing a replacement; but really, search-and-replace is where it's at. vi's line mode, which you enter with ‘Q’ or more commonly one-off with ‘:', is just ed on steroids.<p>TECO is a character stream oriented editor, or, if you prefer, a programming language for manipulating streams of text. <a href="http://scientopia.org/blogs/goodmath/2010/11/30/the-glorious-horror-of-teco/" rel="nofollow">http://scientopia.org/blogs/goodmath/2010/11/30/the-glorious...</a> is a decent short introduction. TECO text manipulation functions have an optional count, a function name (one or two characters), and an optional argument terminated by ESC. That should already look familiar; vi's visual mode is watered-down TECO. Sure, many of the functions have different names — vim's ‘h’ and ‘l’ are TECO's ‘r’ and ‘c’ — but some are the same: ‘i’ followed by an argument (i.e. some text) terminated by ESC is the function that inserts its argument before the current editing point. It's counterproductive to think of vi as having an ‘insert mode’ and ‘append mode’ and ‘replace mode’ and ‘substitute mode’ and whatnot, just as it would be conterproductive to think of the <i>x</i> in <i>sin(x)² + cos(x)²</i> as being in ‘sine mode’ or ‘cosine mode’.<p>Spend an hour with ed and an hour with TECO, and you'll begin to grok vi.