scroll

scroll.txt 适用于 Vim 9.2 版本。 最近更新: 2025年3月 VIM 参考手册 by Bram Moolenaar 译者: iCrazy <icrazy@ustc.edu>、tocer 滚屏 scrolling 以下命令用于移动窗口显示的内容。一旦光标移出窗口,窗口会滚动使光标恢复可见 (并 确保其周围有 'scrolloff' 选项指定的上下文行数)。下文中,一页被定义为窗口可见行 数减二。命令的助记符容易引起混淆,请记住命令指的是视窗 (缓冲区可见部分) 在整个 缓冲区里向上还是向下滚动。视窗向上滚动时,窗口文本则相应朝屏幕下方滚动。 基础知识请参考用户手册第 03.7 一节。 1. 下滚视窗 scroll-down 2. 上滚视窗 scroll-up 3. 基于光标位置滚动 scroll-cursor 4. 水平滚动 scroll-horizontal 5. 同步滚屏 scroll-binding 6. 用鼠标滚轮滚屏 scroll-mouse-wheel

1. 下滚视窗 scroll-down

下列命令使编辑视窗 (缓冲区可见部分) 向下滚动 (使缓冲区下方更多的文本行可见): CTRL-E CTRL-E 缓冲区视窗下滚 [count] 行。文本则相应朝屏幕上方滚动。 助记: 额外 (Extra) 行可见。 CTRL-D CTRL-D 缓冲区视窗下滚 'scroll' 指定行 (缺省: 半屏)。[count] 给出时,先将 'scroll' 选项设为 [count] 值,再进行滚 动。光标同步下移相应行数 (有回绕行或到达文件尾时实际行 数可能会有差异)。如果光标已位于缓冲区末行,本命令会失 败并响铃。停留列见 'startofline' 选项。 助记: 向下 (Downwards)。 <S-Down> <S-Down> <kPageDown> <PageDown> <PageDown> CTRL-F <S-CR> <S-CR> <S-NL> <S-+> 或 SHIFT-+ <S-Plus> CTRL-F 缓冲区视窗下滚 [count] 页。停留列见 'startofline' 选 项。 仅有一个窗口时,使用 'window' 选项指定的 "窗口高度"。 助记: 前翻 (Forwards)。 z+ z+ 省略 [count] 时: 重绘使视窗显示下一页内容 (使当前窗口 下方一行置顶)。同时移动光标到该行首个非空白字符。 给出 [count] 时: 同 z<CR>

2. 上滚视窗 scroll-up

下列命令使编辑视窗 (缓冲区可见部分) 向上滚动 (使缓冲区上方更多的文本行可见): CTRL-Y CTRL-Y 缓冲区视窗上滚 [count] 行。文本相应朝屏幕下方滚动。 备注: 使用 MS-Windows 时,CTRL-Y 会被重新映射为重做撤 销操作。 CTRL-U CTRL-U 缓冲区视窗上滚 'scroll' 指定行 (缺省: 半屏)。[count] 给出时,先将 'scroll' 选项设为 [count] 值,再进行滚 动。光标同步上移相行数 (有回绕行或到达文件尾时 (译者注: 当为文件头之误) 实际行数可能会有差异)。如果光 标位于缓冲区首行,本命令会失败并响铃。停留列见 'startofline' 选项。 助记: 向下 (Upwards)。 <S-Up> <S-Up> <kPageUp> <PageUp> <PageUp> CTRL-B <S--> <S-Minus> SHIFT-MINUS CTRL-B 缓冲区视窗上滚 [count] 页。停留列见 'startofline' 选 项。 仅有一个窗口时,使用 'window' 选项指定的 "窗口高度"。 助记: 后翻 (Backwards)。 z^ z^ 省略 [count] 时: 重绘使视窗显示上一页内容 (使窗口上方 一行置底)。同时移动光标到该行首个非空白字符。 偷出 [count] 时: 先滚动文本使缓冲区第 [count] 行置底, 再重绘使顶行置底。同时移动光标到该行首个非空白字符。 (译者注: 可视作 [count] 缺省值为当前窗口倒数第二行)

3. 基于光标位置滚动 scroll-cursor

下列命令重新定位编辑视窗 (缓冲区可见部分),光标所在文本行保持不变。 注意 'scrolloff' 选项会让光标上下额外停留指定行数上下文。 z<CR> z<CR> 重绘,使第 [count] 行显示在窗口顶端 (缺省光标所在行)。 光标停留在该行首个非空白字符上。 zt zt 类似 z<CR> ,但保持光标列不变。 zN<CR> z{height}<CR> 重设窗口高度为 {height} 行。适合屏幕刷新卡顿时缩小窗口 行数以提升效率。{height} 不能超过实际屏幕最大高度。 z. z. 重绘,使第 [count] 行显示在窗口正中央 (缺省光标所在 行)。光标停留在该行首个非空白字符上。 zz zz 类似 z. ,但保持光标列不变。 警告: 如果打开大写锁定键 (caps-lock),容易误输入为 ZZ : 保存缓冲区并退出 Vim! z- z- 重绘,使第 [count] 行显示在窗口底部 (缺省光标所在行)。 光标停留在该行首个非空白字符上。 zb zb 类似 z- ,但保持光标列不变。

4. 水平滚动 scroll-horizontal

以下前四条命令中,光标跟随视窗移动。光标滚出屏幕后,会移动到屏幕上离原先位置最 近的字符上。这些命令不受 'sidescroll' 选项值影响。 z<Right> zl z<Right> zl 文本视窗向右平移 [count] 个字符,文本相应朝屏幕左方移 动 [count] 个字符。仅当 'wrap' 关闭时有效。 z<Left> zh z<Left> zh 文本视窗向左平移 [count] 个字符,文本相应朝屏幕右方移 动 [count] 个字符。仅当 'wrap' 关闭时有效。 zL zL 文本视窗向右平移半个屏幕宽度,文本相应向左移动半屏宽。 仅当 'wrap' 关闭时有效。 zH zH 文本视窗向左平移半个屏幕宽度,文本相应向右移动半屏宽。 仅当 'wrap' 关闭时有效。 以下两条命令仅平移视窗,光标所在位置保持不变。 zs zs 平移文本视窗,使光标所在字符置于屏幕最左侧。仅当 'wrap' 关闭时有效。 ze ze 平移文本视窗,使光标所在字符置于屏幕最右侧。仅当 'wrap' 关闭时有效。

5. 同步滚屏 scroll-binding

有时需要绑定两或多个窗口,其中一个窗口滚屏时,其他绑定窗口会同步滚动。Vim 中, 可通过设置窗口局部 'scrollbind' 选项开启滚屏绑定。开启后,置位 'scrollbind' 选 项的窗口滚屏时,其他置位 'scrollbind' 选项的窗口会尽量同步滚动距离。滚屏绑定具 体行为可通过 'scrollopt' 选项调整。 使用滚动条或鼠标滚轮时,仅当滚动的窗口是焦点窗口 (光标所在窗口) 才会触发联动。 可借此暂时跳过绑定滚屏,无需修改选项。 窗口同时开启 'diff' 选项时,滚屏绑定会利用两个缓冲区间的差异文本精确对齐位置。 否则,采用以下方式: scrollbind-relative 每个联动窗口都会记录 "相对偏移",可视为当前窗口和其他窗口在垂直滚屏位置上的位 置差异。某个联动窗口垂直滚动出文本的首尾边界时,窗口本身不再继续滚动,但会记住 超出的偏移值,以维持整体相对偏移关系。 但当带越界偏移的窗口获得光标焦点时,其他联动窗口必须根据与焦点窗口的相对偏移进 行跳转,确保焦点窗口的相对偏移量合法。可通过清除 'scrollopt' 选项中的 "jump" 标志位来关闭该自动跳转行为。 syncbind :syncbind :sync :syncbind 强制所有 'scrollbind' 窗口同步其相对偏移量。即: 任意一 个联动窗口滚动到窗口顶部时,其他联动窗口也会滚动到其顶 部。 scrollbind-quickadj 'scrollbind' 机制对垂直滚动键盘命令和在焦点窗口内的垂直滚动条或鼠标滚轮有效。 而对非焦点窗口内的垂直滚动条或鼠标滚轮不生效。利用该特性可快速微调联动窗口之间 的相对偏移量。

6. 用鼠标滚轮滚屏 scroll-mouse-wheel

