forked from ma6174/vim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtabpage.cnx
executable file
·336 lines (246 loc) · 12.3 KB
/
tabpage.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
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
*tabpage.txt* For Vim version 7.3. 最近更新: 2010年8月
VIM 参考手册 by Bram Moolenaar
译者: Willis
http://vimcdoc.sf.net
多标签页窗口编辑 *tab-page* *tabpage*
这里解释新加入的处理多标签页的命令。另外,也提供因为和多于一个标签页组合使用而
行为不同的命令的解释。
1. 简介 |tab-page-intro|
2. 命令 |tab-page-commands|
3. 其它项目 |tab-page-other|
4. 设置 'tabline' |setting-tabline|
5. 设置 'guitablabel' |setting-guitablabel|
{Vi 无此功能}
{仅当编译时加入 |+windows| 特性才能使用多标签页}
==============================================================================
1. 简介 *tab-page-intro*
一个标签页容纳一或多个窗口。标签页间很容易切换,这种方式使你可以拥有多个窗口集
合,每个集合做不同的工作。
通常你会在 Vim 窗口顶部看到一组标签的列表,每个标签页一个。用鼠标点击标签可以
跳转到对应的标签页。下面还介绍在其它标签页间移动的方式。
多数命令只能用于当前标签页,其中包括 |CTRL-W| 命令、|:windo|、|:all| 和
|:ball| (除非用 |:tab| 修饰符)。
下面会列出那些能意识到有其它标签页存在的命令。
标签页也是临时编辑某个缓冲区而不用修改当前窗口布局的好方法。只要打开新标签页,
做你想做的事,然后关闭该标签页就可以了。
==============================================================================
2. 命令 *tab-page-commands*
打 开 新 标 签 页:
启动 Vim 时用 "vim -p filename ..." 为每个文件参数打开一个新标签页 (标签页个数
不能超过 'tabpagemax')。见 |-p|
非 GUI 标签页行上双击鼠标打开新的空白标签页。该标签页出现在点击位置的左侧。第
一击可能会先选择不同的标签页,从而导致额外的屏幕刷新。
在一些 GUI 版本上,特别是 Win32 和 Motif,也可以这么用。但必须在所有标签右侧点
击。
GUI 标签页行可以用鼠标右键打开菜单。|tabline-menu|。
:[count]tabe[dit] *:tabe* *:tabedit* *:tabnew*
:[count]tabnew
在当前标签页之后打开带空窗口的新标签页。关于 [count] 见下面的
|:tab|。
:[count]tabe[dit] [++opt] [+cmd] {file}
:[count]tabnew [++opt] [+cmd] {file}
打开新标签页并编辑 {file},其余和 |:edit| 类同。关于 [count]
见下面的 |:tab|。
:[count]tabf[ind] [++opt] [+cmd] {file} *:tabf* *:tabfind*
打开新标签页并编辑 'path' 里的 {file},其余和 |:find| 类同。关
于 [count] 见下面的 |:tab|。
{仅当编译时加入 |+file_in_path| 特性才有效}
:[count]tab {cmd} *:tab*
执行 {cmd},如果它打开新窗口,使用新标签页代替。不能用于
|:diffsplit|、|:diffpatch|、|:execute| 和 |:normal|。
如果省略 [count],标签页出现在当前标签页之后。
如果指定 [count],新标签页出现在第 [count] 个标签页之后。
":0tab cmd" 使新标签页出现在第一个位置。
例如: >
:tab split " 在新标签页上打开当前缓冲区
:tab help gt " 打开标签页显示 "gt" 的帮助
CTRL-W gf 打开新标签页并编辑光标所在的文件名。见 |CTRL-W_gf|。
CTRL-W gF 打开新标签页,编辑光标所在的文件名并转到文件名后的行号上。见
|CTRL-W_gF|。
关 闭 标 签 页:
关闭标签页的最后一个窗口同时也关闭该标签页,除非它是唯一的标签页。
使用鼠标: 如果显示标签页行,点击右上角的 "X" 可以关闭当前标签页。如果使用自定
义的 |'tabline'|,显示内容可能有所不同。
*:tabc* *:tabclose*
:tabc[lose][!] 关闭当前标签页。
如下情形使该命令失败:
- 屏幕上只有一个标签页。 *E784*
- 如果 'hidden' 没有置位,没有 [!],缓冲区有修改,而且该缓冲区
没有其它窗口。
缓冲区的修改不会被写入,也不会丢失。所以这可以说是个 "安全的"
命令。
:tabc[lose][!] {count}
关闭第 {count} 个标签页。失败条件和上面的 ':tabclose' 相同。
*:tabo* *:tabonly*
:tabo[nly][!] 关闭所有其它的标签页。
如果置位 'hidden' 选项,所有关闭窗口的缓冲区成为隐藏。
如果没有置位 'hidden' 但置位 'autowrite' 选项,写回修改过的缓
冲区。否则,包含修改过的缓冲区的窗口不会被删除。但如果给出
[!],这些窗口成为隐藏。修改过的缓冲区永远不会被放弃,所以永远
不被丢失这些改动。
切 换 到 另 一 个 标 签 页:
使用鼠标: 如果显示标签页行,某个标签页标签上单击可以切换到该标签页。没有标签的
地方点击则转到下一个标签页。|'tabline'|
:tabn[ext] *:tabn* *:tabnext* *gt*
<C-PageDown> *CTRL-<PageDown>* *<C-PageDown>*
gt *i_CTRL-<PageDown>* *i_<C-PageDown>*
转到下一个标签页。最后一个标签页则回绕到第一个。
:tabn[ext] {count}
{count}<C-PageDown>
{count}gt 转到第 {count} 个标签页。首个标签页编号为 1。
:tabp[revious] *:tabp* *:tabprevious* *gT* *:tabN*
:tabN[ext] *:tabNext* *CTRL-<PageUp>*
<C-PageUp> *<C-PageUp>* *i_CTRL-<PageUp>* *i_<C-PageUp>*
gT 转到前一个标签页。首个标签页则回绕到最后一个。
:tabp[revious] {count}
:tabN[ext] {count}
{count}<C-PageUp>
{count}gT 转到前面 {count} 个标签页。首个标签页则回绕到最后一个。
:tabr[ewind] *:tabfir* *:tabfirst* *:tabr* *:tabrewind*
:tabfir[st] 转到第一个标签页。
*:tabl* *:tablast*
:tabl[ast] 转到最后一个标签页。
其它命令:
*:tabs*
:tabs 列出标签页和它们包含的窗口。
当前窗口显示 ">"。
修改过的缓冲区显示 "+"。
重 新 排 列 标 签 页:
:tabm[ove] [N] *:tabm* *:tabmove*
把当前标签页移到第 N 个标签页之后。用 0 使当前标签页成为首个标
签页。如果没有 N,当前标签页成为最后一个。
循 环 遍 历 所 有 标 签 页:
*:tabd* *:tabdo*
:tabd[o] {cmd} 对每个标签页执行 {cmd}。
大致相当于: >
:tabfirst
:{cmd}
:tabnext
:{cmd}
等等
< 只对每个标签页的当前窗口进行操作。如果某个标签页出现错误,不再
继续访问其余的标签页。
最后一个标签页 (或任何出错的标签页) 成为当前标签页。
{cmd} 可以包含 '|' 以连接多个命令。
{cmd} 不能打开标签页、关闭标签页或重排标签页。
{Vi 无此功能} {仅当编译时加入 |+listcmds| 特性才有效}
另见 |:windo|、|:argdo| 和 |:bufdo|。
==============================================================================
3. 其它项目 *tab-page-other*
*tabline-menu*
GUI 标签页行提供弹出菜单。用右键点击可以访问。它包含的项目有:
Close 关闭鼠标指针所在的标签页。如果鼠标指针不在任何标签上,
关闭当前标签页。
New Tab 打开新标签页并编辑空缓冲区。该标签页出现在鼠标指针的左
侧。
Open Tab... 类似于 "New Tab",但同时提供文件选择器以选择要编辑的文
件。
每个标签页对 diff 模式进行分别的处理。你可以在一个标签页上比较若干文件。而在另
一个标签页上比较不同的文件。
局部于标签页的变量以 "t:" 开头。|tabpage-variable|
目前只有一个局部于标签页的选项: 'cmdheight'。
TabLeave 和 TabEnter 自动命令事件可以在标签页切换时执行任务。准确的顺序取决于
你做的事情。建立新标签页相当于先建立工作于同一缓冲区的新窗口,再在其上编辑别的
缓冲区。所以,":tabnew" 依次激活:
WinLeave 离开当前窗口
TabLeave 离开当前标签页
TabEnter 进入新标签页
WinEnter 进入新标签页的窗口
BufLeave 离开当前缓冲区
BufEnter 进入新的空白缓冲区
而切换到另一个标签页的相应顺序是:
BufLeave
WinLeave
TabLeave
TabEnter
WinEnter
BufEnter
==============================================================================
4. 设置 'tabline' *setting-tabline*
'tabline' 选项指定标签页行的外观。只有没有 GUI 标签页行时才使用该选项。
用 'showtabline' 选项可以指定何时显示标签页行: 从不、多于一个标签页才显示、总
是。
标签页行的高亮用 TabLine、TabLineSel 和 TabLineFill 分别指定。|hl-TabLine|
|hl-TabLineSel| |hl-TabLineFill|
包含修改过的窗口的标签页会显示 "+"。同时也显示该标签页里包含的窗口数。所以,
"3+" 意味着有三个窗口,其中一个有修改过的缓冲区。
'tabline' 选项允许你定义自己喜欢的标签页标签显示方式。实现并不简单,所以这里给
出一个例子。
基本知识见 'statusline' 选项。'tabline' 选项可以使用相同的项目。此外,还可用
|tabpagebuflist()|、|tabpagenr()| 和 |tabpagewinnr()| 函数。
因为标签页标签的编号可以不同,你可以指定整个选项为一个函数。就像这样: >
:set tabline=%!MyTabLine()
然后定义 MyTabLine() 函数以列出所有标签页标签。一个方便的方式是把该函数分成两
部分: 首先遍历所有的标签页并分别定义它们的标签。然后得到每个标签页的标签。 >
function MyTabLine()
let s = ''
for i in range(tabpagenr('$'))
" 选择高亮
if i + 1 == tabpagenr()
let s .= '%#TabLineSel#'
else
let s .= '%#TabLine#'
endif
" 设置标签页号 (用于鼠标点击)
let s .= '%' . (i + 1) . 'T'
" MyTabLabel() 提供标签
let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
endfor
" 最后一个标签页之后用 TabLineFill 填充并复位标签页号
let s .= '%#TabLineFill#%T'
" 右对齐用于关闭当前标签页的标签
if tabpagenr('$') > 1
let s .= '%=%#TabLine#%999Xclose'
endif
return s
endfunction
现在为每个标签页调用 MyTabLabel() 函数以得到它们的标签。 >
function MyTabLabel(n)
let buflist = tabpagebuflist(a:n)
let winnr = tabpagewinnr(a:n)
return bufname(buflist[winnr - 1])
endfunction
这只是一个产生和缺省值类似的标签页行的简单例子,和缺省的区别是修改过的缓冲区没
有加上 + 号,而名字也没有被截短。如果空间不足,你需要用聪明一些的方法来缩短标
签宽度。 'columns' 选项可以查看可用的空间。
==============================================================================
5. 设置 'guitablabel' *setting-guitablabel*
如果显示 GUI 的标签页行,'guitablabel' 可以用来指定每个标签页显示的标签。和
'tabline' 不同,后者一次指定整个标签页行,而 'guitablabel' 分别指定每个标签。
'guitabtooltip' 与之非常类似,但用来设置同一标签的工具提示。因为只有在鼠标指针
在标签上逗留时它才会出现,所以通常可以长一些。不过,只有部分系统支持。
'statusline' 选项说明本选项值的格式。
用 "%N" 项目可以得到当前的标签页号。计算此选项时,|v:lnum| 变量也设置为该值。
使用文件名的项目引用当前标签页的当前窗口。
注意 此选项不使用语法高亮。也忽略 %T 和 %X 项目。
简单示例,在标签页标签上显示标签页号和缓冲区名: >
:set guitablabel=%N\ %f
模拟 'guitablabel' 缺省值的示例: 显示标签页里的窗口数目,如果有修改过的缓冲
区,显示 '+': >
function GuiTabLabel()
let label = ''
let bufnrlist = tabpagebuflist(v:lnum)
" 如果标签页里有修改过的缓冲区,加上 '+'
for bufnr in bufnrlist
if getbufvar(bufnr, "&modified")
let label = '+'
break
endif
endfor
" 如果标签页里的窗口数目多于一,加上窗口数目
let wincount = tabpagewinnr(v:lnum, '$')
if wincount > 1
let label .= wincount
endif
if label != ''
let label .= ' '
endif
" 附加缓冲区名
return label . bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
endfunction
set guitablabel=%{GuiTabLabel()}
<
注意 设置选项值前就必须已经定义好函数。否则会报错,提示函数未知。
如果你希望回到缺省的标签,返回空字符串。
如果你希望显示标签页特定的内容,可以使用局部于标签页的变量。|t:var|
vim:tw=78:ts=8:ft=help:norl: