343 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| *scroll.txt*    For Vim version 9.1.  Last change: 2024 Jul 06
 | |
| 
 | |
| 
 | |
| 		  VIM REFERENCE MANUAL    by Bram Moolenaar
 | |
| 
 | |
| 
 | |
| Scrolling						*scrolling*
 | |
| 
 | |
| These commands move the contents of the window.  If the cursor position is
 | |
| moved off of the window, the cursor is moved onto the window (with
 | |
| 'scrolloff' screen lines around it).  A page is the number of lines in the
 | |
| window minus two.  The mnemonics for these commands may be a bit confusing.
 | |
| Remember that the commands refer to moving the window (the part of the buffer
 | |
| that you see) upwards or downwards in the buffer.  When the window moves
 | |
| upwards in the buffer, the text in the window moves downwards on your screen.
 | |
| 
 | |
| See section |03.7| of the user manual for an introduction.
 | |
| 
 | |
| 1. Scrolling downwards		|scroll-down|
 | |
| 2. Scrolling upwards		|scroll-up|
 | |
| 3. Scrolling relative to cursor	|scroll-cursor|
 | |
| 4. Scrolling horizontally	|scroll-horizontal|
 | |
| 5. Scrolling synchronously	|scroll-binding|
 | |
| 6. Scrolling with a mouse wheel |scroll-mouse-wheel|
 | |
| 
 | |
| ==============================================================================
 | |
| 1. Scrolling downwards					*scroll-down*
 | |
| 
 | |
| The following commands move the edit window (the part of the buffer that you
 | |
| see) downwards (this means that more lines downwards in the text buffer can be
 | |
| seen):
 | |
| 
 | |
| 							*CTRL-E*
 | |
| CTRL-E			Scroll window [count] lines downwards in the buffer.
 | |
| 			The text moves upwards on the screen.
 | |
| 			Mnemonic: Extra lines.
 | |
| 
 | |
| 							*CTRL-D*
 | |
| CTRL-D			Scroll window Downwards in the buffer.  The number of
 | |
| 			lines comes from the 'scroll' option (default: half a
 | |
| 			screen).  If [count] given, first set 'scroll' option
 | |
| 			to [count].  The cursor is moved the same number of
 | |
| 			lines down in the file (if possible; when lines wrap
 | |
| 			and when hitting the end of the file there may be a
 | |
| 			difference).  When the cursor is on the last line of
 | |
| 			the buffer nothing happens and a beep is produced.
 | |
| 			See also 'startofline' option.
 | |
| 
 | |
| <S-Down>	or				*<S-Down>* *<kPageDown>*
 | |
| <PageDown>	or				*<PageDown>* *CTRL-F*
 | |
| <S-CR>	or					*<S-CR>* *<S-NL>*
 | |
| <S-+>	or					*SHIFT-+* *<S-Plus>*
 | |
| CTRL-F			Scroll window [count] pages Forwards (downwards) in
 | |
| 			the buffer.  See also 'startofline' option.
 | |
| 			When there is only one window the 'window' option
 | |
| 			might be used.
 | |
| 
 | |
| 							*z+*
 | |
| z+			Without [count]: Redraw with the line just below the
 | |
| 			window at the top of the window.  Put the cursor in
 | |
| 			that line, at the first non-blank in the line.
 | |
| 			With [count]: just like "z<CR>".
 | |
| 
 | |
| ==============================================================================
 | |
| 2. Scrolling upwards					*scroll-up*
 | |
| 
 | |
| The following commands move the edit window (the part of the buffer that you
 | |
| see) upwards (this means that more lines upwards in the text buffer can be
 | |
| seen):
 | |
| 
 | |
| 							*CTRL-Y*
 | |
| CTRL-Y			Scroll window [count] lines upwards in the buffer.
 | |
| 			The text moves downwards on the screen.
 | |
| 			Note: When using the MS-Windows key bindings CTRL-Y is
 | |
