-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathtabpage.jax
484 lines (394 loc) · 22.6 KB
/
tabpage.jax
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
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
*tabpage.txt* For Vim バージョン 9.1. Last change: 2024 Jul 12
VIMリファレンスマニュアル by Bram Moolenaar
タブページの使い方 *tab-page* *tabpage*
タブページを使うために追加されたコマンドについて説明します。複数のタブページを
開いていると違う働きをするコマンドについても説明します。
1. はじめに |tab-page-intro|
2. コマンド |tab-page-commands|
3. その他 |tab-page-other|
4. 'tabline' の設定 |setting-tabline|
5. 'guitablabel' の設定 |setting-guitablabel|
{|+windows| 機能がコンパイル時に無効になっていると、複数のタブページを使用でき
ません}
==============================================================================
1. はじめに *tab-page-intro*
タブページは複数のウィンドウを持てます。タブページを使うと、作業別のウィンドウ
の集合を簡単に切り替えることができます。
通常、Vim ウィンドウの最上部にタブページを表すラベルの一覧が表示されます。その
ラベルをマウスでクリックすると、そのタブページにジャンプできます。他の方法でも
タブページを移動できます。
ほとんどのコマンドは作業中のタブページ内だけで動作します。|CTRL-W| コマンド
や、|:tab| を前置しない |:windo|、|:all|、|:ball| なども同様です。カレントタブ
ページ以外にも作用するコマンドについては以下で説明しています。
タブページを使うと、一時的なバッファを使用するときに、作業中のウィンドウレイア
ウトを変更しなくてすみます。新しいタブページを開いて、何か作業をし、そのタブ
ページを閉じる、という具合です。
==============================================================================
2. コマンド *tab-page-commands*
タブページを開くには:
Vim を "vim -p filename ..." と起動すると、それぞれのファイルごとに (最大
'tabpagemax' までの) タブページを開けます。|-p| 参照。
CUI の Vim でタブページラインをダブルクリックすると新しいタブページが作成され
ます。新しいタブページはクリックした場所の左に作成されます。最初のクリックが他
のタブページの選択になってしまうときは、スクリーンが余計に更新されます。
この機能は Win32 と Motif の GUI でも使えます。ただし、ラベルの右をクリックし
た場合のみです。
GUI でタブページラインを右クリックするとメニューが表示されます。|tabline-menu|
関連する自動コマンドについては、|tabnew-autocmd| を参照してください。
:[count]tabe[dit] *:tabe* *:tabedit* *:tabnew*
:[count]tabnew
カレントタブページの後ろに空のウィンドウを持った新しいタブペー
ジを作成します。[count] が与えられた場合、新しいタブページは
[count] 番目のタブページの後ろに作成され、[count] が省略された
場合はカレントタブページの後ろに作成されます。 >
:tabnew " カレントタブページの後ろに新規タブ
" ページを作成
:.tabnew " 同上
:+tabnew " 右のタブページの後ろに新規タブページ
" を作成
" 注: tabnew よりも1つ右側に作られる
:-tabnew " カレントタブページの前に新規タブ
" ページを作成
:0tabnew " 新規タブページを左端に作成
:$tabnew " 新規タブページを右端に作成
<
:[count]tabe[dit] [++opt] [+cmd] {file}
:[count]tabnew [++opt] [+cmd] {file}
{file} を新しいタブページで開きます。|:edit| と同じです。
[count] については上記 |:tabnew| 参照。
:[count]tabf[ind] [++opt] [+cmd] {file} *:tabf* *:tabfind*
'path' 内の {file} を新しいタブページで開きます。|:find| と同
じです。[count] については上記 |:tabnew| 参照。
:[count]tab {cmd} *:tab*
{cmd} を実行します。そのコマンドが新しいウィンドウを作成すると
きは、その代わりに新しいタブページを作成します。|:diffsplit|と
|:diffpatch|, |:execute|, |:normal| に対しては機能しません。
[count] が与えられた場合、新しいタブページは [count] 番目のタ
ブページの後ろに作成され、[count] が省略された場合はカレントタ
ブページの後ろに作成されます。
例: >
:tab split " 現在のバッファを新規タブで開く
:tab help gt " "gt" に対するヘルプを新規タブで開く
:.tab help gt " 同上
:+tab help " 次のタブページのその次に help のタブ
" ページを開く
:-tab help " 現在のタブの前に help のタブを開く
:0tab help " 最初のタブページの前に help のタブページ
" を開く
:$tab help " 最後のタブページの次に help のタブページ
" を開く
<
CTRL-W gf カーソル下のファイル名のファイルを新しいタブページで開きます。
|CTRL-W_gf| を参照してください。
CTRL-W gF カーソル下のファイル名のファイルを新しいタブページで開きます。
そして、ファイル名の後ろに指定された行番号にジャンプします。
|CTRL-W_gF| を参照してください。
タブページを閉じるには:
複数のタブページを開いているときは、タブページ内の最後のウィンドウを閉じると、
そのタブページが閉じられます。
タブページラインが表示されているときは、右上に表示されている "X" をマウスでク
リックすると、カレントタブページが閉じます。|'tabline'| を設定しているときは、
他の何かが表示されているかもしれません。
*:tabc* *:tabclose*
:tabc[lose][!] カレントタブページを閉じます。
このコマンドは次のときに失敗します:
- タブページが一つしかないとき。 *E784*
- 'hidden' がオフのときに [!] を使わず、バッファに変更があり、
そのバッファを表示しているウィンドウが他にない場合。
バッファの変更はファイルに保存されませんが、失われることもあり
ません。このコマンドは安全なコマンドです。 >
:tabclose " カレントタブページを閉じる
<
:{count}tabc[lose][!]
:tabc[lose][!] {count}
{count} 番目のタブページを閉じます。`:tabclose` と同じ理由で失
敗することがあります。 >
:-tabclose " カレントタブページの前のタブページを
" 閉じる
:+tabclose " カレントタブページの次のタブページを
" 閉じる
:1tabclose " 左端のタブページを閉じる
:$tabclose " 右端のタブページを閉じる
:tabclose -2 " 2つ前のタブページを閉じる
:tabclose + " 次のタブページを閉じる
:tabclose 3 " 3番目のタブページを閉じる
:tabclose $ " 右端のタブページを閉じる
:tabclose # " 最後にアクセスしたタブページを閉じる
タブが閉じられると、次のタブページがカレントタブページになります。この挙動は、
'tabclose' オプションを使用してカスタマイズできます。
*:tabo* *:tabonly*
:tabo[nly][!] カレントタブページ以外のすべてのタブページを閉じます。
オプション 'hidden' がオンのとき、閉じたウィンドウのバッファは
すべて隠しバッファになります。
'hidden' がオフ、'autowrite' がオンのときは、変更のあるバッ
ファはファイルに保存されます。そうでないときは、変更のあるバッ
ファを表示しているウィンドウは閉じません。[!] を指定した場合
は、変更のあるバッファは隠しバッファになります。変更のあるバッ
ファは絶対に破棄されないので、変更を失うことはありません。 >
:tabonly " カレントタブページ以外のすべてのタブ
" ページを閉じる
<
:{count}tabo[nly][!]
{count} のタブページ以外のすべてのタブページを閉じます。 >
:.tabonly " 上に同じ
:-tabonly " カレントタブページの前のタブページ以外を
" 全て閉じる
:+tabonly " カレントタブページの次のタブページ以外を
" 全て閉じる
:1tabonly " 最初のタブページ以外を全て閉じる
:$tabonly " 最後のタブページ以外を全て閉じる
:tabonly - " カレントタブページの前のタブページ以外を
" 全て閉じる
:tabonly +2 " カレントタブページの2つ次のタブページ
" 以外を全て閉じる
:tabonly 1 " 最初のタブページ以外を全て閉じる
:tabonly $ " 最後のタブページ以外を全て閉じる
:tabonly # " 最後にアクセスしたタブページ以外を全て閉
" じる
<
タブページを切り替えるには:
タブページラインが表示されているときは、タブページラベルをマウスでクリックする
と、そのタブページに移動できます。ラベルが表示されていない場所をクリックする
と、次のタブページに移動できます。 |'tabline'|
:tabn[ext] *:tabn* *:tabnext* *gt*
<C-PageDown> *CTRL-<PageDown>* *<C-PageDown>*
gt *i_CTRL-<PageDown>* *i_<C-PageDown>*
次のタブページに移動します。次のタブページがない場合は、最初の
タブページに移動します。
:{count}tabn[ext]
:tabn[ext] {count}
{count} 番目のタブページに移動します。最初のタブページの番号は
1 です。 >
:-tabnext " 前のタブページに移動する
:+tabnext " 次のタブページに移動する
:+2tabnext " 2つ次のタブページに移動する
:1tabnext " 最初のタブページに移動する
:$tabnext " 最後のタブページに移動する
:tabnext $ " 同上
:tabnext # " 最後にアクセスしたタブページに移動する
:tabnext - " 前のタブページに移動する
:tabnext -1 " 同上
:tabnext + " 次のタブページに移動する
:tabnext +1 " 同上
{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} の数だけ前のタブページに移動します。前のタブページがな
い場合は最後のタブページに移動します。 Note: |:tabnext| とは
{count} の使われ方が異なっていて、そちらでは移動先のタブ番号と
して扱われます。
:tabr[ewind] *:tabfir* *:tabfirst* *:tabr* *:tabrewind*
:tabfir[st] 最初のタブページに移動します。
*:tabl* *:tablast*
:tabl[ast] 最後のタブページに移動します。
<C-Tab> *g<Tab>* *CTRL-W_g<Tab>* *<C-Tab>*
g<Tab>
CTRL-W g<Tab> 最後にアクセスしたタブページへ移動します。
その他のコマンド:
*:tabs*
:tabs タブページと、含まれているウィンドウの一覧を表示します。
">" と表示されるのはカレントウィンドウです。
"+" と表示されるのは変更のあるバッファです。
例:
タブページ1 ~
+ tabpage.txt ~
ex_docmd.c ~
タブページ2 ~
> main.c ~
タブページを並べ替えるには:
:tabm[ove] [N] *:tabm* *:tabmove*
:[N]tabm[ove]
カレントタブページを N 番目のタブページの後ろに移動します。カ
レントタブページを1番目のタブページにするにはゼロを指定します。
N は移動前に数えられるので、2番目のタブがカレントタブであれば、
`:tabmove 1` と `:tabmove 2` は効果がありません。
N を省略すると最後に移動します。 >
:.tabmove " 何もしない
:-tabmove " タブページを左に移動
:+tabmove " タブページを右に移動
:0tabmove " タブページを先頭に移動
:tabmove 0 " 同上
:tabmove " タブページを最後尾に移動
:$tabmove " 同上
:tabmove $ " 同上
:tabmove # " 最後にアクセスしたタブページの後ろにタブペー
" ジを移動
<
:tabm[ove] +[N]
:tabm[ove] -[N]
カレントタブページを N 個右 (+ の場合) または左 (- の場合) に
移動します。 >
:tabmove - " タブページを左に移動
:tabmove -1 " 同上
:tabmove + " タブページを右に移動
:tabmove +1 " 同上
<
Note :Ntabmove を使うことでタブを N 番目のタブの後ろに移動することができること
と、:+Ntabmove を使って N 個後ろに移動できることに注意してください。この場合に
+N が何を意味するかについては、|[range]| を参照してください。
タブページごとにコマンドを実行するには:
*:tabd* *:tabdo*
:[range]tabd[o] {cmd}
タブページごと、または [range] が与えられた場合はその範囲のタ
ブページのみにコマンドを実行します。これは次のような動作をしま
す: >
:tabfirst
:{cmd}
:tabnext
:{cmd}
etc.
< このコマンドは各タブページのカレントウィンドウで実行されます。
いずれかのタブページでエラーが起きたときは、その場で実行を中断
します。
最後のタブページ (またはエラーが起きたタブページ) がカレントタ
ブページになります。
{cmd} は '|' を使って複数のコマンドを繋げることができます。
{cmd} はタブページを開いたり閉じたり並べ替えたりしてはいけませ
ん。
|:windo|、|:argdo|、|:bufdo|、|:cdo|、|:ldo|、|:cfdo|、|:lfdo|
も参照してください。
==============================================================================
3. その他 *tab-page-other*
*tabline-menu*
GUI のタブページラインにはポップアップメニューがあります。右クリックで次のメ
ニューが表示されます:
Close マウスポインタの下のタブページを閉じます。マウスがラベ
ルの上にないときは、カレントタブページを閉じます。
New Tab タブページを新規バッファで開きます。マウスポインタの左
側に作成されます。
Open Tab... "New Tab" と同じですが、ファイル選択ダイアログを使っ
て選択したファイルを新しいタブページで開きます。
差分モードはタブページ単位で機能します。一つのタブページ内でファイル間の差分を
表示できます。そして、他のタブページでは他のファイルとの差分を表示することがで
きます。
タブページローカル変数は "t:" で始まります。|tabpage-variable|
現在、タブページローカルなオプションは 'cmdheight' だけです。
*tabnew-autocmd*
自動コマンドイベントの TabLeave と TabEnter を使って、タブページを切り替えると
きにコマンドを実行できます。イベントが起きる正確な順番は何をしたかによって変わ
ります。新しいタブページを作成したときは、例えば、編集中のバッファを新しいウィ
ンドウで開き、それからそのウィンドウで別のバッファを開いたときと同じような動き
をします。つまり、":tabnew" では次の順番でイベントが実行されます:
WinLeave カレントウィンドウから離れる
TabLeave カレントタブページから離れる
WinEnter 新しいタブページのウィンドウに入る
TabEnter 新しいタブページに入る
BufLeave カレントバッファから離れる
BufEnter 新しい空のバッファに入る
タブページを切り替えたときは次の順番です:
BufLeave
WinLeave
TabLeave
TabEnter
WinEnter
BufEnter
==============================================================================
4. 'tabline' の設定 *setting-tabline*
オプション 'tabline' を設定してタブページラベルの表示方法を指定できます。これ
は CUI の タブページラインで使います。
オプション 'showtabline' を設定してタブページラインを表示するかどうかを指定で
きます。表示しない、タブページが複数あるときだけ表示する、常に表示する、から選
べます。
タブページラインの強調表示には TabLine、TabLineSel、TabLineFill が使われます。
|hl-TabLine| |hl-TabLineSel| |hl-TabLineFill|
変更されているウィンドウを含むタブページには "+" が表示されます。タブページ内
のウィンドウの個数も表示されます。よって "3+" という表示は3個のウィンドウを含
む、そのうちの1つが変更されているバッファを含むということを意味します。
オプション '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| にも同じ番号が設定されます。ファイル名を参照するアイテムにはタブペー
ジのカレントウィンドウのものが使われます。
Note: このオプションでは強調表示は使えません。%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()}
Note: この関数はオプションを設定する前に定義しておく必要があります。そうしない
と、関数未定義のエラーが表示されてしまいます。
標準のラベルを使いたい場合は、空文字列を返してください。
あるタブページに固有の何かを表示したいときは、タブページローカル変数 |t:var|
が便利です。
vim:tw=78:ts=8:noet:ft=help:norl: