Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 5/3/83; site umcp-cs.UUCP Path: utzoo!watmath!clyde!burl!ulysses!mhuxl!eagle!harpo!seismo!rlgvax!cvl!umcp-cs!chris From: chris@umcp-cs.UUCP Newsgroups: net.unix Subject: Re: vi '_' command Message-ID: <5998@umcp-cs.UUCP> Date: Mon, 19-Mar-84 02:27:54 EST Article-I.D.: umcp-cs.5998 Posted: Mon Mar 19 02:27:54 1984 Date-Received: Tue, 20-Mar-84 00:37:06 EST References: <17626@sri-arpa.UUCP> Organization: Univ. of Maryland, Computer Science Dept. Lines: 72 As long as we're pointing out things in vi, here's some info that may be of interest to people. The '_' command is very similar to the '^' command in that it moves to the first nonblank character of the current line. The key difference is that '_' is a *line* command while '^' is a *character* command. This is important for all functions that read an "address", for example, "d", "y", "c". In fact "d"(elete), "y"(ank), etc, all call a common internal routine in vi to get an "address". If the address is of a particular character, then a character-mode delete/yank/whatever is done. If it is a line address, a line mode operation is performed. The "address" command may be any of the regular positioning commands (e.g. W b $ /pattern/) or the original character repeated (as in dd or yy). Some examples: You type VI does -------- ------- dd Deletes the current line. d'a Deletes all lines between the current line and the line containing mark "a", inclusive. d`a Deletes all characters between the current character and the character at mark "a". This works much like an Emacs ^W in that the two endpoints are considered to be between two characters. Note that a character oriented delete may delete newlines. c/accord/ Changes all characters (NOT lines!) between the current character up to but not including the "a" in "accord". (However, see Note below). c?accord? Changes all characters betwen the current character and the "accord", including the word "accord". ** Note: if you have "wrapscan" set (the default), a search may wrap from the beginning of the file to the end. This can cause unexpected results (which is why I have "set nows" in my .exrc). yj Yanks two lines, the current line and the one below. yH Yanks all the lines from the top of the screen to the current line, inclusive."). !}fmt Runs the lines between the current line and the end of the paragraph through the program "fmt". Vi combines the repeat count (if any) on the command character with the repeat count on the motion command, so that "2y2j" yanks five lines. Interestingly, "2y2_" yanks 4 lines (so does "2y2y") since the _ command moves down (repeat count minus 1) lines. Beware, however, of using repeat counts on all the motion commands; they're not all implemented the same. 4$ moves to the end of the third line below the current; 4^ merely moves to the first nonblank character of the current line. '|' is apparently a synonym for '0'; given a repeat count it goes that many characters to the right of the beginning of the line (as if you had typed '|' (rept-1) 'l'). (Exercise for the reader: why can't you give a repeat count to '0'?) Capital letters do different things depending on the command. D acts like d$; Y acts like YY. Don't ask me why. By the way, capital ! doesn't seem to do anything :-). Well, this article seems to be degenerating at this point, so I guess I'd better wrap it up. Bye! -- In-Real-Life: Chris Torek, Univ of MD Comp Sci UUCP: {seismo,allegra,brl-bmd}!umcp-cs!chris CSNet: chris@umcp-cs ARPA: chris.umcp-cs@CSNet-Relay