| 			remapped to redo.
 | |
| 
 | |
| 							*CTRL-U*
 | |
| CTRL-U			Scroll window Upwards in the buffer.  The number of
 | |
| 			lines comes from the 'scroll' option (default: half a
 | |
| 			screen).  If [count] given, first set the 'scroll'
 | |
| 			option to [count].  The cursor is moved the same
 | |
| 			number of lines up in the file (if possible; when
 | |
| 			lines wrap and when hitting the end of the file there
 | |
| 			may be a difference).  When the cursor is on the first
 | |
| 			line of the buffer nothing happens and a beep is
 | |
| 			produced.  See also 'startofline' option.
 | |
| 
 | |
| <S-Up>		or					*<S-Up>* *<kPageUp>*
 | |
| <PageUp>	or					*<PageUp>* *CTRL-B*
 | |
| <S-->		or				*<S-Minus>* *SHIFT-MINUS*
 | |
| CTRL-B			Scroll window [count] pages Backwards (upwards) in the
 | |
| 			buffer.  See also 'startofline' option.
 | |
| 			When there is only one window the 'window' option
 | |
| 			might be used.
 | |
| 
 | |
| 							*z^*
 | |
| z^			Without [count]: Redraw with the line just above the
 | |
| 			window at the bottom of the window.  Put the cursor in
 | |
| 			that line, at the first non-blank in the line.
 | |
| 			With [count]: First scroll the text to put the [count]
 | |
| 			line at the bottom of the window, then redraw with the
 | |
| 			line which is now at the top of the window at the
 | |
| 			bottom of the window.  Put the cursor in that line, at
 | |
| 			the first non-blank in the line.
 | |
| 
 | |
| ==============================================================================
 | |
| 3. Scrolling relative to cursor				*scroll-cursor*
 | |
| 
 | |
| The following commands reposition the edit window (the part of the buffer that
 | |
| you see) while keeping the cursor on the same line.  Note that the 'scrolloff'
 | |
| option may cause context lines to show above and below the cursor.
 | |
| 
 | |
| 							*z<CR>*
 | |
| z<CR>			Redraw, line [count] at top of window (default
 | |
| 			cursor line).  Put cursor at first non-blank in the
 | |
| 			line.
 | |
| 
 | |
| 							*zt*
 | |
| zt			Like "z<CR>", but leave the cursor in the same
 | |
| 			column.
 | |
| 
 | |
| 							*zN<CR>*
 | |
| z{height}<CR>		Redraw, make window {height} lines tall.  This is
 | |
| 			useful to make the number of lines small when screen
 | |
| 			updating is very slow.  Cannot make the height more
 | |
| 			than the physical screen height.
 | |
| 
 | |
| 							*z.*
 | |
| z.			Redraw, line [count] at center of window (default
 | |
| 			cursor line).  Put cursor at first non-blank in the
 | |
| 			line.
 | |
| 
 | |
| 							*zz*
 | |
| zz			Like "z.", but leave the cursor in the same column.
 | |
| 			Careful: If caps-lock is on, this command becomes
 | |
| 			"ZZ": write buffer and exit!
 | |
| 
 | |
| 							*z-*
 | |
| z-			Redraw, line [count] at bottom of window (default
 | |
| 			cursor line).  Put cursor at first non-blank in the
 | |
| 			line.
 | |
| 
 | |
| 							*zb*
 | |
| zb			Like "z-", but leave the cursor in the same column.
 | |
| 
 | |
| ==============================================================================
 | |
| 4. Scrolling horizontally				*scroll-horizontal*
 | |
| 
 | |
| For the following four commands the cursor follows the screen.  If the
 | |
| character that the cursor is on is moved off the screen, the cursor is moved
 | |
| to the closest character that is on the screen.  The value of 'sidescroll' is
 | |
| not used.
 | |
| 
 | |
| z<Right>    or						*zl* *z<Right>*
 | |
