Mercurial > vim
annotate runtime/doc/tabpage.txt @ 34548:db67c09ccd53 v9.1.0175
patch 9.1.0175: wrong window positions with 'winfix{width,height}'
Commit: https://github.com/vim/vim/commit/5866bc3a0f54115d5982fdc09bdbe4c45069265a
Author: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Date: Wed Mar 13 20:17:24 2024 +0100
patch 9.1.0175: wrong window positions with 'winfix{width,height}'
Problem: winframe functions incorrectly recompute window positions if
the altframe wasn't adjacent to the closed frame, which is
possible if adjacent windows had 'winfix{width,height}' set.
Solution: recompute for windows within the parent of the altframe and
closed frame. Skip this (as before) if the altframe was
top/left, but only if adjacent to the closed frame, as
positions won't change in that case. Also correct the return
value documentation for win_screenpos. (Sean Dewar)
The issue revealed itself after removing the win_comp_pos call below
winframe_restore in win_splitmove. Similarly, wrong positions could result from
windows closed in other tabpages, as win_free_mem uses winframe_remove (at least
until it is entered later, where enter_tabpage calls win_comp_pos).
NOTE: As win_comp_pos handles only curtab, it's possible via other means for
positions in non-current tabpages to be wrong (e.g: after changing 'laststatus',
'showtabline', etc.). Given enter_tabpage recomputes it, maybe it's intentional
as an optimization? Should probably be documented in win_screenpos then, but I
won't address that here.
closes: #14191
Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 13 Mar 2024 20:30:03 +0100 |
parents | 4635e43f2c6f |
children | ceee63c7f7aa |
rev | line source |
---|---|
34057
4635e43f2c6f
patch 9.1.0000: Vim 9.1 release
Christian Brabandt <cb@256bit.org>
parents:
29853
diff
changeset
|
1 *tabpage.txt* For Vim version 9.1. Last change: 2022 Feb 02 |
674 | 2 |
3 | |
4 VIM REFERENCE MANUAL by Bram Moolenaar | |
5 | |
6 | |
675 | 7 Editing with windows in multiple tab pages. *tab-page* *tabpage* |
674 | 8 |
9 The commands which have been added to use multiple tab pages are explained | |
10 here. Additionally, there are explanations for commands that work differently | |
11 when used in combination with more than one tab page. | |
12 | |
678 | 13 1. Introduction |tab-page-intro| |
14 2. Commands |tab-page-commands| | |
15 3. Other items |tab-page-other| | |
16 4. Setting 'tabline' |setting-tabline| | |
686 | 17 5. Setting 'guitablabel' |setting-guitablabel| |
674 | 18 |
19 {not able to use multiple tab pages when the |+windows| feature was disabled | |
20 at compile time} | |
21 | |
22 ============================================================================== | |
23 1. Introduction *tab-page-intro* | |
24 | |
25 A tab page holds one or more windows. You can easily switch between tab | |
26 pages, so that you have several collections of windows to work on different | |
27 things. | |
28 | |
29 Usually you will see a list of labels at the top of the Vim window, one for | |
30 each tab page. With the mouse you can click on the label to jump to that tab | |
31 page. There are other ways to move between tab pages, see below. | |
32 | |
33 Most commands work only in the current tab page. That includes the |CTRL-W| | |
698 | 34 commands, |:windo|, |:all| and |:ball| (when not using the |:tab| modifier). |
35 The commands that are aware of other tab pages than the current one are | |
36 mentioned below. | |
674 | 37 |
38 Tabs are also a nice way to edit a buffer temporarily without changing the | |
39 current window layout. Open a new tab page, do whatever you want to do and | |
40 close the tab page. | |
41 | |
42 ============================================================================== | |
43 2. Commands *tab-page-commands* | |
44 | |
45 OPENING A NEW TAB PAGE: | |
46 | |
47 When starting Vim "vim -p filename ..." opens each file argument in a separate | |
2326
6e563e1c8033
Make it possible to drag a tab page label to another position. (Paul B. Mahol)
Bram Moolenaar <bram@vim.org>
parents:
2154
diff
changeset
|
48 tab page (up to 'tabpagemax'). See |-p| |
674 | 49 |
706 | 50 A double click with the mouse in the non-GUI tab pages line opens a new, empty |
51 tab page. It is placed left of the position of the click. The first click | |
52 may select another tab page first, causing an extra screen update. | |
53 | |
844 | 54 This also works in a few GUI versions, esp. Win32 and Motif. But only when |
55 clicking right of the labels. | |
56 | |
706 | 57 In the GUI tab pages line you can use the right mouse button to open menu. |
58 |tabline-menu|. | |
682 | 59 |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
10198
diff
changeset
|
60 For the related autocommands see |tabnew-autocmd|. |
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
10198
diff
changeset
|
61 |
2444
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
62 :[count]tabe[dit] *:tabe* *:tabedit* *:tabnew* |
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
63 :[count]tabnew |
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
64 Open a new tab page with an empty window, after the current |
6398 | 65 tab page. If [count] is given the new tab page appears after |
66 the tab page [count] otherwise the new tab page will appear | |
67 after the current one. > | |
68 :tabnew " opens tabpage after the current one | |
69 :.tabnew " as above | |
70 :+tabnew " opens tabpage after the next tab page | |
71 " note: it is one further than :tabnew | |
72 :-tabnew " opens tabpage before the current one | |
73 :0tabnew " opens tabpage before the first one | |
74 :$tabnew " opens tabpage after the last one | |
674 | 75 |
2444
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
76 :[count]tabe[dit] [++opt] [+cmd] {file} |
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
77 :[count]tabnew [++opt] [+cmd] {file} |
674 | 78 Open a new tab page and edit {file}, like with |:edit|. |
6398 | 79 For [count] see |:tabnew| above. |
674 | 80 |
2444
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
81 :[count]tabf[ind] [++opt] [+cmd] {file} *:tabf* *:tabfind* |
674 | 82 Open a new tab page and edit {file} in 'path', like with |
6398 | 83 |:find|. For [count] see |:tabnew| above. |
674 | 84 |
682 | 85 :[count]tab {cmd} *:tab* |
86 Execute {cmd} and when it opens a new window open a new tab | |
1118 | 87 page instead. Doesn't work for |:diffsplit|, |:diffpatch|, |
88 |:execute| and |:normal|. | |
9927
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
89 If [count] is given the new tab page appears after the tab |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
90 page [count] otherwise the new tab page will appear after the |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
91 current one. |
2444
3fbd9bce03f1
Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents:
2413
diff
changeset
|
92 Examples: > |
9927
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
93 :tab split " opens current buffer in new tab page |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
94 :tab help gt " opens tab page with help for "gt" |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
95 :.tab help gt " as above |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
96 :+tab help " opens tab page with help after the next |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
97 " tab page |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
98 :-tab help " opens tab page with help before the |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
99 " current one |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
100 :0tab help " opens tab page with help before the |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
101 " first one |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
102 :$tab help " opens tab page with help after the last |
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
103 " one |
682 | 104 |
820 | 105 CTRL-W gf Open a new tab page and edit the file name under the cursor. |
106 See |CTRL-W_gf|. | |
107 | |
839 | 108 CTRL-W gF Open a new tab page and edit the file name under the cursor |
109 and jump to the line number following the file name. | |
110 See |CTRL-W_gF|. | |
674 | 111 |
112 CLOSING A TAB PAGE: | |
113 | |
682 | 114 Closing the last window of a tab page closes the tab page too, unless there is |
115 only one tab page. | |
674 | 116 |
117 Using the mouse: If the tab page line is displayed you can click in the "X" at | |
682 | 118 the top right to close the current tab page. A custom |'tabline'| may show |
119 something else. | |
674 | 120 |
121 *:tabc* *:tabclose* | |
122 :tabc[lose][!] Close current tab page. | |
123 This command fails when: | |
124 - There is only one tab page on the screen. *E784* | |
125 - When 'hidden' is not set, [!] is not used, a buffer has | |
126 changes, and there is no other window on this buffer. | |
127 Changes to the buffer are not written and won't get lost, so | |
6398 | 128 this is a "safe" command. > |
129 :tabclose " close the current tab page | |
674 | 130 |
6398 | 131 :{count}tabc[lose][!] |
674 | 132 :tabc[lose][!] {count} |
3750 | 133 Close tab page {count}. Fails in the same way as `:tabclose` |
6398 | 134 above. > |
135 :-tabclose " close the previous tab page | |
136 :+tabclose " close the next tab page | |
137 :1tabclose " close the first tab page | |
138 :$tabclose " close the last tab page | |
29290 | 139 :tabclose -2 " close the 2nd previous tab page |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
140 :tabclose + " close the next tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
141 :tabclose 3 " close the third tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
142 :tabclose $ " close the last tab page |
21727
860cad58f557
patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents:
21703
diff
changeset
|
143 :tabclose # " close the last accessed tab page |
27537 | 144 |
145 When a tab is closed the next tab page will become the current one. | |
146 | |
674 | 147 *:tabo* *:tabonly* |
148 :tabo[nly][!] Close all other tab pages. | |
149 When the 'hidden' option is set, all buffers in closed windows | |
150 become hidden. | |
151 When 'hidden' is not set, and the 'autowrite' option is set, | |
152 modified buffers are written. Otherwise, windows that have | |
153 buffers that are modified are not removed, unless the [!] is | |
154 given, then they become hidden. But modified buffers are | |
6398 | 155 never abandoned, so changes cannot get lost. > |
156 :tabonly " close all tab pages except the current | |
9927
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
157 " one |
6398 | 158 |
159 :{count}tabo[nly][!] | |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
160 :tabo[nly][!] {count} |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
161 Close all tab pages except {count} one. > |
9927
e1a8b2601fe0
commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
162 :.tabonly " as above |
6398 | 163 :-tabonly " close all tab pages except the previous |
164 " one | |
165 :+tabonly " close all tab pages except the next one | |
166 :1tabonly " close all tab pages except the first one | |
167 :$tabonly " close all tab pages except the last one | |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
168 :tabonly - " close all tab pages except the previous |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
169 " one |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
170 :tabonly +2 " close all tab pages except the two next |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
171 " one |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
172 :tabonly 1 " close all tab pages except the first one |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
173 :tabonly $ " close all tab pages except the last one |
21727
860cad58f557
patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents:
21703
diff
changeset
|
174 :tabonly # " close all tab pages except the last |
860cad58f557
patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents:
21703
diff
changeset
|
175 " accessed one |
674 | 176 |
177 | |
178 SWITCHING TO ANOTHER TAB PAGE: | |
179 | |
180 Using the mouse: If the tab page line is displayed you can click in a tab page | |
682 | 181 label to switch to that tab page. Click where there is no label to go to the |
182 next tab page. |'tabline'| | |
674 | 183 |
819 | 184 :tabn[ext] *:tabn* *:tabnext* *gt* |
1118 | 185 <C-PageDown> *CTRL-<PageDown>* *<C-PageDown>* |
186 gt *i_CTRL-<PageDown>* *i_<C-PageDown>* | |
828 | 187 Go to the next tab page. Wraps around from the last to the |
674 | 188 first one. |
189 | |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
190 :{count}tabn[ext] |
1118 | 191 :tabn[ext] {count} |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
192 Go to tab page {count}. The first tab page has number one. > |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
193 :-tabnext " go to the previous tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
194 :+tabnext " go to the next tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
195 :+2tabnext " go to the two next tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
196 :1tabnext " go to the first tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
197 :$tabnext " go to the last tab page |
22723 | 198 :tabnext $ " as above |
21727
860cad58f557
patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents:
21703
diff
changeset
|
199 :tabnext # " go to the last accessed tab page |
10895
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
200 :tabnext - " go to the previous tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
201 :tabnext -1 " as above |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
202 :tabnext + " go to the next tab page |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
203 :tabnext +1 " as above |
c391bfbdb452
Updated runtime files.
Christian Brabandt <cb@256bit.org>
parents:
10301
diff
changeset
|
204 |
1118 | 205 {count}<C-PageDown> |
206 {count}gt Go to tab page {count}. The first tab page has number one. | |
674 | 207 |
208 | |
1118 | 209 :tabp[revious] *:tabp* *:tabprevious* *gT* *:tabN* |
210 :tabN[ext] *:tabNext* *CTRL-<PageUp>* | |
211 <C-PageUp> *<C-PageUp>* *i_CTRL-<PageUp>* *i_<C-PageUp>* | |
682 | 212 gT Go to the previous tab page. Wraps around from the first one |
213 to the last one. | |
214 | |
215 :tabp[revious] {count} | |
216 :tabN[ext] {count} | |
1118 | 217 {count}<C-PageUp> |
682 | 218 {count}gT Go {count} tab pages back. Wraps around from the first one |
14006 | 219 to the last one. Note that the use of {count} is different |
220 from |:tabnext|, where it is used as the tab page number. | |
682 | 221 |
685 | 222 :tabr[ewind] *:tabfir* *:tabfirst* *:tabr* *:tabrewind* |
686 | 223 :tabfir[st] Go to the first tab page. |
685 | 224 |
225 *:tabl* *:tablast* | |
226 :tabl[ast] Go to the last tab page. | |
227 | |
22723 | 228 *g<Tab>* *CTRL-W_g<Tab>* *<C-Tab>* |
21703
22583b9d4efd
patch 8.2.1401: cannot jump to the last used tabpage
Bram Moolenaar <Bram@vim.org>
parents:
19404
diff
changeset
|
229 g<Tab> Go to the last accessed tab page. |
682 | 230 |
674 | 231 Other commands: |
232 *:tabs* | |
682 | 233 :tabs List the tab pages and the windows they contain. |
234 Shows a ">" for the current window. | |
235 Shows a "+" for modified buffers. | |
10186
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
9927
diff
changeset
|
236 For example: |
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
9927
diff
changeset
|
237 Tab page 1 ~ |
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
9927
diff
changeset
|
238 + tabpage.txt ~ |
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
9927
diff
changeset
|
239 ex_docmd.c ~ |
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
9927
diff
changeset
|
240 Tab page 2 ~ |
a5ef9968638c
commit https://github.com/vim/vim/commit/7e1479b86c590a66b63a274c079b7f18907d45a4
Christian Brabandt <cb@256bit.org>
parents:
9927
diff
changeset
|
241 > main.c ~ |
682 | 242 |
243 | |
244 REORDERING TAB PAGES: | |
245 | |
843 | 246 :tabm[ove] [N] *:tabm* *:tabmove* |
3662 | 247 :[N]tabm[ove] |
843 | 248 Move the current tab page to after tab page N. Use zero to |
14519 | 249 make the current tab page the first one. N is counted before |
250 the move, thus if the second tab is the current one, | |
14637 | 251 `:tabmove 1` and `:tabmove 2` have no effect. |
14519 | 252 Without N the tab page is made the last one. > |
6775 | 253 :.tabmove " do nothing |
6398 | 254 :-tabmove " move the tab page to the left |
6775 | 255 :+tabmove " move the tab page to the right |
6474 | 256 :0tabmove " move the tab page to the beginning of the tab |
6398 | 257 " list |
6775 | 258 :tabmove 0 " as above |
259 :tabmove " move the tab page to the last | |
260 :$tabmove " as above | |
261 :tabmove $ " as above | |
22723 | 262 :tabmove # " move the tab page after the last accessed |
21727
860cad58f557
patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents:
21703
diff
changeset
|
263 " tab page |
674 | 264 |
3662 | 265 :tabm[ove] +[N] |
266 :tabm[ove] -[N] | |
267 Move the current tab page N places to the right (with +) or to | |
6775 | 268 the left (with -). > |
269 :tabmove - " move the tab page to the left | |
270 :tabmove -1 " as above | |
271 :tabmove + " move the tab page to the right | |
272 :tabmove +1 " as above | |
273 | |
3662 | 274 |
275 Note that although it is possible to move a tab behind the N-th one by using | |
6775 | 276 :Ntabmove. And move it by N places by using :+Ntabmove. For clarification what |
277 +N means in this context see |[range]|. | |
3662 | 278 |
685 | 279 |
280 LOOPING OVER TAB PAGES: | |
281 | |
282 *:tabd* *:tabdo* | |
6474 | 283 :[range]tabd[o] {cmd} |
284 Execute {cmd} in each tab page or if [range] is given only in | |
285 tab pages which tab page number is in the [range]. It works | |
286 like doing this: > | |
685 | 287 :tabfirst |
288 :{cmd} | |
289 :tabnext | |
290 :{cmd} | |
291 etc. | |
292 < This only operates in the current window of each tab page. | |
293 When an error is detected on one tab page, further tab pages | |
294 will not be visited. | |
295 The last tab page (or where an error occurred) becomes the | |
296 current tab page. | |
297 {cmd} can contain '|' to concatenate several commands. | |
298 {cmd} must not open or close tab pages or reorder them. | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6775
diff
changeset
|
299 Also see |:windo|, |:argdo|, |:bufdo|, |:cdo|, |:ldo|, |:cfdo| |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6775
diff
changeset
|
300 and |:lfdo| |
685 | 301 |
674 | 302 ============================================================================== |
303 3. Other items *tab-page-other* | |
304 | |
706 | 305 *tabline-menu* |
306 The GUI tab pages line has a popup menu. It is accessed with a right click. | |
307 The entries are: | |
308 Close Close the tab page under the mouse pointer. The | |
309 current one if there is no label under the mouse | |
310 pointer. | |
311 New Tab Open a tab page, editing an empty buffer. It appears | |
312 to the left of the mouse pointer. | |
1118 | 313 Open Tab... Like "New Tab" and additionally use a file selector to |
706 | 314 select a file to edit. |
315 | |
674 | 316 Diff mode works per tab page. You can see the diffs between several files |
317 within one tab page. Other tab pages can show differences between other | |
318 files. | |
319 | |
819 | 320 Variables local to a tab page start with "t:". |tabpage-variable| |
321 | |
824 | 322 Currently there is only one option local to a tab page: 'cmdheight'. |
323 | |
10301
07d2b5a3b7cc
commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08
Christian Brabandt <cb@256bit.org>
parents:
10198
diff
changeset
|
324 *tabnew-autocmd* |
675 | 325 The TabLeave and TabEnter autocommand events can be used to do something when |
326 switching from one tab page to another. The exact order depends on what you | |
327 are doing. When creating a new tab page this works as if you create a new | |
328 window on the same buffer and then edit another buffer. Thus ":tabnew" | |
329 triggers: | |
330 WinLeave leave current window | |
331 TabLeave leave current tab page | |
6474 | 332 WinEnter enter window in new tab page |
675 | 333 TabEnter enter new tab page |
334 BufLeave leave current buffer | |
335 BufEnter enter new empty buffer | |
336 | |
678 | 337 When switching to another tab page the order is: |
675 | 338 BufLeave |
339 WinLeave | |
340 TabLeave | |
341 TabEnter | |
342 WinEnter | |
343 BufEnter | |
674 | 344 |
678 | 345 ============================================================================== |
346 4. Setting 'tabline' *setting-tabline* | |
347 | |
686 | 348 The 'tabline' option specifies what the line with tab pages labels looks like. |
349 It is only used when there is no GUI tab line. | |
350 | |
678 | 351 You can use the 'showtabline' option to specify when you want the line with |
352 tab page labels to appear: never, when there is more than one tab page or | |
353 always. | |
354 | |
355 The highlighting of the tab pages line is set with the groups TabLine | |
356 TabLineSel and TabLineFill. |hl-TabLine| |hl-TabLineSel| |hl-TabLineFill| | |
357 | |
1118 | 358 A "+" will be shown for a tab page that has a modified window. The number of |
359 windows in a tabpage is also shown. Thus "3+" means three windows and one of | |
360 them has a modified buffer. | |
361 | |
678 | 362 The 'tabline' option allows you to define your preferred way to tab pages |
363 labels. This isn't easy, thus an example will be given here. | |
364 | |
365 For basics see the 'statusline' option. The same items can be used in the | |
366 'tabline' option. Additionally, the |tabpagebuflist()|, |tabpagenr()| and | |
367 |tabpagewinnr()| functions are useful. | |
368 | |
1118 | 369 Since the number of tab labels will vary, you need to use an expression for |
370 the whole option. Something like: > | |
678 | 371 :set tabline=%!MyTabLine() |
372 | |
373 Then define the MyTabLine() function to list all the tab pages labels. A | |
374 convenient method is to split it in two parts: First go over all the tab | |
375 pages and define labels for them. Then get the label for each tab page. > | |
376 | |
377 function MyTabLine() | |
378 let s = '' | |
379 for i in range(tabpagenr('$')) | |
681 | 380 " select the highlighting |
678 | 381 if i + 1 == tabpagenr() |
27903 | 382 let s ..= '%#TabLineSel#' |
678 | 383 else |
27903 | 384 let s ..= '%#TabLine#' |
678 | 385 endif |
681 | 386 |
387 " set the tab page number (for mouse clicks) | |
27903 | 388 let s ..= '%' .. (i + 1) .. 'T' |
681 | 389 |
390 " the label is made by MyTabLabel() | |
27903 | 391 let s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} ' |
678 | 392 endfor |
681 | 393 |
394 " after the last tab fill with TabLineFill and reset tab page nr | |
27903 | 395 let s ..= '%#TabLineFill#%T' |
681 | 396 |
397 " right-align the label to close the current tab page | |
398 if tabpagenr('$') > 1 | |
27903 | 399 let s ..= '%=%#TabLine#%999Xclose' |
681 | 400 endif |
401 | |
678 | 402 return s |
403 endfunction | |
404 | |
405 Now the MyTabLabel() function is called for each tab page to get its label. > | |
406 | |
407 function MyTabLabel(n) | |
408 let buflist = tabpagebuflist(a:n) | |
409 let winnr = tabpagewinnr(a:n) | |
410 return bufname(buflist[winnr - 1]) | |
411 endfunction | |
412 | |
413 This is just a simplistic example that results in a tab pages line that | |
414 resembles the default, but without adding a + for a modified buffer or | |
1118 | 415 truncating the names. You will want to reduce the width of labels in a |
678 | 416 clever way when there is not enough room. Check the 'columns' option for the |
681 | 417 space available. |
674 | 418 |
686 | 419 ============================================================================== |
420 5. Setting 'guitablabel' *setting-guitablabel* | |
421 | |
422 When the GUI tab pages line is displayed, 'guitablabel' can be used to | |
423 specify the label to display for each tab page. Unlike 'tabline', which | |
424 specifies the whole tab pages line at once, 'guitablabel' is used for each | |
425 label separately. | |
426 | |
839 | 427 'guitabtooltip' is very similar and is used for the tooltip of the same label. |
428 This only appears when the mouse pointer hovers over the label, thus it | |
429 usually is longer. Only supported on some systems though. | |
430 | |
686 | 431 See the 'statusline' option for the format of the value. |
432 | |
433 The "%N" item can be used for the current tab page number. The |v:lnum| | |
839 | 434 variable is also set to this number when the option is evaluated. |
690 | 435 The items that use a file name refer to the current window of the tab page. |
686 | 436 |
839 | 437 Note that syntax highlighting is not used for the option. The %T and %X |
690 | 438 items are also ignored. |
686 | 439 |
690 | 440 A simple example that puts the tab page number and the buffer name in the |
441 label: > | |
686 | 442 :set guitablabel=%N\ %f |
443 | |
839 | 444 An example that resembles the default 'guitablabel': Show the number of |
1118 | 445 windows in the tab page and a '+' if there is a modified buffer: > |
686 | 446 |
690 | 447 function GuiTabLabel() |
686 | 448 let label = '' |
449 let bufnrlist = tabpagebuflist(v:lnum) | |
450 | |
451 " Add '+' if one of the buffers in the tab page is modified | |
452 for bufnr in bufnrlist | |
453 if getbufvar(bufnr, "&modified") | |
454 let label = '+' | |
455 break | |
456 endif | |
457 endfor | |
458 | |
459 " Append the number of windows in the tab page if more than one | |
460 let wincount = tabpagewinnr(v:lnum, '$') | |
461 if wincount > 1 | |
27903 | 462 let label ..= wincount |
686 | 463 endif |
464 if label != '' | |
27903 | 465 let label ..= ' ' |
686 | 466 endif |
467 | |
468 " Append the buffer name | |
27903 | 469 return label .. bufname(bufnrlist[tabpagewinnr(v:lnum) - 1]) |
686 | 470 endfunction |
690 | 471 |
686 | 472 set guitablabel=%{GuiTabLabel()} |
690 | 473 |
474 Note that the function must be defined before setting the option, otherwise | |
475 you get an error message for the function not being known. | |
476 | |
857 | 477 If you want to fall back to the default label, return an empty string. |
478 | |
479 If you want to show something specific for a tab page, you might want to use a | |
480 tab page local variable. |t:var| | |
481 | |
686 | 482 |
14421 | 483 vim:tw=78:ts=8:noet:ft=help:norl: |