Nvim :help pages, generated
from source
using the tree-sitter-vimdoc parser.
:tabnew " opens tabpage after the current one
:.tabnew " as above
:+tabnew " opens tabpage after the next tab page
" note: it is one further than :tabnew
:-tabnew " opens tabpage before the current
:0tabnew " opens tabpage before the first one
:$tabnew " opens tabpage after the last one
:[count]tabe[dit] [++opt] [+cmd] {file}
:[count]tabnew [++opt] [+cmd] {file}
Open a new tab page and edit {file}, like with :edit.
For [count] see :tabnew above.{file} :tabf :tabfind
Open a new tab page and edit {file} in 'path', like with
:find. For [count] see :tabnew above.{cmd} :tab {cmd} and when it opens a new window open a new tab
page instead. Doesn't work for :diffsplit, :diffpatch,
:execute and :normal.
If [count] is given the new tab page appears after the tab
page [count] otherwise the new tab page will appear after the
current one.
Examples::tab split " opens current buffer in new tab page
:tab help gt " opens tab page with help for "gt"
:.tab help gt " as above
:+tab help " opens tab page with help after the next
" tab page
:-tab help " opens tab page with help before the
" current one
:0tab help " opens tab page with help before the
" first one
:$tab help " opens tab page with help after the last
" one
CTRL-W gf Open a new tab page and edit the file name under the cursor.
See CTRL-W_gf.:tabclose " close the current tab page:{count}tabc[lose][!] :tabc[lose][!]
{count}
Close tab page {count}. Fails in the same way as :tabclose
above.:-tabclose " close the previous tab page :+tabclose " close the next tab page :1tabclose " close the first tab page :$tabclose " close the last tab page :tabclose -2 " close the 2nd previous tab page :tabclose + " close the next tab page :tabclose 3 " close the third tab page :tabclose $ " close the last tab page :tabclose # " close the last accessed tab pageWhen a tab page is closed the next tab page will become the current one. This behaviour can be customized using the 'tabclose' option.
:tabonly " close all tab pages except the current one:tabo[nly][!]
{count}
Close all tab pages except {count} one.:.tabonly " as above
:-tabonly " close all tab pages except the previous
" one
:+tabonly " close all tab pages except the next one
:1tabonly " close all tab pages except the first one
:$tabonly " close all tab pages except the last one
:tabonly - " close all tab pages except the previous
" one
:tabonly +2 " close all tab pages except the two next
" one
:tabonly 1 " close all tab pages except the first one
:tabonly $ " close all tab pages except the last one
:tabonly # " close all tab pages except the last
" accessed one
SWITCHING TO ANOTHER TAB PAGE:<C-PageDown> CTRL-<PageDown> <C-PageDown>
gt i_CTRL-<PageDown> i_<C-PageDown>
Go to the next tab page. Wraps around from the last to the
first one.{count}
Go to tab page {count}. The first tab page has number one.:-tabnext " go to the previous tab page :+tabnext " go to the next tab page :+2tabnext " go to the two next tab page :1tabnext " go to the first tab page :$tabnext " go to the last tab page :tabnext $ " as above :tabnext # " go to the last accessed tab page :tabnext - " go to the previous tab page :tabnext -1 " as above :tabnext + " go to the next tab page :tabnext +1 " as above
{count}<C-PageDown>
{count}gt Go to tab page {count}. The first tab page has number one.<C-PageUp> <C-PageUp> i_CTRL-<PageUp> i_<C-PageUp>
gT Go to the previous tab page. Wraps around from the first one
to the last one.{count}
:tabN[ext] {count}
{count}<C-PageUp>
{count}gT Go {count} tab pages back. Wraps around from the first one
to the last one. Note that the use of {count} is different
from :tabnext, where it is used as the tab page number.<C-Tab> CTRL-<Tab> <C-Tab>
g<Tab> g<Tab> CTRL-W_g<Tab>
CTRL-W g<Tab> Go to the last accessed tab page.:tabmove 1 and :tabmove 2 have no effect.
Without N the tab page is made the last one.:.tabmove " do nothing
:-tabmove " move the tab page to the left
:+tabmove " move the tab page to the right
:0tabmove " move the tab page to the first
:tabmove 0 " as above
:tabmove " move the tab page to the last
:$tabmove " as above
:tabmove $ " as above
:tabmove # " move the tab page after the last accessed
" tab page
:tabm[ove] +[N]
:tabm[ove] -[N]
Move the current tab page N places to the right (with +) or to
the left (with -).:tabmove - " move the tab page to the left :tabmove -1 " as above :tabmove + " move the tab page to the right :tabmove +1 " as aboveNote that although it is possible to move a tab page behind the N-th one by using :Ntabmove. And move it by N places by using :+Ntabmove. For clarification what +N means in this context see [range].
{cmd}
Execute {cmd} in each tab page or, if [range] is given, only
in tabpages which tab page number is in the [range]. It works
like doing this::tabfirst
:{cmd}
:tabnext
:{cmd}
etc.{cmd} can contain '|' to concatenate several commands.
{cmd} must not open or close tab pages or reorder them.
Also see :windo, :argdo, :bufdo, :cdo, :ldo, :cfdo
and :lfdo.:set tabline=%!MyTabLine()Then define the MyTabLine() function to list all the tab pages labels. A convenient method is to split it in two parts: First go over all the tab pages and define labels for them. Then get the label for each tab page.
function MyTabLine()
let s = ''
for i in range(tabpagenr('$'))
" select the highlighting
if i + 1 == tabpagenr()
let s ..= '%#TabLineSel#'
else
let s ..= '%#TabLine#'
endif
" set the tab page number (for mouse clicks)
let s ..= '%' .. (i + 1) .. 'T'
" the label is made by MyTabLabel()
let s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} '
endfor
" after the last tab page fill with TabLineFill and reset tab page nr
let s ..= '%#TabLineFill#%T'
" right-align the label to close the current tab page
if tabpagenr('$') > 1
let s ..= '%=%#TabLine#%999Xclose'
endif
return s
endfunction
Now the MyTabLabel() function is called for each tab page to get its label.function MyTabLabel(n) let buflist = tabpagebuflist(a:n) let winnr = tabpagewinnr(a:n) return bufname(buflist[winnr - 1]) endfunctionThis is just a simplistic example that results in a tab pages line that resembles the default, but without adding a + for a modified buffer or truncating the names. You will want to reduce the width of labels in a clever way when there is not enough room. Check the 'columns' option for the space available.
:set guitablabel=%N\ %fAn example that resembles the default 'guitablabel': Show the number of windows in the tab page and a '+' if there is a modified buffer:
function GuiTabLabel()
let label = ''
let bufnrlist = tabpagebuflist(v:lnum)
" Add '+' if one of the buffers in the tab page is modified
for bufnr in bufnrlist
if getbufvar(bufnr, "&modified")
let label = '+'
break
endif
endfor
" Append the number of windows in the tab page if more than one
let wincount = tabpagewinnr(v:lnum, '$')
if wincount > 1
let label ..= wincount
endif
if label != ''
let label ..= ' '
endif
" Append the buffer name
return label .. bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
endfunction
set guitablabel=%{GuiTabLabel()}
Note that the function must be defined before setting the option, otherwise
you get an error message for the function not being known.