| zl			Move the view on the text [count] characters to the
 | |
| 			right, thus scroll the text [count] characters to the
 | |
| 			left.  This only works when 'wrap' is off.
 | |
| 
 | |
| z<Left>      or						*zh* *z<Left>*
 | |
| zh			Move the view on the text [count] characters to the
 | |
| 			left, thus scroll the text [count] characters to the
 | |
| 			right.  This only works when 'wrap' is off.
 | |
| 
 | |
| 							*zL*
 | |
| zL			Move the view on the text half a screenwidth to the
 | |
| 			right, thus scroll the text half a screenwidth to the
 | |
| 			left.  This only works when 'wrap' is off.
 | |
| 
 | |
| 							*zH*
 | |
| zH			Move the view on the text half a screenwidth to the
 | |
| 			left, thus scroll the text half a screenwidth to the
 | |
| 			right.  This only works when 'wrap' is off.
 | |
| 
 | |
| For the following two commands the cursor is not moved in the text, only the
 | |
| text scrolls on the screen.
 | |
| 
 | |
| 							*zs*
 | |
| zs			Scroll the text horizontally to position the cursor
 | |
| 			at the start (left side) of the screen.  This only
 | |
| 			works when 'wrap' is off.
 | |
| 
 | |
| 							*ze*
 | |
| ze			Scroll the text horizontally to position the cursor
 | |
| 			at the end (right side) of the screen.  This only
 | |
| 			works when 'wrap' is off.
 | |
| 
 | |
| ==============================================================================
 | |
| 5. Scrolling synchronously				*scroll-binding*
 | |
| 
 | |
| Occasionally, it is desirable to bind two or more windows together such that
 | |
| when one window is scrolled, the other windows are also scrolled.  In Vim,
 | |
| windows can be given this behavior by setting the (window-specific)
 | |
| 'scrollbind' option.  When a window that has 'scrollbind' set is scrolled, all
 | |
| other 'scrollbind' windows are scrolled the same amount, if possible.  The
 | |
| behavior of 'scrollbind' can be modified by the 'scrollopt' option.
 | |
| 
 | |
| When using the scrollbars or the mouse wheel, the binding only happens when
 | |
| scrolling the window with focus (where the cursor is).  You can use this to
 | |
| avoid scroll-binding for a moment without resetting options.
 | |
| 
 | |
| When a window also has the 'diff' option set, the scroll-binding uses the
 | |
| differences between the two buffers to synchronize the position precisely.
 | |
| Otherwise the following method is used.
 | |
| 
 | |
| 							*scrollbind-relative*
 | |
| Each 'scrollbind' window keeps track of its "relative offset", which can be
 | |
| thought of as the difference between the current window's vertical scroll
 | |
| position and the other window's vertical scroll position.  When one of the
 | |
| 'scrollbind' windows is asked to vertically scroll past the beginning or end
 | |
| limit of its text, the window no longer scrolls, but remembers how far past
 | |
| the limit it wishes to be.  The window keeps this information so that it can
 | |
| maintain the same relative offset, regardless of its being asked to scroll
 | |
| past its buffer's limits.
 | |
| 
 | |
| However, if a 'scrollbind' window that has a relative offset that is past its
 | |
| buffer's limits is given the cursor focus, the other 'scrollbind' windows must
 | |
| jump to a location where the current window's relative offset is valid.  This
 | |
| behavior can be changed by clearing the "jump" flag from the 'scrollopt'
 | |
| option.
 | |
| 
 | |
| 						*syncbind* *:syncbind* *:sync*
 | |
| :syncbind		Force all 'scrollbind' windows to have the same
 | |
| 			relative offset.  I.e., when any of the 'scrollbind'
 | |
| 			windows is scrolled to the top of its buffer, all of
 | |
| 			the 'scrollbind' windows will also be at the top of
 | |
| 			their buffers.
 | |
| 
 | |
| 							*scrollbind-quickadj*
 | |
| The 'scrollbind' flag is meaningful when using keyboard commands to vertically
 | |
| scroll a window, and is also meaningful when using the vertical scrollbar or
 | |
| the mouse wheel in the window which has the cursor focus.  However, when using
 | |
| the vertical scrollbar or the mouse wheel in a window which doesn't have the
 | |
| cursor focus, 'scrollbind' is ignored.
 | |
| This allows quick adjustment of the relative offset of 'scrollbind' windows.
 | |
| 
 | |
| ==============================================================================
 | |
| 6. Scrolling with a mouse wheel				*scroll-mouse-wheel*
 | |
| 
 | |
| When your mouse has a scroll wheel, it should work with Vim in the GUI.  How
 | |
| it works depends on your system.  It might also work in an xterm
 | |
| |xterm-mouse-wheel|.  By default only vertical scroll wheels are supported,
 | |
| but some GUIs also support horizontal scroll wheels.
 | |
| 
 | |
| On MS-Windows, if the scroll action causes input focus -problems, see
 | |
| |intellimouse-wheel-problems|.
 | |
| 
 | |
| For Win32 and the X11 GUIs (Motif and GTK) scrolling the wheel generates key
 | |
| presses <ScrollWheelUp>, <ScrollWheelDown>, <ScrollWheelLeft> and
 | |
| <ScrollWheelRight>.  For example, if you push the scroll wheel upwards a
 | |
| <ScrollWheelUp> key press is generated causing the window to scroll upwards
 | |
| (while the text is actually moving downwards).  The default action for these
 | |
| keys are:
 | |
|     <ScrollWheelUp>	    scroll N lines up	        *<ScrollWheelUp>*
 | |
|     <S-ScrollWheelUp>	    scroll one page up		*<S-ScrollWheelUp>*
 | |
|     <C-ScrollWheelUp>	    scroll one page up		*<C-ScrollWheelUp>*
 | |
|     <ScrollWheelDown>	    scroll N lines down	        *<ScrollWheelDown>*
 | |
|     <S-ScrollWheelDown>	    scroll one page down	*<S-ScrollWheelDown>*
 | |
|     <C-ScrollWheelDown>	    scroll one page down	*<C-ScrollWheelDown>*
 | |
|     <ScrollWheelLeft>	    scroll N columns left	*<ScrollWheelLeft>*
 | |
|     <S-ScrollWheelLeft>	    scroll one page left	*<S-ScrollWheelLeft>*
 | |
|     <C-ScrollWheelLeft>	    scroll one page left	*<C-ScrollWheelLeft>*
 | |
|     <ScrollWheelRight>	    scroll N columns right	*<ScrollWheelRight>*
 | |
|     <S-ScrollWheelRight>    scroll one page right	*<S-ScrollWheelRight>*
 | |
|     <C-ScrollWheelRight>    scroll one page right	*<C-ScrollWheelRight>*
 | |
| This should work in all modes, except when editing the command line.
 | |
| 
 | |
| The value of N depends on the system.  By default Vim scrolls three lines when
 | |
| moving vertically, and six columns when moving horizontally.  On MS-Windows
 | |
| the amount of lines and columns for each scroll action is taken from the
 | |
| system-wide settings.
 | |
| 
 | |
| Note that horizontal scrolling only works if 'nowrap' is set.  Also, unless
 | |
| the "h" flag in 'guioptions' is set, the cursor moves to the longest visible
 | |
| line if the cursor line is about to be scrolled off the screen (similarly to
 | |
| how the horizontal scrollbar works).
 | |
| 
 | |
| You can modify the default behavior by mapping the keys.  For example, to make
 | |
| the scroll wheel move one line or half a page in Normal mode: >
 | |
|    :map <ScrollWheelUp> <C-Y>
 | |
|    :map <S-ScrollWheelUp> <C-U>
 | |
|    :map <ScrollWheelDown> <C-E>
 | |
|    :map <S-ScrollWheelDown> <C-D>
 | |
| You can also use Alt and Ctrl modifiers.
 | |
| 
 | |
| This only works when Vim gets the scroll wheel events, of course.  You can
 | |
| check if this works with the "xev" program.
 | |
| 							*mouse-scrolling-off*
 | |
| If you do not want the mouse to cause scrolling (e.g. because resting your
 | |
| palm on the touchpad causes scroll events), you can disable that with: >
 | |
| 	:map <ScrollWheelDown> <Nop>
 | |
| 	:map! <ScrollWheelDown> <Nop>
 | |
| 	:map <ScrollWheelUp> <Nop>
 | |
| 	:map! <ScrollWheelUp> <Nop>
 | |
| 	:map <ScrollWheelLeft> <Nop>
 | |
| 	:map! <ScrollWheelLeft> <Nop>
 | |
| 	:map <ScrollWheelRight> <Nop>
 | |
| 	:map! <ScrollWheelRight> <Nop>
 | |
| 
 | |
| When using XFree86, the /etc/XF86Config file should have the correct entry for
 | |
| your mouse.  For FreeBSD, this entry works for a Logitech scrollmouse: >
 | |
|     Protocol     "MouseMan"
 | |
|     Device       "/dev/psm0"
 | |
|     ZAxisMapping 4 5
 | |
| See the XFree86 documentation for information.
 | |
| 
 | |
| 						*<MouseDown>* *<MouseUp>*
 | |
| The keys <MouseDown> and <MouseUp> have been deprecated.  Use <ScrollWheelUp>
 | |
| instead of <MouseDown> and use <ScrollWheelDown> instead of <MouseUp>.
 | |
| 
 | |
| 							*xterm-mouse-wheel*
 | |
| To use the mouse wheel in a new xterm you only have to make the scroll wheel
 | |
| work in your Xserver, as mentioned above.
 | |
| 
 | |
| To use the mouse wheel in an older xterm you must do this:
 | |
| 1. Make it work in your Xserver, as mentioned above.
 | |
| 2. Add translations for the xterm, so that the xterm will pass a scroll event
 | |
|    to Vim as an escape sequence.
 | |
| 3. Add mappings in Vim, to interpret the escape sequences as <ScrollWheelDown>
 | |
|    or <ScrollWheelUp> keys.
 | |
| 
 | |
| You can do the translations by adding this to your ~.Xdefaults file (or other
 | |
| file where your X resources are kept): >
 | |
| 
 | |
|   XTerm*VT100.Translations:		#override \n\
 | |
| 		s<Btn4Down>: string("0x9b") string("[64~") \n\
 | |
| 		s<Btn5Down>: string("0x9b") string("[65~") \n\
 | |
| 		<Btn4Down>: string("0x9b") string("[62~") \n\
 | |
| 		<Btn5Down>: string("0x9b") string("[63~") \n\
 | |
| 		<Btn4Up>: \n\
 | |
| 		<Btn5Up>:
 | |
| 
 | |
| Add these mappings to your vimrc file: >
 | |
| 	:map <M-Esc>[62~ <ScrollWheelUp>
 | |
| 	:map! <M-Esc>[62~ <ScrollWheelUp>
 | |
| 	:map <M-Esc>[63~ <ScrollWheelDown>
 | |
| 	:map! <M-Esc>[63~ <ScrollWheelDown>
 | |
| 	:map <M-Esc>[64~ <S-ScrollWheelUp>
 | |
| 	:map! <M-Esc>[64~ <S-ScrollWheelUp>
 | |
| 	:map <M-Esc>[65~ <S-ScrollWheelDown>
 | |
| 	:map! <M-Esc>[65~ <S-ScrollWheelDown>
 | |
| <
 | |
|  vim:tw=78:ts=8:noet:ft=help:norl:
 |