forked from ma6174/vim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscroll.cnx
executable file
·290 lines (231 loc) · 13.3 KB
/
scroll.cnx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
*scroll.txt* For Vim version 7.3. 最近更新: 2010年7月
Vim 参考手册 作者:Bram Moolenaar
译者: iCrazy <[email protected]>,tocer http://vimcdoc.sf.net
滚屏 *scrolling*
这些命令是用来移动窗口中的内容的。如果光标的位置移出了窗口,那么它会带动窗口的
内容移动几行 (行数由 'scrolloff' 选项指定),使光标回到窗口里。这里,我们定义一
页为窗口的行数减 2。下面这些命令的助记符甚易混淆。请记住这些命令所指的是视窗
(缓冲区中您可以看到的那一部分) 在缓冲区里向上移动还是向下移动。当窗口在缓冲区
里向上移动的时候,窗口中的文字朝您屏幕的下方移动。
请参阅用户手册的第 |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。
{Vi: Vim 滚动 'scroll' 屏幕行,而不是文件行;有行回绕
时两者会有差异}
<S-Down> 或 *<S-Down>* *<kPageDown>*
<PageDown> 或 *<PageDown>* *CTRL-F*
CTRL-F 使窗口在缓冲区中向下滚动 [count] 页。
参看 'startofline' 选项。
如果只有一个窗口,可能使用 'windows' 选项的值。
助记: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。
{Vi: Vim 滚动 'scroll' 屏幕行,而不是文件行;有行回绕
时两者会有差异}
<S-Up> 或 *<S-Up>* *<kPageUp>*
<PageUp> 或 *<PageUp>* *CTRL-B*
CTRL-B 使窗口在缓冲区中向上滚动 [count] 页。
参看 'startofline' 选项。
如果只有一个窗口,可能使用 'windows' 选项的值。
助记:Backwards。
*z^*
z^ 不指定 [count]: 重绘,在窗口中显示上一页的内容 (使当前
窗口之上的一行显示在窗口最下方)。同时把光标放在那一行
第一个非空白字符上。
指定 [count]: 先滚动文本,使得缓冲区第 [count] 行显示
在窗口底部,然后重绘,使得当时处于窗口顶端的文本显示在
窗口的底部。同时把光标放在那一行第一个非空白字符上。
==============================================================================
3. 相对于光标滚屏 *scroll-cursor*
以下的命令重新定位编辑视窗 (缓冲区中您可以看到的那一部分),但仍维持光标留在当
前行。
*z<CR>*
z<CR> 重绘,使第 [count] 行显示在窗口顶端 (默认为光标所在的
行)。光标停留在那一行第一个非空白字符上。
*zt*
zt 类似 "z<CR>",不过光标停留在相同的列上。{Vi 无此功能}
*zN<CR>*
z{height}<CR> 重绘,使得窗口有 {height} 行高。当屏幕刷新速度很慢的时
候,这对减少行数很有用。不能使窗口的高度超过屏幕的实际
高度。
*z.*
z. 重绘,使第 [count] 行显示在窗口中部 (默认为光标所在的
行)。光标停留在那一行第一个非空白字符上。
*zz*
zz 类似 "z.",不过光标停留在相同的列上。注意:如果打开了
caps-lock,这个命令就变成了 "ZZ":写缓冲区并退出!
{Vi 无此功能}
*z-*
z- 重绘,使第 [count] 行显示在窗口底部 (默认为光标所在的
行)。光标停留在那一行第一个非空白字符上。
*zb*
zb 类似 "z-",不过光标停留在相同的列上。{Vi 无此功能}
==============================================================================
4. 水平滚动 *scroll-horizontal*
使用以下四个命令时,鼠标会跟随屏幕而移动。如果光标移出了屏幕,它就会落在屏幕中
距它最近的那个字符上。忽略 'sidescroll' 选项的值。
z<Right> 或 *zl* *z<Right>*
zl 使文本视图向右移动 [count] 个字符,也就是使文本向左滚
动 [count] 个字符。仅当 'wrap' 为关时有效。
{Vi 无此功能}
z<Left> 或 *zh* *z<Left>*
zh 使文本视图向左移动 [count] 个字符,也就是使文本向右滚
动 [count] 个字符。仅当 'wrap' 为关时有效。
{Vi 无此功能}
*zL*
zL 使文本视图向右移动半个屏幕宽度,也就是使文本向左滚动半
个屏幕宽度。仅当 'wrap' 为关时有效。{Vi 无此功能}
*zH*
zH 使文本视图向左移动半个屏幕宽度,也就是使文本向右滚动半
个屏幕宽度。仅当 'wrap' 为关时有效。{Vi 无此功能}
以下两个命令仅仅在屏幕上滚动文本,光标不会移动。
*zs*
zs 水平滚动文本,使光标置于屏幕的开始处 (最左侧)。仅当
'wrap' 为关时有效。{Vi 无此功能}
*ze*
ze 水平滚动文本,使光标置于屏幕的结束处 (最右侧)。仅当
'wrap' 为关时有效。{Vi 无此功能}
==============================================================================
5. 同步滚屏 *scroll-binding*
有时候,我们希望将两个或多个窗口绑在一起,这样,在一个窗口滚屏时,其他的窗口都
会跟着一起滚屏。在 Vim 中,可以通过设置针对不同窗口的 'scrollbind' 选项来达到
这个目的。当一个置位 'scrollbind' 选项的窗口滚屏时,其它置位 'scrollbind' 选项
的窗口会同步滚屏 (如果可能的话)。选项 'scrollbind' 的行为通过 'scrollopt' 选项
可以修改。
使用滚动条时进行滚动时,只有带焦点的窗口 (光标所在的窗口) 才会执行绑定。因而,
不用复位选项,您也可以在一段时间内避免滚动绑定的发生。
如果一个窗口还置位了 'diff' 选项,则滚屏绑定利用 2 个缓冲区中的差异来精确同步
它们的位置。否则,将会使用下面的方式:
*scrollbind-relative*
每一个置位了 'scrollbind' 的窗口都会记录它的 "相对偏移",可以把它看作当前窗口
和另一个窗口垂直滚屏位置上的差异。当一个置位了 'scrollbind' 的窗口被要求进行超
越其文本的开始和结束极限的滚屏时,这个窗口不再继续滚屏,但是它会记住超过极限的
数量。窗口记住了这些信息是为了将来能维持同样的相对偏移,不管是否曾经被要求过进
行超过其极限的滚屏。
但是,当一个置位了 'scrollbind' 且具有一个超过其缓冲区极限的相对偏移的窗口获得
了光标焦点的时候,其他置位了 'scrollbind' 的窗口就必须根据当前窗口的相对偏移,
跳转到相应的位置。这种行为可以通过清除 'scrollopt' 选项中的 'jump' 标志位来改
变。
*syncbind* *:syncbind* *:sync*
:syncbind 强制所有 'scrollbind' 窗口具有相同的相对偏移。即:当
一个窗口滚屏到了它缓冲区的顶部时,所有的 'scrollbind'
窗口都会滚屏到它们缓冲区的顶部。
*scrollbind-quickadj*
当使用键盘命令来垂直的滚动一个窗口,或用垂直滚动条来滚动一个具有光标焦点的窗口
时, 'scrollbind' 标志是起作用的。但是,当用垂直滚动条来滚动一个不具有光标焦点
的窗口时,'scrollbind' 标志被忽略。这样就可以对 'scrollbind' 窗口的相对偏移量
进行快速的调整。
==============================================================================
6. 用鼠标滚轮滚屏 *scroll-mouse-wheel*
当您的鼠标有一个滚轮时,它在 GUI 方式下的 Vim 中应该可以正常工作。它怎么工作取
决于您的系统。它在 xterm 中也可能可以工作,参见:|xterm-mouse-wheel|。缺省只支
持垂直滚轮,但有些 GUI 也支持横向滚轮。
Win32 GUI 的滚动功能是通过硬编码实现的。它的效果就像在拖曳当前窗口的滚动条。具
体滚多少行取决于您的鼠标驱动程序。如果滚屏功能造成了输入焦点的问题,请看:
|intellimouse-wheel-problems|。
而对 X11 GUI (Motif、Athena 和 GTK) 而言,滚动滚轮产生 <ScrollWheelDown>、
<ScrollWheelUp>、<ScrollWheelLeft> 和 <ScrollWheelRight> 的按键动作。这些键的
默认行为如下:
<ScrollWheelUp> 向上滚动三行 *<ScrollWheelUp>*
<S-ScrollWheelUp> 向上滚动一页 *<S-ScrollWheelUp>*
<C-ScrollWheelUp> 向上滚动一页 *<C-ScrollWheelUp>*
<ScrollWheelDown> 向下滚动三行 *<ScrollWheelDown>*
<S-ScrollWheelDown> 向下滚动一页 *<S-ScrollWheelDown>*
<C-ScrollWheelDown> 向下滚动一页 *<C-ScrollWheelDown>*
<ScrollWheelLeft> 向左滚动六列 *<ScrollWheelLeft>*
<S-ScrollWheelLeft> 向左滚动一页 *<S-ScrollWheelLeft>*
<C-ScrollWheelLeft> 向左滚动一页 *<C-ScrollWheelLeft>*
<ScrollWheelRight> 向右滚动六列 *<ScrollWheelRight>*
<S-ScrollWheelRight> 向右滚动一页 *<S-ScrollWheelRight>*
<C-ScrollWheelRight> 向右滚动一页 *<C-ScrollWheelRight>*
它们应该适用于所有模式,编辑命令行时除外。
注意 仅当 'nowrap' 置位时横向滚动可用。此外,除非 'guioptions' 设置了 "h" 标志
位,如果光标行将要滚动到屏幕之外,移动光标到最长的可见行 (和横向滚动条的工作方
式类似)。
您可以通过键盘映射来改变缺省行为。例如,要使得普通模式下滚轮一次滚动一行或半
页: >
:map <ScrollWheelUp> <C-Y>
:map <S-ScrollWheelUp> <C-U>
:map <ScrollWheelDown> <C-E>
:map <S-ScrollWheelDown> <C-D>
您也可以使用 Alt 和 Ctrl 修饰符。
自然,这些功能仅在 Vim 可以获取滚动事件时才可以使用。您可以使用 "xev" 程序来确
定这些是否功能有效。
当您使用 XFree86 时,文件 /etc/XF86Config 中必须有匹配您使用的鼠标的正确条目。
就 FreeBSD 来说,这个条目适用于一款罗技滚轮鼠标: >
Protocol "MouseMan"
Device "/dev/psm0"
ZAxisMapping 4 5
欲了解更多的信息,请看 XFree86 的文档。
*<MouseDown>* *<MouseUp>*
<MouseDown> 和 <MouseUp> 键已废弃。用 <ScrollWheelUp> 来代替 <MouseDown>,
<ScrollWheelDown> 来代替 <MouseUp>。
*xterm-mouse-wheel*
如前所述,您仅需要使滚轮鼠标在您的 Xserver 上工作正常,它就可以在一个新的
xterm 中工作。
为了在一个老的 xterm 中使用您的滚轮,您需要做以下工作:
1. 如前所述,使它在您的 Xserver 上工作正常。
2. 给 xterm 添加转换,使得 xterm 可以用转义序列 (escape sequence) 来传递一个滚
屏事件。
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:ft=help:norl: