Bram Moolenaar | c0514bf | 2016-11-17 14:50:09 +0100 | [diff] [blame] | 1 | *scroll.txt* For Vim version 8.0. Last change: 2016 Nov 10 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 2 | |
| 3 | |
| 4 | VIM REFERENCE MANUAL by Bram Moolenaar |
| 5 | |
| 6 | |
| 7 | Scrolling *scrolling* |
| 8 | |
| 9 | These commands move the contents of the window. If the cursor position is |
| 10 | moved off of the window, the cursor is moved onto the window (with |
| 11 | 'scrolloff' screen lines around it). A page is the number of lines in the |
| 12 | window minus two. The mnemonics for these commands may be a bit confusing. |
| 13 | Remember that the commands refer to moving the window (the part of the buffer |
| 14 | that you see) upwards or downwards in the buffer. When the window moves |
| 15 | upwards in the buffer, the text in the window moves downwards on your screen. |
| 16 | |
| 17 | See section |03.7| of the user manual for an introduction. |
| 18 | |
| 19 | 1. Scrolling downwards |scroll-down| |
| 20 | 2. Scrolling upwards |scroll-up| |
| 21 | 3. Scrolling relative to cursor |scroll-cursor| |
| 22 | 4. Scrolling horizontally |scroll-horizontal| |
| 23 | 5. Scrolling synchronously |scroll-binding| |
| 24 | 6. Scrolling with a mouse wheel |scroll-mouse-wheel| |
| 25 | |
| 26 | ============================================================================== |
| 27 | 1. Scrolling downwards *scroll-down* |
| 28 | |
| 29 | The following commands move the edit window (the part of the buffer that you |
| 30 | see) downwards (this means that more lines downwards in the text buffer can be |
| 31 | seen): |
| 32 | |
| 33 | *CTRL-E* |
| 34 | CTRL-E Scroll window [count] lines downwards in the buffer. |
| 35 | Mnemonic: Extra lines. |
| 36 | |
| 37 | *CTRL-D* |
| 38 | CTRL-D Scroll window Downwards in the buffer. The number of |
| 39 | lines comes from the 'scroll' option (default: half a |
| 40 | screen). If [count] given, first set 'scroll' option |
| 41 | to [count]. The cursor is moved the same number of |
| 42 | lines down in the file (if possible; when lines wrap |
| 43 | and when hitting the end of the file there may be a |
| 44 | difference). When the cursor is on the last line of |
| 45 | the buffer nothing happens and a beep is produced. |
| 46 | See also 'startofline' option. |
| 47 | {difference from vi: Vim scrolls 'scroll' screen |
| 48 | lines, instead of file lines; makes a difference when |
| 49 | lines wrap} |
| 50 | |
| 51 | <S-Down> or *<S-Down>* *<kPageDown>* |
| 52 | <PageDown> or *<PageDown>* *CTRL-F* |
| 53 | CTRL-F Scroll window [count] pages Forwards (downwards) in |
| 54 | the buffer. See also 'startofline' option. |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 55 | When there is only one window the 'window' option |
| 56 | might be used. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 57 | |
| 58 | *z+* |
| 59 | z+ Without [count]: Redraw with the line just below the |
| 60 | window at the top of the window. Put the cursor in |
| 61 | that line, at the first non-blank in the line. |
| 62 | With [count]: just like "z<CR>". |
| 63 | |
| 64 | ============================================================================== |
| 65 | 2. Scrolling upwards *scroll-up* |
| 66 | |
| 67 | The following commands move the edit window (the part of the buffer that you |
| 68 | see) upwards (this means that more lines upwards in the text buffer can be |
| 69 | seen): |
| 70 | |
| 71 | *CTRL-Y* |
| 72 | CTRL-Y Scroll window [count] lines upwards in the buffer. |
| 73 | Note: When using the MS-Windows key bindings CTRL-Y is |
| 74 | remapped to redo. |
| 75 | |
| 76 | *CTRL-U* |
| 77 | CTRL-U Scroll window Upwards in the buffer. The number of |
| 78 | lines comes from the 'scroll' option (default: half a |
| 79 | screen). If [count] given, first set the 'scroll' |
| 80 | option to [count]. The cursor is moved the same |
| 81 | number of lines up in the file (if possible; when |
| 82 | lines wrap and when hitting the end of the file there |
| 83 | may be a difference). When the cursor is on the first |
| 84 | line of the buffer nothing happens and a beep is |
| 85 | produced. See also 'startofline' option. |
| 86 | {difference from vi: Vim scrolls 'scroll' screen |
| 87 | lines, instead of file lines; makes a difference when |
| 88 | lines wrap} |
| 89 | |
| 90 | <S-Up> or *<S-Up>* *<kPageUp>* |
| 91 | <PageUp> or *<PageUp>* *CTRL-B* |
| 92 | CTRL-B Scroll window [count] pages Backwards (upwards) in the |
| 93 | buffer. See also 'startofline' option. |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 94 | When there is only one window the 'window' option |
| 95 | might be used. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 96 | |
| 97 | *z^* |
| 98 | z^ Without [count]: Redraw with the line just above the |
| 99 | window at the bottom of the window. Put the cursor in |
| 100 | that line, at the first non-blank in the line. |
| 101 | With [count]: First scroll the text to put the [count] |
| 102 | line at the bottom of the window, then redraw with the |
| 103 | line which is now at the top of the window at the |
| 104 | bottom of the window. Put the cursor in that line, at |
| 105 | the first non-blank in the line. |
| 106 | |
| 107 | ============================================================================== |
| 108 | 3. Scrolling relative to cursor *scroll-cursor* |
| 109 | |
| 110 | The following commands reposition the edit window (the part of the buffer that |
Bram Moolenaar | c0514bf | 2016-11-17 14:50:09 +0100 | [diff] [blame] | 111 | you see) while keeping the cursor on the same line. Note that the 'scrolloff' |
| 112 | option may cause context lines to show above and below the cursor. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 113 | |
| 114 | *z<CR>* |
| 115 | z<CR> Redraw, line [count] at top of window (default |
| 116 | cursor line). Put cursor at first non-blank in the |
| 117 | line. |
| 118 | |
| 119 | *zt* |
| 120 | zt Like "z<CR>", but leave the cursor in the same |
| 121 | column. {not in Vi} |
| 122 | |
| 123 | *zN<CR>* |
| 124 | z{height}<CR> Redraw, make window {height} lines tall. This is |
| 125 | useful to make the number of lines small when screen |
| 126 | updating is very slow. Cannot make the height more |
| 127 | than the physical screen height. |
| 128 | |
| 129 | *z.* |
| 130 | z. Redraw, line [count] at center of window (default |
| 131 | cursor line). Put cursor at first non-blank in the |
| 132 | line. |
| 133 | |
| 134 | *zz* |
| 135 | zz Like "z.", but leave the cursor in the same column. |
Bram Moolenaar | 06b5d51 | 2010-05-22 15:37:44 +0200 | [diff] [blame] | 136 | Careful: If caps-lock is on, this command becomes |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 137 | "ZZ": write buffer and exit! {not in Vi} |
| 138 | |
| 139 | *z-* |
| 140 | z- Redraw, line [count] at bottom of window (default |
| 141 | cursor line). Put cursor at first non-blank in the |
| 142 | line. |
| 143 | |
| 144 | *zb* |
| 145 | zb Like "z-", but leave the cursor in the same column. |
| 146 | {not in Vi} |
| 147 | |
| 148 | ============================================================================== |
| 149 | 4. Scrolling horizontally *scroll-horizontal* |
| 150 | |
| 151 | For the following four commands the cursor follows the screen. If the |
| 152 | character that the cursor is on is moved off the screen, the cursor is moved |
| 153 | to the closest character that is on the screen. The value of 'sidescroll' is |
| 154 | not used. |
| 155 | |
| 156 | z<Right> or *zl* *z<Right>* |
Bram Moolenaar | 146522e | 2005-12-16 21:55:46 +0000 | [diff] [blame] | 157 | zl Move the view on the text [count] characters to the |
| 158 | right, thus scroll the text [count] characters to the |
| 159 | left. This only works when 'wrap' is off. {not in |
| 160 | Vi} |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 161 | |
| 162 | z<Left> or *zh* *z<Left>* |
Bram Moolenaar | 146522e | 2005-12-16 21:55:46 +0000 | [diff] [blame] | 163 | zh Move the view on the text [count] characters to the |
| 164 | left, thus scroll the text [count] characters to the |
| 165 | right. This only works when 'wrap' is off. {not in |
| 166 | Vi} |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 167 | |
| 168 | *zL* |
Bram Moolenaar | 146522e | 2005-12-16 21:55:46 +0000 | [diff] [blame] | 169 | zL Move the view on the text half a screenwidth to the |
| 170 | right, thus scroll the text half a screenwidth to the |
| 171 | left. This only works when 'wrap' is off. {not in |
| 172 | Vi} |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 173 | |
| 174 | *zH* |
Bram Moolenaar | 146522e | 2005-12-16 21:55:46 +0000 | [diff] [blame] | 175 | zH Move the view on the text half a screenwidth to the |
| 176 | left, thus scroll the text half a screenwidth to the |
| 177 | right. This only works when 'wrap' is off. {not in |
| 178 | Vi} |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 179 | |
| 180 | For the following two commands the cursor is not moved in the text, only the |
| 181 | text scrolls on the screen. |
| 182 | |
| 183 | *zs* |
Bram Moolenaar | 146522e | 2005-12-16 21:55:46 +0000 | [diff] [blame] | 184 | zs Scroll the text horizontally to position the cursor |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 185 | at the start (left side) of the screen. This only |
| 186 | works when 'wrap' is off. {not in Vi} |
| 187 | |
| 188 | *ze* |
Bram Moolenaar | 146522e | 2005-12-16 21:55:46 +0000 | [diff] [blame] | 189 | ze Scroll the text horizontally to position the cursor |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 190 | at the end (right side) of the screen. This only |
| 191 | works when 'wrap' is off. {not in Vi} |
| 192 | |
| 193 | ============================================================================== |
| 194 | 5. Scrolling synchronously *scroll-binding* |
| 195 | |
| 196 | Occasionally, it is desirable to bind two or more windows together such that |
Bram Moolenaar | 06b5d51 | 2010-05-22 15:37:44 +0200 | [diff] [blame] | 197 | when one window is scrolled, the other windows are also scrolled. In Vim, |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 198 | windows can be given this behavior by setting the (window-specific) |
| 199 | 'scrollbind' option. When a window that has 'scrollbind' set is scrolled, all |
| 200 | other 'scrollbind' windows are scrolled the same amount, if possible. The |
| 201 | behavior of 'scrollbind' can be modified by the 'scrollopt' option. |
| 202 | |
| 203 | When using the scrollbars, the binding only happens when scrolling the window |
| 204 | with focus (where the cursor is). You can use this to avoid scroll-binding |
| 205 | for a moment without resetting options. |
| 206 | |
| 207 | When a window also has the 'diff' option set, the scroll-binding uses the |
| 208 | differences between the two buffers to synchronize the position precisely. |
| 209 | Otherwise the following method is used. |
| 210 | |
| 211 | *scrollbind-relative* |
| 212 | Each 'scrollbind' window keeps track of its "relative offset," which can be |
| 213 | thought of as the difference between the current window's vertical scroll |
| 214 | position and the other window's vertical scroll position. When one of the |
| 215 | 'scrollbind' windows is asked to vertically scroll past the beginning or end |
| 216 | limit of its text, the window no longer scrolls, but remembers how far past |
| 217 | the limit it wishes to be. The window keeps this information so that it can |
| 218 | maintain the same relative offset, regardless of its being asked to scroll |
| 219 | past its buffer's limits. |
| 220 | |
| 221 | However, if a 'scrollbind' window that has a relative offset that is past its |
| 222 | buffer's limits is given the cursor focus, the other 'scrollbind' windows must |
| 223 | jump to a location where the current window's relative offset is valid. This |
Bram Moolenaar | 214641f | 2017-03-05 17:04:09 +0100 | [diff] [blame] | 224 | behavior can be changed by clearing the "jump" flag from the 'scrollopt' |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 225 | option. |
| 226 | |
Bram Moolenaar | c81e5e7 | 2007-05-05 18:24:42 +0000 | [diff] [blame] | 227 | *syncbind* *:syncbind* *:sync* |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 228 | :syncbind Force all 'scrollbind' windows to have the same |
| 229 | relative offset. I.e., when any of the 'scrollbind' |
| 230 | windows is scrolled to the top of its buffer, all of |
| 231 | the 'scrollbind' windows will also be at the top of |
| 232 | their buffers. |
| 233 | |
| 234 | *scrollbind-quickadj* |
| 235 | The 'scrollbind' flag is meaningful when using keyboard commands to vertically |
| 236 | scroll a window, and also meaningful when using the vertical scrollbar of the |
| 237 | window which has the cursor focus. However, when using the vertical scrollbar |
| 238 | of a window which doesn't have the cursor focus, 'scrollbind' is ignored. |
| 239 | This allows quick adjustment of the relative offset of 'scrollbind' windows. |
| 240 | |
| 241 | ============================================================================== |
| 242 | 6. Scrolling with a mouse wheel *scroll-mouse-wheel* |
| 243 | |
| 244 | When your mouse has a scroll wheel, it should work with Vim in the GUI. How |
| 245 | it works depends on your system. It might also work in an xterm |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 246 | |xterm-mouse-wheel|. By default only vertical scroll wheels are supported, |
| 247 | but some GUIs also support horizontal scroll wheels. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 248 | |
| 249 | For the Win32 GUI the scroll action is hard coded. It works just like |
| 250 | dragging the scrollbar of the current window. How many lines are scrolled |
| 251 | depends on your mouse driver. If the scroll action causes input focus |
| 252 | problems, see |intellimouse-wheel-problems|. |
| 253 | |
| 254 | For the X11 GUIs (Motif, Athena and GTK) scrolling the wheel generates key |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 255 | presses <ScrollWheelUp>, <ScrollWheelDown>, <ScrollWheelLeft> and |
| 256 | <ScrollWheelRight>. For example, if you push the scroll wheel upwards a |
| 257 | <ScrollWheelUp> key press is generated causing the window to scroll upwards |
| 258 | (while the text is actually moving downwards). The default action for these |
| 259 | keys are: |
| 260 | <ScrollWheelUp> scroll three lines up *<ScrollWheelUp>* |
| 261 | <S-ScrollWheelUp> scroll one page up *<S-ScrollWheelUp>* |
| 262 | <C-ScrollWheelUp> scroll one page up *<C-ScrollWheelUp>* |
| 263 | <ScrollWheelDown> scroll three lines down *<ScrollWheelDown>* |
| 264 | <S-ScrollWheelDown> scroll one page down *<S-ScrollWheelDown>* |
| 265 | <C-ScrollWheelDown> scroll one page down *<C-ScrollWheelDown>* |
| 266 | <ScrollWheelLeft> scroll six columns left *<ScrollWheelLeft>* |
| 267 | <S-ScrollWheelLeft> scroll one page left *<S-ScrollWheelLeft>* |
| 268 | <C-ScrollWheelLeft> scroll one page left *<C-ScrollWheelLeft>* |
| 269 | <ScrollWheelRight> scroll six columns right *<ScrollWheelRight>* |
| 270 | <S-ScrollWheelRight> scroll one page right *<S-ScrollWheelRight>* |
| 271 | <C-ScrollWheelRight> scroll one page right *<C-ScrollWheelRight>* |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 272 | This should work in all modes, except when editing the command line. |
| 273 | |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 274 | Note that horizontal scrolling only works if 'nowrap' is set. Also, unless |
| 275 | the "h" flag in 'guioptions' is set, the cursor moves to the longest visible |
| 276 | line if the cursor line is about to be scrolled off the screen (similarly to |
| 277 | how the horizontal scrollbar works). |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 278 | |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 279 | You can modify the default behavior by mapping the keys. For example, to make |
| 280 | the scroll wheel move one line or half a page in Normal mode: > |
| 281 | :map <ScrollWheelUp> <C-Y> |
| 282 | :map <S-ScrollWheelUp> <C-U> |
| 283 | :map <ScrollWheelDown> <C-E> |
| 284 | :map <S-ScrollWheelDown> <C-D> |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 285 | You can also use Alt and Ctrl modifiers. |
| 286 | |
| 287 | This only works when Vim gets the scroll wheel events, of course. You can |
| 288 | check if this works with the "xev" program. |
| 289 | |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 290 | When using XFree86, the /etc/XF86Config file should have the correct entry for |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 291 | your mouse. For FreeBSD, this entry works for a Logitech scrollmouse: > |
| 292 | Protocol "MouseMan" |
| 293 | Device "/dev/psm0" |
| 294 | ZAxisMapping 4 5 |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 295 | See the XFree86 documentation for information. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 296 | |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 297 | *<MouseDown>* *<MouseUp>* |
| 298 | The keys <MouseDown> and <MouseUp> have been deprecated. Use <ScrollWheelUp> |
| 299 | instead of <MouseDown> and use <ScrollWheelDown> instead of <MouseUp>. |
| 300 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 301 | *xterm-mouse-wheel* |
| 302 | To use the mouse wheel in a new xterm you only have to make the scroll wheel |
| 303 | work in your Xserver, as mentioned above. |
| 304 | |
| 305 | To use the mouse wheel in an older xterm you must do this: |
| 306 | 1. Make it work in your Xserver, as mentioned above. |
| 307 | 2. Add translations for the xterm, so that the xterm will pass a scroll event |
| 308 | to Vim as an escape sequence. |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 309 | 3. Add mappings in Vim, to interpret the escape sequences as <ScrollWheelDown> |
| 310 | or <ScrollWheelUp> keys. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 311 | |
| 312 | You can do the translations by adding this to your ~.Xdefaults file (or other |
| 313 | file where your X resources are kept): > |
| 314 | |
| 315 | XTerm*VT100.Translations: #override \n\ |
| 316 | s<Btn4Down>: string("0x9b") string("[64~") \n\ |
| 317 | s<Btn5Down>: string("0x9b") string("[65~") \n\ |
| 318 | <Btn4Down>: string("0x9b") string("[62~") \n\ |
| 319 | <Btn5Down>: string("0x9b") string("[63~") \n\ |
| 320 | <Btn4Up>: \n\ |
| 321 | <Btn5Up>: |
| 322 | |
| 323 | Add these mappings to your vimrc file: > |
Bram Moolenaar | 8d9b40e | 2010-07-25 15:49:07 +0200 | [diff] [blame] | 324 | :map <M-Esc>[62~ <ScrollWheelUp> |
| 325 | :map! <M-Esc>[62~ <ScrollWheelUp> |
| 326 | :map <M-Esc>[63~ <ScrollWheelDown> |
| 327 | :map! <M-Esc>[63~ <ScrollWheelDown> |
| 328 | :map <M-Esc>[64~ <S-ScrollWheelUp> |
| 329 | :map! <M-Esc>[64~ <S-ScrollWheelUp> |
| 330 | :map <M-Esc>[65~ <S-ScrollWheelDown> |
| 331 | :map! <M-Esc>[65~ <S-ScrollWheelDown> |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 332 | < |
| 333 | vim:tw=78:ts=8:ft=help:norl: |