How to insert tab character when expandtab option is on in Vim

Vim

Vim Problem Overview


When I'm in insert mode and I have the expandtab option switched on, pressing Tab ↹ results in inserting the configured number of spaces.

But occasionally I want to insert an actual tab character.

Do you know how to do this?

Vim Solutions


Solution 1 - Vim

You can use <CTRL-V><Tab> in "insert mode". In insert mode, <CTRL-V> inserts a literal copy of your next character.

If you need to do this often, @Dee`Kej suggested (in the comments) setting Shift+Tab to insert a real tab with this mapping:

:inoremap <S-Tab> <C-V><Tab>

Also, as noted by @feedbackloop, on Windows you may need to press <CTRL-Q> rather than <CTRL-V>.

Solution 2 - Vim

You can disable expandtab option from within Vim as below:

:set expandtab!

or

:set noet

PS: And set it back when you are done with inserting tab, with "set expandtab" or "set et"

PS: If you have tab set equivalent to 4 spaces in .vimrc (softtabstop), you may also like to set it to 8 spaces in order to be able to insert a tab by pressing tab key once instead of twice (set softtabstop=8).

Solution 3 - Vim

From the documentation on expandtab:

> To insert a real tab when expandtab is on, use CTRL-V<Tab>. See also :retab and ins-expandtab.
> This option is reset when the paste > option is set and restored when the paste option is reset.

So if you have a mapping for toggling the paste option, e.g.

set pastetoggle=<F2>

you could also do <F2>Tab<F2>.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondevemouseView Question on Stackoverflow
Solution 1 - VimMichael AndersonView Answer on Stackoverflow
Solution 2 - VimJahanzeb FarooqView Answer on Stackoverflow
Solution 3 - VimEugene YarmashView Answer on Stackoverflow