FANDOM


Tip 1347 Printable Monobook Previous Next

created September 29, 2006 · complexity basic · author mchenryk · version 7.0


Vim 7.0 introduced the "tab pages" feature. Tab pages in Vim are rather different from the tabbed editing common in other editors, even though presumably these other editors inspired the creation of Vim's tab pages. In other editors, every time you open a new file, it is loaded into a new tab. Usually in these other editors, you can never have more than one file shown in a single tab, nor can you have more than one tab display a given file. In Vim, every file is loaded into a buffer, which can be displayed in any number of windows in any number of tabs. The easiest way to think about tab pages in Vim is to consider them to be viewports, layouts, or workspaces. Tab pages in Vim are not a convenient way to force a multi-page one-file-per-max-size-window setup. Trying to force one file per tab page will prove very difficult (though Cream is rumored to have done it) and if completely successful will only serve to limit your use of Vim's powerful features.

This tip will give you a basic introduction to opening, navigating, and working with tab pages. For some good examples of how Vim's tab pages can be used to their full potential, see part two of this "using tab pages" introduction: Quick tips for using tab pages. If you're looking for a one-file-per-tab setup, see if Rolodex Vim or the 'hidden' option combined with efficient use of the buffer list via a plugin such as FuzzyFinder, LustyExplorer or BufExplorer.

Basic Navigation

:tabs         list all tabs
:tabm 0       move the current tab first
:tabm {i}     move the current tab to the i+1 position
:tabn         move to (view) the next tab
:tabp         move to (view) the previous tab
:tabfirst     move to the first tab
:tabf {file}  open a new tab with the filename given, searching the 'path' to find it
:tabc         close the current tab
:tabc {i}     close the i-th tab
:tabo         close other tabs

Key mappings

For basic tab navigation, it is most convenient to use the built-in normal-mode commands:

gt            move to (view) the next tab
gT            move to (view) the previous tab
{i}gt         move to (view) the tab in the i-th position

Jumping to a specific tab with {i}gt is much easier if you set up your tabline to show the tab number.

Opening and closing tabs can be made faster and more convenient if you add mappings such as the following to your vimrc:

map <C-t> :tabnew<CR>
map <C-left> :tabp<CR>
map<C-right> :tabn<CR>

Then in gvim you have the following commands:

  • Ctrl-t – open a new tab
  • Ctrl-left arrow – move one tab to the left
  • Ctrl-right arrow – move one tab to the right

These mappings are similar to those commonly used in other tabbed environments such as web browsers. Beware of mapping Ctrl-T, however, as it overrides a useful built-in command. See :help CTRL-T. You almost certainly should not map CTRL-W to anything, as it is a precursor to many useful built-in commands.

Fixing tips on tab pages

This section is a temporary area to plan merging/fixing existing tips on tab pages.

 TO DO 

  • No point having a tip change the default keybindings for :tabn and :tabp. Explain the defaults.
  • Merge in any useful comments from below.
  • Perhaps rename to "Using tab pages" (a simpler title that attempts to avoid confusion with the tab key).
Relevant tips
Open files in tabs

Comments

Does not work in [ax]term.


Or you could use gt and gT without having to move your hands across the keyboard. Also, gt can take the tab number to jump directly to a tab.


I use Vim in Windows, so remapping C-Left isn't great for me. These are the mappings I use:

" Tab mappings
map <S-Up> :tabclose<CR>
map <S-Down> :tabnew<CR>
map <S-Left> gT
map <S-Right> gt
map <S-PageUp> :tabfirst<CR>
map <S-PageDown> :tablast<CR>

I used down for a new tab because I'm used to that from Opera's mouse gestures.


I prefer gt and gT. In any case <C-PgUp> and <C-PgDn> are the defaults for the same operations.

Just opening a new tab is kind of useless. I find :tabe <filename> more useful.


Instead of :tabe filename, I like :tabf filename, because it walks the path to find the name, instead of relying on an required explicit path/filename.


If you are working with tags or cscope, <Ctrl-T> is for popping the stack.


I think this can be condensed to:

:tab sp<CR>

Alternative way to move current window to a new tab is: <Ctrl-w> T (capital).

Possibly useful information from tip 1313 (now removed)

:tabo         " only this tab (close other tabs)
:tab ball     " show each buffer in a tab

" Set tab label to show buffer number, filename, if modified.
:set guitablabel=%n/\ %t\ %M

When starting Vim, the -p option opens each file in a tab, for example:

gvim -p *.txt

From comment in tip 259 (now removed)

Press F8 to show all buffers in tabs, or to close all tabs (toggle).

let g:toggleTabs = 0
nnoremap <silent> <F8> :if g:toggleTabs<Bar>:tabo<Bar>:let g:toggleTabs = 0<Bar>:else<Bar>:tab ball<Bar>:let g:toggleTabs = 1<Bar>:endif<CR>

Whereas it's definitely useful to have a tip covering tab pages, I'd like to see a disclaimer explaining what tab pages are not, i.e. the same as tabs in a tabbed editor like Eclipse or Visual Studio. This (admittedly rather bold) text is what #vim uses to help "misguided" users realize what tab pages are not:

Tabs are not buffers, don't try to force them to act like buffers. Consider tabs like viewports, layouts or workspaces. Tabs is a terrible name. Trying to setup 1 tab == 1 buffer is an exercise in futility. Do :set hidden and get started. Get FuzzyFinder, LustyExplorer or BufExplorer to make getting around your buffers easier.

We also recommend that new users read godlygeek's introduction to buffers, windows and tab pages. That we have created these quick responses might give you a clue as to how many questions we get concerning the 1 tab == 1 buffer setup. :) (Spiiph 22:32, 8 August 2009 (UTC))

There is a small disclaimer in Category:Tabs. Feel free to make the wording stronger if you feel it needs it. --Fritzophrenic 00:28, 9 August 2009 (UTC)
Ah, that's fine. I didn't find it before, but maybe that's because I wasn't really looking. I wonder how many will find it there though. (Spiiph 11:09, 9 August 2009 (UTC))
Community content is available under CC-BY-SA unless otherwise noted.