diff options
Diffstat (limited to 'runtime/doc/scroll.txt')
-rw-r--r-- | runtime/doc/scroll.txt | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt new file mode 100644 index 0000000..1415e2f --- /dev/null +++ b/runtime/doc/scroll.txt @@ -0,0 +1,335 @@ +*scroll.txt* For Vim version 8.1. Last change: 2018 Apr 26 + + + 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. + {difference from vi: Vim scrolls 'scroll' screen + lines, instead of file lines; makes a difference when + lines wrap} + +<S-Down> or *<S-Down>* *<kPageDown>* +<PageDown> or *<PageDown>* *CTRL-F* +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. + {difference from vi: Vim scrolls 'scroll' screen + lines, instead of file lines; makes a difference when + lines wrap} + +<S-Up> or *<S-Up>* *<kPageUp>* +<PageUp> or *<PageUp>* *CTRL-B* +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. {not in Vi} + + *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! {not in Vi} + + *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. + {not in Vi} + +============================================================================== +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. {not in + Vi} + +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. {not in + Vi} + + *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. {not in + Vi} + + *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. {not in + Vi} + +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. {not in Vi} + + *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. {not in Vi} + +============================================================================== +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, 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 also meaningful when using the vertical scrollbar of the +window which has the cursor focus. However, when using the vertical scrollbar +of 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. + +For the Win32 GUI the scroll action is hard coded. It works just like +dragging the scrollbar of the current window. How many lines are scrolled +depends on your mouse driver. If the scroll action causes input focus +problems, see |intellimouse-wheel-problems|. + +For the X11 GUIs (Motif, Athena 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 three lines up *<ScrollWheelUp>* + <S-ScrollWheelUp> scroll one page up *<S-ScrollWheelUp>* + <C-ScrollWheelUp> scroll one page up *<C-ScrollWheelUp>* + <ScrollWheelDown> scroll three lines down *<ScrollWheelDown>* + <S-ScrollWheelDown> scroll one page down *<S-ScrollWheelDown>* + <C-ScrollWheelDown> scroll one page down *<C-ScrollWheelDown>* + <ScrollWheelLeft> scroll six columns left *<ScrollWheelLeft>* + <S-ScrollWheelLeft> scroll one page left *<S-ScrollWheelLeft>* + <C-ScrollWheelLeft> scroll one page left *<C-ScrollWheelLeft>* + <ScrollWheelRight> scroll six 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. + +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. + +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: |