| 
									
										
										
										
											2021-05-30 20:54:13 +02:00
										 |  |  | *visual.txt*    For Vim version 8.2.  Last change: 2021 May 30 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		  VIM REFERENCE MANUAL    by Bram Moolenaar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual mode				*Visual* *Visual-mode* *visual-mode* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual mode is a flexible and easy way to select a piece of text for an | 
					
						
							|  |  |  | operator.  It is the only way to select a block of text. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is introduced in section |04.4| of the user manual. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1. Using Visual mode			|visual-use| | 
					
						
							|  |  |  | 2. Starting and stopping Visual mode	|visual-start| | 
					
						
							|  |  |  | 3. Changing the Visual area		|visual-change| | 
					
						
							|  |  |  | 4. Operating on the Visual area		|visual-operators| | 
					
						
							|  |  |  | 5. Blockwise operators			|blockwise-operators| | 
					
						
							|  |  |  | 6. Repeating				|visual-repeat| | 
					
						
							|  |  |  | 7. Examples				|visual-examples| | 
					
						
							|  |  |  | 8. Select mode				|Select-mode| | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-27 22:30:07 +01:00
										 |  |  | {Since Vim 7.4.200 the |+visual| feature is always included} | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 1. Using Visual mode					*visual-use* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Using Visual mode consists of three parts: | 
					
						
							|  |  |  | 1. Mark the start of the text with "v", "V" or CTRL-V. | 
					
						
							|  |  |  |    The character under the cursor will be used as the start. | 
					
						
							|  |  |  | 2. Move to the end of the text. | 
					
						
							|  |  |  |    The text from the start of the Visual mode up to and including the | 
					
						
							|  |  |  |    character under the cursor is highlighted. | 
					
						
							|  |  |  | 3. Type an operator command. | 
					
						
							|  |  |  |    The highlighted characters will be operated upon. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The 'highlight' option can be used to set the display mode to use for | 
					
						
							|  |  |  | highlighting in Visual mode. | 
					
						
							|  |  |  | The 'virtualedit' option can be used to allow positioning the cursor to | 
					
						
							|  |  |  | positions where there is no actual character. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The highlighted text normally includes the character under the cursor. | 
					
						
							|  |  |  | However, when the 'selection' option is set to "exclusive" and the cursor is | 
					
						
							|  |  |  | after the Visual area, the character under the cursor is not included. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | With "v" the text before the start position and after the end position will | 
					
						
							| 
									
										
										
										
											2004-12-29 20:58:21 +00:00
										 |  |  | not be highlighted.  However, all uppercase and non-alpha operators, except | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | "~" and "U", will work on whole lines anyway.  See the list of operators | 
					
						
							|  |  |  | below. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*visual-block* | 
					
						
							|  |  |  | With CTRL-V (blockwise Visual mode) the highlighted text will be a rectangle | 
					
						
							|  |  |  | between start position and the cursor.  However, some operators work on whole | 
					
						
							|  |  |  | lines anyway (see the list below).  The change and substitute operators will | 
					
						
							|  |  |  | delete the highlighted text and then start insertion at the top left | 
					
						
							|  |  |  | position. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 2. Starting and stopping Visual mode			*visual-start* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						*v* *characterwise-visual* | 
					
						
							| 
									
										
										
										
											2012-06-01 22:38:45 +02:00
										 |  |  | [count]v		Start Visual mode per character. | 
					
						
							| 
									
										
										
										
											2012-08-15 17:43:31 +02:00
										 |  |  | 			With [count] select the same number of characters or | 
					
						
							|  |  |  | 			lines as used for the last Visual operation, but at | 
					
						
							|  |  |  | 			the current cursor position, multiplied by [count]. | 
					
						
							|  |  |  | 			When the previous Visual operation was on a block both | 
					
						
							| 
									
										
										
										
											2012-09-21 14:54:30 +02:00
										 |  |  | 			the width and height of the block are multiplied by | 
					
						
							| 
									
										
										
										
											2012-08-15 17:43:31 +02:00
										 |  |  | 			[count]. | 
					
						
							|  |  |  | 			When there was no previous Visual operation [count] | 
					
						
							|  |  |  | 			characters are selected.  This is like moving the | 
					
						
							|  |  |  | 			cursor right N * [count] characters.  One less when | 
					
						
							| 
									
										
										
										
											2012-06-01 22:38:45 +02:00
										 |  |  | 			'selection' is not "exclusive". | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						*V* *linewise-visual* | 
					
						
							| 
									
										
										
										
											2012-06-01 22:38:45 +02:00
										 |  |  | [count]V		Start Visual mode linewise. | 
					
						
							| 
									
										
										
										
											2013-11-03 21:14:31 +01:00
										 |  |  | 			With [count] select the same number of lines as used | 
					
						
							|  |  |  | 			for the last Visual operation, but at the current | 
					
						
							|  |  |  | 			cursor position, multiplied by [count].  When there | 
					
						
							|  |  |  | 			was no previous Visual operation [count] lines are | 
					
						
							|  |  |  | 			selected. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						*CTRL-V* *blockwise-visual* | 
					
						
							| 
									
										
										
										
											2012-06-01 22:38:45 +02:00
										 |  |  | [count]CTRL-V		Start Visual mode blockwise.  Note: Under Windows | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 			CTRL-V could be mapped to paste text, it doesn't work | 
					
						
							|  |  |  | 			to start Visual mode then, see |CTRL-V-alternative|. | 
					
						
							| 
									
										
										
										
											2012-06-01 22:38:45 +02:00
										 |  |  | 			[count] is used as with `v` above. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you use <Esc>, click the left mouse button or use any command that | 
					
						
							|  |  |  | does a jump to another buffer while in Visual mode, the highlighting stops | 
					
						
							|  |  |  | and no text is affected.  Also when you hit "v" in characterwise Visual mode, | 
					
						
							|  |  |  | "CTRL-V" in blockwise Visual mode or "V" in linewise Visual mode.  If you hit | 
					
						
							|  |  |  | CTRL-Z the highlighting stops and the editor is suspended or a new shell is | 
					
						
							|  |  |  | started |CTRL-Z|. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	      new mode after typing:		*v_v* *v_CTRL-V* *v_V* | 
					
						
							|  |  |  | old mode	     "v"	      "CTRL-V"		     "V"	~ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Normal		    Visual	   blockwise Visual	  linewise Visual | 
					
						
							|  |  |  | Visual		    Normal	   blockwise Visual	  linewise Visual | 
					
						
							|  |  |  | blockwise Visual    Visual	   Normal		  linewise Visual | 
					
						
							|  |  |  | linewise Visual     Visual	   blockwise Visual	  Normal | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-10 20:59:28 +00:00
										 |  |  | 						*gv* *v_gv* *reselect-Visual* | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | gv			Start Visual mode with the same area as the previous | 
					
						
							| 
									
										
										
										
											2005-04-15 21:00:38 +00:00
										 |  |  | 			area and the same mode. | 
					
						
							|  |  |  | 			In Visual mode the current and the previous Visual | 
					
						
							|  |  |  | 			area are exchanged. | 
					
						
							|  |  |  | 			After using "p" or "P" in Visual mode the text that | 
					
						
							|  |  |  | 			was put will be selected. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-25 15:06:34 +02:00
										 |  |  | 								*gn* *v_gn* | 
					
						
							|  |  |  | gn			Search forward for the last used search pattern, like | 
					
						
							|  |  |  | 			with `n`, and start Visual mode to select the match. | 
					
						
							|  |  |  | 			If the cursor is on the match, visually selects it. | 
					
						
							|  |  |  | 			If an operator is pending, operates on the match. | 
					
						
							|  |  |  | 			E.g., "dgn" deletes the text of the next match. | 
					
						
							|  |  |  | 			If Visual mode is active, extends the selection | 
					
						
							|  |  |  | 			until the end of the next match. | 
					
						
							| 
									
										
										
										
											2019-11-10 22:09:11 +01:00
										 |  |  | 			'wrapscan' applies | 
					
						
							| 
									
										
										
										
											2019-03-17 17:13:16 +01:00
										 |  |  | 			Note: Unlike `n` the search direction does not depend | 
					
						
							| 
									
										
										
										
											2019-02-22 15:24:03 +01:00
										 |  |  | 			on the previous search command. | 
					
						
							| 
									
										
										
										
											2012-07-25 15:06:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 								*gN* *v_gN* | 
					
						
							|  |  |  | gN			Like |gn| but searches backward, like with `N`. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 							*<LeftMouse>* | 
					
						
							|  |  |  | <LeftMouse>		Set the current cursor position.  If Visual mode is | 
					
						
							| 
									
										
										
										
											2020-08-07 19:54:59 +02:00
										 |  |  | 			active it is stopped.  Only when 'mouse' option | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 			contains 'n' or 'a'.  If the position is within 'so' | 
					
						
							|  |  |  | 			lines from the last line on the screen the text is | 
					
						
							|  |  |  | 			scrolled up.  If the position is within 'so' lines from | 
					
						
							|  |  |  | 			the first line on the screen the text is scrolled | 
					
						
							|  |  |  | 			down. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*<RightMouse>* | 
					
						
							|  |  |  | <RightMouse>		Start Visual mode if it is not active.  The text from | 
					
						
							|  |  |  | 			the cursor position to the position of the click is | 
					
						
							|  |  |  | 			highlighted.  If Visual mode was already active move | 
					
						
							| 
									
										
										
										
											2020-08-07 19:54:59 +02:00
										 |  |  | 			the start or end of the highlighted text, whichever | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 			is closest, to the position of the click.  Only when | 
					
						
							|  |  |  | 			'mouse' option contains 'n' or 'a'. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			Note: when 'mousemodel' is set to "popup", | 
					
						
							|  |  |  | 			<S-LeftMouse> has to be used instead of <RightMouse>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*<LeftRelease>* | 
					
						
							|  |  |  | <LeftRelease>		This works like a <LeftMouse>, if it is not at | 
					
						
							|  |  |  | 			the same position as <LeftMouse>.  In an older version | 
					
						
							|  |  |  | 			of xterm you won't see the selected area until the | 
					
						
							|  |  |  | 			button is released, unless there is access to the | 
					
						
							|  |  |  | 			display where the xterm is running (via the DISPLAY | 
					
						
							|  |  |  | 			environment variable or the -display argument).  Only | 
					
						
							|  |  |  | 			when 'mouse' option contains 'n' or 'a'. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If Visual mode is not active and the "v", "V" or CTRL-V is preceded with a | 
					
						
							|  |  |  | count, the size of the previously highlighted area is used for a start.  You | 
					
						
							|  |  |  | can then move the end of the highlighted area and give an operator.  The type | 
					
						
							|  |  |  | of the old area is used (character, line or blockwise). | 
					
						
							|  |  |  | - Linewise Visual mode: The number of lines is multiplied with the count. | 
					
						
							|  |  |  | - Blockwise Visual mode: The number of lines and columns is multiplied with | 
					
						
							|  |  |  |   the count. | 
					
						
							|  |  |  | - Normal Visual mode within one line: The number of characters is multiplied | 
					
						
							|  |  |  |   with the count. | 
					
						
							|  |  |  | - Normal Visual mode with several lines: The number of lines is multiplied | 
					
						
							|  |  |  |   with the count, in the last line the same number of characters is used as | 
					
						
							|  |  |  |   in the last line in the previously highlighted area. | 
					
						
							|  |  |  | The start of the text is the Cursor position.  If the "$" command was used as | 
					
						
							|  |  |  | one of the last commands to extend the highlighted text, the area will be | 
					
						
							|  |  |  | extended to the rightmost column of the longest line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you want to highlight exactly the same area as the last time, you can use | 
					
						
							|  |  |  | "gv" |gv| |v_gv|. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-12-29 20:58:21 +00:00
										 |  |  | 							*v_<Esc>* | 
					
						
							|  |  |  | <Esc>			In Visual mode: Stop Visual mode. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 							*v_CTRL-C* | 
					
						
							|  |  |  | CTRL-C			In Visual mode: Stop Visual mode.  When insert mode is | 
					
						
							|  |  |  | 			pending (the mode message shows | 
					
						
							|  |  |  | 			"-- (insert) VISUAL --"), it is also stopped. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 3. Changing the Visual area				*visual-change* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*v_o* | 
					
						
							|  |  |  | o			Go to Other end of highlighted text: The current | 
					
						
							|  |  |  | 			cursor position becomes the start of the highlighted | 
					
						
							|  |  |  | 			text and the cursor is moved to the other end of the | 
					
						
							|  |  |  | 			highlighted text.  The highlighted area remains the | 
					
						
							|  |  |  | 			same. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*v_O* | 
					
						
							|  |  |  | O			Go to Other end of highlighted text.  This is like | 
					
						
							|  |  |  | 			"o", but in Visual block mode the cursor moves to the | 
					
						
							|  |  |  | 			other corner in the same line.  When the corner is at | 
					
						
							|  |  |  | 			a character that occupies more than one position on | 
					
						
							|  |  |  | 			the screen (e.g., a <Tab>), the highlighted text may | 
					
						
							|  |  |  | 			change. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*v_$* | 
					
						
							|  |  |  | When the "$" command is used with blockwise Visual mode, the right end of the | 
					
						
							|  |  |  | highlighted text will be determined by the longest highlighted line.  This | 
					
						
							|  |  |  | stops when a motion command is used that does not move straight up or down. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For moving the end of the block many commands can be used, but you cannot | 
					
						
							|  |  |  | use Ex commands, commands that make changes or abandon the file.  Commands | 
					
						
							| 
									
										
										
										
											2007-05-05 17:54:07 +00:00
										 |  |  | (starting with) ".", "&", CTRL-^, "Z", CTRL-], CTRL-T, CTRL-R, CTRL-I | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | and CTRL-O cause a beep and Visual mode continues. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When switching to another window on the same buffer, the cursor position in | 
					
						
							|  |  |  | that window is adjusted, so that the same Visual area is still selected.  This | 
					
						
							|  |  |  | is especially useful to view the start of the Visual area in one window, and | 
					
						
							|  |  |  | the end in another.  You can then use <RightMouse> (or <S-LeftMouse> when | 
					
						
							| 
									
										
										
										
											2004-12-29 20:58:21 +00:00
										 |  |  | 'mousemodel' is "popup") to drag either end of the Visual area. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 4. Operating on the Visual area				*visual-operators* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The operators that can be used are: | 
					
						
							|  |  |  | 	~	switch case					|v_~| | 
					
						
							|  |  |  | 	d	delete						|v_d| | 
					
						
							|  |  |  | 	c	change (4)					|v_c| | 
					
						
							|  |  |  | 	y	yank						|v_y| | 
					
						
							|  |  |  | 	>	shift right (4)					|v_>| | 
					
						
							|  |  |  | 	<	shift left (4)					|v_<| | 
					
						
							|  |  |  | 	!	filter through external command (1)		|v_!| | 
					
						
							|  |  |  | 	=	filter through 'equalprg' option command (1)	|v_=| | 
					
						
							|  |  |  | 	gq	format lines to 'textwidth' length (1)		|v_gq| | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The objects that can be used are: | 
					
						
							|  |  |  | 	aw	a word (with white space)			|v_aw| | 
					
						
							|  |  |  | 	iw	inner word					|v_iw| | 
					
						
							|  |  |  | 	aW	a WORD (with white space)			|v_aW| | 
					
						
							|  |  |  | 	iW	inner WORD					|v_iW| | 
					
						
							|  |  |  | 	as	a sentence (with white space)			|v_as| | 
					
						
							|  |  |  | 	is	inner sentence					|v_is| | 
					
						
							|  |  |  | 	ap	a paragraph (with white space)			|v_ap| | 
					
						
							|  |  |  | 	ip	inner paragraph					|v_ip| | 
					
						
							| 
									
										
										
										
											2020-08-07 19:54:59 +02:00
										 |  |  | 	ab	a () block (with parentheses)			|v_ab| | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 	ib	inner () block					|v_ib| | 
					
						
							|  |  |  | 	aB	a {} block (with braces)			|v_aB| | 
					
						
							|  |  |  | 	iB	inner {} block					|v_iB| | 
					
						
							| 
									
										
										
										
											2010-03-02 16:19:40 +01:00
										 |  |  | 	at	a <tag> </tag> block (with tags)		|v_at| | 
					
						
							|  |  |  | 	it	inner <tag> </tag> block			|v_it| | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 	a<	a <> block (with <>)				|v_a<| | 
					
						
							|  |  |  | 	i<	inner <> block					|v_i<| | 
					
						
							|  |  |  | 	a[	a [] block (with [])				|v_a[| | 
					
						
							|  |  |  | 	i[	inner [] block					|v_i[| | 
					
						
							| 
									
										
										
										
											2010-03-02 16:19:40 +01:00
										 |  |  | 	a"	a double quoted string (with quotes)		|v_aquote| | 
					
						
							|  |  |  | 	i"	inner double quoted string			|v_iquote| | 
					
						
							|  |  |  | 	a'	a single quoted string (with quotes)		|v_a'| | 
					
						
							|  |  |  | 	i'	inner simple quoted string			|v_i'| | 
					
						
							|  |  |  | 	a`	a string in backticks (with backticks)		|v_a`| | 
					
						
							|  |  |  | 	i`	inner string in backticks			|v_i`| | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Additionally the following commands can be used: | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | 	:	start Ex command for highlighted lines (1)	|v_:| | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 	r	change (4)					|v_r| | 
					
						
							|  |  |  | 	s	change						|v_s| | 
					
						
							|  |  |  | 	C	change (2)(4)					|v_C| | 
					
						
							|  |  |  | 	S	change (2)					|v_S| | 
					
						
							|  |  |  | 	R	change (2)					|v_R| | 
					
						
							|  |  |  | 	x	delete						|v_x| | 
					
						
							|  |  |  | 	D	delete (3)					|v_D| | 
					
						
							|  |  |  | 	X	delete (2)					|v_X| | 
					
						
							|  |  |  | 	Y	yank (2)					|v_Y| | 
					
						
							|  |  |  | 	p	put						|v_p| | 
					
						
							|  |  |  | 	J	join (1)					|v_J| | 
					
						
							|  |  |  | 	U	make uppercase					|v_U| | 
					
						
							|  |  |  | 	u	make lowercase					|v_u| | 
					
						
							|  |  |  | 	^]	find tag					|v_CTRL-]| | 
					
						
							|  |  |  | 	I	block insert					|v_b_I| | 
					
						
							|  |  |  | 	A	block append					|v_b_A| | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (1): Always whole lines, see |:visual_example|. | 
					
						
							|  |  |  | (2): Whole lines when not using CTRL-V. | 
					
						
							|  |  |  | (3): Whole lines when not using CTRL-V, delete until the end of the line when | 
					
						
							|  |  |  |      using CTRL-V. | 
					
						
							|  |  |  | (4): When using CTRL-V operates on the block only. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that the ":vmap" command can be used to specifically map keys in Visual | 
					
						
							|  |  |  | mode.  For example, if you would like the "/" command not to extend the Visual | 
					
						
							|  |  |  | area, but instead take the highlighted text and search for that: > | 
					
						
							|  |  |  | 	:vmap / y/<C-R>"<CR> | 
					
						
							|  |  |  | (In the <> notation |<>|, when typing it you should type it literally; you | 
					
						
							|  |  |  | need to remove the 'B' and '<' flags from 'cpoptions'.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you want to give a register name using the """ command, do this just before | 
					
						
							|  |  |  | typing the operator character: "v{move-around}"xd". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you want to give a count to the command, do this just before typing the | 
					
						
							|  |  |  | operator character: "v{move-around}3>" (move lines 3 indents to the right). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*{move-around}* | 
					
						
							|  |  |  | The {move-around} is any sequence of movement commands.  Note the difference | 
					
						
							|  |  |  | with {motion}, which is only ONE movement command. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-22 23:22:22 +00:00
										 |  |  | Another way to operate on the Visual area is using the |/\%V| item in a | 
					
						
							|  |  |  | pattern.  For example, to replace all '(' in the Visual area with '#': > | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-12 22:01:11 +02:00
										 |  |  | 	:'<,'>s/\%V(/#/g | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that the "'<,'>" will appear automatically when you press ":" in Visual | 
					
						
							|  |  |  | mode. | 
					
						
							| 
									
										
										
										
											2006-01-22 23:22:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | ============================================================================== | 
					
						
							|  |  |  | 5. Blockwise operators					*blockwise-operators* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Reminder: Use 'virtualedit' to be able to select blocks that start or end | 
					
						
							|  |  |  | after the end of a line or halfway a tab. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual-block Insert						*v_b_I* | 
					
						
							|  |  |  | With a blockwise selection, I{string}<ESC> will insert {string} at the start | 
					
						
							|  |  |  | of block on every line of the block, provided that the line extends into the | 
					
						
							|  |  |  | block.  Thus lines that are short will remain unmodified.  TABs are split to | 
					
						
							| 
									
										
										
										
											2017-09-02 20:30:35 +02:00
										 |  |  | retain visual columns.  Works only for adding text to a line, not for | 
					
						
							|  |  |  | deletions.  See |v_b_I_example|. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Visual-block Append						*v_b_A* | 
					
						
							|  |  |  | With a blockwise selection, A{string}<ESC> will append {string} to the end of | 
					
						
							| 
									
										
										
										
											2005-04-15 21:00:38 +00:00
										 |  |  | block on every line of the block.  There is some differing behavior where the | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | block RHS is not straight, due to different line lengths: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1. Block was created with <C-v>$ | 
					
						
							|  |  |  |     In this case the string is appended to the end of each line. | 
					
						
							|  |  |  | 2. Block was created with <C-v>{move-around} | 
					
						
							|  |  |  |     In this case the string is appended to the end of the block on each line, | 
					
						
							|  |  |  |     and whitespace is inserted to pad to the end-of-block column. | 
					
						
							|  |  |  | See |v_b_A_example|. | 
					
						
							|  |  |  | Note: "I" and "A" behave differently for lines that don't extend into the | 
					
						
							|  |  |  | selected block.  This was done intentionally, so that you can do it the way | 
					
						
							|  |  |  | you want. | 
					
						
							| 
									
										
										
										
											2017-09-02 20:30:35 +02:00
										 |  |  | Works only for adding text to a line, not for deletions. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Visual-block change						*v_b_c* | 
					
						
							|  |  |  | All selected text in the block will be replaced by the same text string.  When | 
					
						
							|  |  |  | using "c" the selected text is deleted and Insert mode started.  You can then | 
					
						
							|  |  |  | enter text (without a line break).  When you hit <Esc>, the same string is | 
					
						
							|  |  |  | inserted in all previously selected lines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual-block Change						*v_b_C* | 
					
						
							|  |  |  | Like using "c", but the selection is extended until the end of the line for | 
					
						
							|  |  |  | all lines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 								*v_b_<* | 
					
						
							|  |  |  | Visual-block Shift						*v_b_>* | 
					
						
							| 
									
										
										
										
											2005-04-15 21:00:38 +00:00
										 |  |  | The block is shifted by 'shiftwidth'.  The RHS of the block is irrelevant.  The | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | LHS of the block determines the point from which to apply a right shift, and | 
					
						
							| 
									
										
										
										
											2005-04-15 21:00:38 +00:00
										 |  |  | padding includes TABs optimally according to 'ts' and 'et'.  The LHS of the | 
					
						
							| 
									
										
										
										
											2020-08-07 19:54:59 +02:00
										 |  |  | block determines the point up to which to shift left. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | See |v_b_>_example|. | 
					
						
							|  |  |  | See |v_b_<_example|. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual-block Replace						*v_b_r* | 
					
						
							|  |  |  | Every screen char in the highlighted region is replaced with the same char, ie | 
					
						
							|  |  |  | TABs are split and the virtual whitespace is replaced, maintaining screen | 
					
						
							|  |  |  | layout. | 
					
						
							|  |  |  | See |v_b_r_example|. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 6. Repeating						*visual-repeat* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When repeating a Visual mode operator, the operator will be applied to the | 
					
						
							|  |  |  | same amount of text as the last time: | 
					
						
							|  |  |  | - Linewise Visual mode: The same number of lines. | 
					
						
							|  |  |  | - Blockwise Visual mode: The same number of lines and columns. | 
					
						
							|  |  |  | - Normal Visual mode within one line: The same number of characters. | 
					
						
							|  |  |  | - Normal Visual mode with several lines: The same number of lines, in the | 
					
						
							|  |  |  |   last line the same number of characters as in the last line the last time. | 
					
						
							|  |  |  | The start of the text is the Cursor position.  If the "$" command was used as | 
					
						
							|  |  |  | one of the last commands to extend the highlighted text, the repeating will | 
					
						
							|  |  |  | be applied up to the rightmost column of the longest line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 7. Examples						*visual-examples* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*:visual_example* | 
					
						
							|  |  |  | Currently the ":" command works on whole lines only.  When you select part of | 
					
						
							|  |  |  | a line, doing something like ":!date" will replace the whole line.  If you | 
					
						
							|  |  |  | want only part of the line to be replaced you will have to make a mapping for | 
					
						
							|  |  |  | it.  In a future release ":" may work on partial lines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here is an example, to replace the selected text with the output of "date": > | 
					
						
							|  |  |  | 	:vmap _a <Esc>`>a<CR><Esc>`<i<CR><Esc>!!date<CR>kJJ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (In the <> notation |<>|, when typing it you should type it literally; you | 
					
						
							|  |  |  | need to remove the 'B' and '<' flags from 'cpoptions') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | What this does is: | 
					
						
							|  |  |  | <Esc>		stop Visual mode | 
					
						
							|  |  |  | `>		go to the end of the Visual area | 
					
						
							|  |  |  | a<CR><Esc>	break the line after the Visual area | 
					
						
							|  |  |  | `<		jump to the start of the Visual area | 
					
						
							|  |  |  | i<CR><Esc>	break the line before the Visual area | 
					
						
							|  |  |  | !!date<CR>	filter the Visual text through date | 
					
						
							|  |  |  | kJJ		Join the lines back together | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*visual-search* | 
					
						
							|  |  |  | Here is an idea for a mapping that makes it possible to do a search for the | 
					
						
							|  |  |  | selected text: > | 
					
						
							|  |  |  | 	:vmap X y/<C-R>"<CR> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (In the <> notation |<>|, when typing it you should type it literally; you | 
					
						
							|  |  |  | need to remove the 'B' and '<' flags from 'cpoptions') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that special characters (like '.' and '*') will cause problems. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual-block Examples					*blockwise-examples* | 
					
						
							|  |  |  | With the following text, I will indicate the commands to produce the block and | 
					
						
							| 
									
										
										
										
											2005-04-15 21:00:38 +00:00
										 |  |  | the results below.  In all cases, the cursor begins on the 'a' in the first | 
					
						
							| 
									
										
										
										
											2004-12-29 20:58:21 +00:00
										 |  |  | line of the test text. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | The following modeline settings are assumed ":ts=8:sw=4:". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | It will be helpful to | 
					
						
							|  |  |  | :set hls | 
					
						
							|  |  |  | /<TAB> | 
					
						
							| 
									
										
										
										
											2005-04-15 21:00:38 +00:00
										 |  |  | where <TAB> is a real TAB.  This helps visualise the operations. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The test text is: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | abcdefghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | abc		defghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdef  ghi		jklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdefghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1. fo<C-v>3jISTRING<ESC>					*v_b_I_example* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | abcdefghijklmnSTRINGopqrstuvwxyz | 
					
						
							|  |  |  | abc	      STRING  defghijklmnopqrstuvwxyz | 
					
						
							| 
									
										
										
										
											2021-05-30 20:54:13 +02:00
										 |  |  | abcdef  ghi   STRING  	jklmnopqrstuvwxyz | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | abcdefghijklmnSTRINGopqrstuvwxyz | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2. fo<C-v>3j$ASTRING<ESC>					*v_b_A_example* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | abcdefghijklmnopqrstuvwxyzSTRING | 
					
						
							|  |  |  | abc		defghijklmnopqrstuvwxyzSTRING | 
					
						
							|  |  |  | abcdef  ghi		jklmnopqrstuvwxyzSTRING | 
					
						
							|  |  |  | abcdefghijklmnopqrstuvwxyzSTRING | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3. fo<C-v>3j3l<..						*v_b_<_example* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | abcdefghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | abc	      defghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdef  ghi   jklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdefghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 4. fo<C-v>3j>..							*v_b_>_example* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | abcdefghijklmn		  opqrstuvwxyz | 
					
						
							|  |  |  | abc			    defghijklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdef  ghi			    jklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdefghijklmn		  opqrstuvwxyz | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 5. fo<C-v>5l3jrX						*v_b_r_example* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | abcdefghijklmnXXXXXXuvwxyz | 
					
						
							|  |  |  | abc	      XXXXXXhijklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdef  ghi   XXXXXX    jklmnopqrstuvwxyz | 
					
						
							|  |  |  | abcdefghijklmnXXXXXXuvwxyz | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 8. Select mode						*Select* *Select-mode* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Select mode looks like Visual mode, but the commands accepted are quite | 
					
						
							|  |  |  | different.  This resembles the selection mode in Microsoft Windows. | 
					
						
							|  |  |  | When the 'showmode' option is set, "-- SELECT --" is shown in the last line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Entering Select mode: | 
					
						
							|  |  |  | - Using the mouse to select an area, and 'selectmode' contains "mouse". | 
					
						
							|  |  |  |   'mouse' must also contain a flag for the current mode. | 
					
						
							|  |  |  | - Using a non-printable movement command, with the Shift key pressed, and | 
					
						
							|  |  |  |   'selectmode' contains "key".  For example: <S-Left> and <S-End>.  'keymodel' | 
					
						
							|  |  |  |   must also contain "startsel". | 
					
						
							|  |  |  | - Using "v", "V" or CTRL-V command, and 'selectmode' contains "cmd". | 
					
						
							|  |  |  | - Using "gh", "gH" or "g_CTRL-H" command in Normal mode. | 
					
						
							|  |  |  | - From Visual mode, press CTRL-G.			*v_CTRL-G* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Commands in Select mode: | 
					
						
							|  |  |  | - Printable characters, <NL> and <CR> cause the selection to be deleted, and | 
					
						
							|  |  |  |   Vim enters Insert mode.  The typed character is inserted. | 
					
						
							|  |  |  | - Non-printable movement commands, with the Shift key pressed, extend the | 
					
						
							|  |  |  |   selection.  'keymodel' must include "startsel". | 
					
						
							|  |  |  | - Non-printable movement commands, with the Shift key NOT pressed, stop Select | 
					
						
							|  |  |  |   mode.  'keymodel' must include "stopsel". | 
					
						
							|  |  |  | - ESC stops Select mode. | 
					
						
							|  |  |  | - CTRL-O switches to Visual mode for the duration of one command. *v_CTRL-O* | 
					
						
							|  |  |  | - CTRL-G switches to Visual mode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Otherwise, typed characters are handled as in Visual mode. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When using an operator in Select mode, and the selection is linewise, the | 
					
						
							|  |  |  | selected lines are operated upon, but like in characterwise selection.  For | 
					
						
							|  |  |  | example, when a whole line is deleted, it can later be pasted halfway a line. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Mappings and menus in Select mode.			*Select-mode-mapping* | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-20 21:47:49 +00:00
										 |  |  | When mappings and menus are defined with the |:vmap| or |:vmenu| command they | 
					
						
							|  |  |  | work both in Visual mode and in Select mode.  When these are used in Select | 
					
						
							|  |  |  | mode Vim automatically switches to Visual mode, so that the same behavior as | 
					
						
							|  |  |  | in Visual mode is effective.  If you don't want this use |:xmap| or |:smap|. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | Users will expect printable characters to replace the selected area. | 
					
						
							|  |  |  | Therefore avoid mapping printable characters in Select mode.  Or use | 
					
						
							|  |  |  | |:sunmap|  after |:map| and |:vmap| to remove it for Select mode. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | After the mapping or menu finishes, the selection is enabled again and Select | 
					
						
							|  |  |  | mode entered, unless the selected area was deleted, another buffer became | 
					
						
							|  |  |  | the current one or the window layout was changed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When a character was typed that causes the selection to be deleted and Insert | 
					
						
							|  |  |  | mode started, Insert mode mappings are applied to this character.  This may | 
					
						
							|  |  |  | cause some confusion, because it means Insert mode mappings apply to a | 
					
						
							|  |  |  | character typed in Select mode.  Language mappings apply as well. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*gV* *v_gV* | 
					
						
							|  |  |  | gV			Avoid the automatic reselection of the Visual area | 
					
						
							|  |  |  | 			after a Select mode mapping or menu has finished. | 
					
						
							|  |  |  | 			Put this just before the end of the mapping or menu. | 
					
						
							|  |  |  | 			At least it should be after any operations on the | 
					
						
							|  |  |  | 			selection. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*gh* | 
					
						
							|  |  |  | gh			Start Select mode, characterwise.  This is like "v", | 
					
						
							|  |  |  | 			but starts Select mode instead of Visual mode. | 
					
						
							|  |  |  | 			Mnemonic: "get highlighted". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*gH* | 
					
						
							|  |  |  | gH			Start Select mode, linewise.  This is like "V", | 
					
						
							|  |  |  | 			but starts Select mode instead of Visual mode. | 
					
						
							|  |  |  | 			Mnemonic: "get Highlighted". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*g_CTRL-H* | 
					
						
							|  |  |  | g CTRL-H		Start Select mode, blockwise.  This is like CTRL-V, | 
					
						
							|  |  |  | 			but starts Select mode instead of Visual mode. | 
					
						
							|  |  |  | 			Mnemonic: "get Highlighted". | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-11 18:00:22 +02:00
										 |  |  |  vim:tw=78:ts=8:noet:ft=help:norl: |