333 lines
14 KiB
Text
333 lines
14 KiB
Text
|
*scroll.txt* For Vim version 7.4. Last change: 2006 Aug 27
|
||
|
|
||
|
|
||
|
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.
|
||
|
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.
|
||
|
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:
|
||
|
|
||
|
*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:ft=help:norl:
|