GUI Vim 缺省支持鼠标滚轮。具体工作方式因系统而异。部分终端 (xterm) 也可启用, 见 xterm-mouse-wheel 。缺省只支持垂直滚轮,但有些 GUI 额外支持水平滚轮。 MS-Windows 上,如果滚屏引发输入焦点异常,可见 intellimouse-wheel-problems 。 Win32 和 X11 GUI (Motif 和 GTK) 上,滚轮滚动会分别被映射为 <ScrollWheelDown><ScrollWheelUp><ScrollWheelLeft><ScrollWheelRight> 按键事件。其具体缺省 行为如下: <ScrollWheelUp> 向上滚动 N 行 <ScrollWheelUp> <S-ScrollWheelUp> 向上滚动一页 <S-ScrollWheelUp> <C-ScrollWheelUp> 向上滚动一页 <C-ScrollWheelUp> <ScrollWheelDown> 向下滚动 N 行 <ScrollWheelDown> <S-ScrollWheelDown> 向下滚动一页 <S-ScrollWheelDown> <C-ScrollWheelDown> 向下滚动一页 <C-ScrollWheelDown> <ScrollWheelLeft> 向左平移 N 列 <ScrollWheelLeft> <S-ScrollWheelLeft> 向左平移一屏 <S-ScrollWheelLeft> <C-ScrollWheelLeft> 向左平移一屏 <C-ScrollWheelLeft> <ScrollWheelRight> 向右平移 N 列 <ScrollWheelRight> <S-ScrollWheelRight> 向右平移一屏 <S-ScrollWheelRight> <C-ScrollWheelRight> 向右平移一屏 <C-ScrollWheelRight> 适用于除命令行模式外的所有模式。 N 值取决于系统。Vim 垂直滚轮缺省滚动三行,水平滚轮缺省平移六列。MS-Windows 上 会读取系统全局鼠标滚轮设置。 注意 水平滚轮仅当 'nowrap' 置位 (关闭回绕) 时可用。此外,'guioptions' 不含 "h" 标志位 ( go-h ) 且光标行即将被滚出屏幕时,光标会自动跳转到窗口中最长的可见行 (和水平滚动条行为一致)。 可通过键盘映射改变缺省行为。例如,要在普通模式下,滚轮一次滚动一行或半页: :map <ScrollWheelUp> <C-Y> :map <S-ScrollWheelUp> <C-U> :map <ScrollWheelDown> <C-E> :map <S-ScrollWheelDown> <C-D> 也可搭配 Alt 和 Ctrl 修饰符。 当然这一切的前提是 Vim 能够获取滚动事件。可通过 "xev" 工具 (X11 GUI) 验证。 mouse-scrolling-off 要关闭鼠标滚轮 (例如误触碰触控板上导致异常滚动),可如此关闭: :map <ScrollWheelDown> <Nop> :map! <ScrollWheelDown> <Nop> :map <ScrollWheelUp> <Nop> :map! <ScrollWheelUp> <Nop> :map <ScrollWheelLeft> <Nop> :map! <ScrollWheelLeft> <Nop> :map <ScrollWheelRight> <Nop> :map! <ScrollWheelRight> <Nop> 使用 XFree86 时,需要在文件 /etc/XF86Config 中正确配置鼠标项。例如,以下条目可 用于在 FreeBSD 下配置罗技滚轮鼠标: Protocol "MouseMan" Device "/dev/psm0" ZAxisMapping 4 5 详细配置方法请查阅 XFree86 官方文档。 <MouseDown> <MouseUp> <MouseDown><MouseUp> 键记法已废弃。请用 <ScrollWheelUp> 代替 <MouseDown>, 用 <ScrollWheelDown> 代替 <MouseUp> xterm-mouse-wheel 对于新版 xterm,只要通过以上配置在 X 服务器上正常使用滚轮,即可直接使用。 对于旧版 xterm,还需要以下步骤: 1. 如上所述正确配置 X 服务器。 2. 修改 xterm 资源配置,将滚轮事件先翻译为键盘转义序列再发送给 Vim。 3. 在 Vim 中添加映射,将转义序列识别为 <ScrollWheelDown><ScrollWheelUp> 键。 可在 ~.Xdefaults 文件 (或其他 X 资源配置文件) 中加入以下转义序列: 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>: 然后,在 vimrc 里加入以下映射: :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: