I just discovered I could indent and un-indent easily in Vi with : << and >>

By default it adds a tab character. Now I'm wondering, could this be to a number of spaces via a configuration in my .vimrc? And how should I do it?

  • 1
    1) tabstop is effectively how many columns of whitespace a \t character is worth. 2) shiftwidth is how many columns of whitespace a “level of indentation” is worth. The > action indents by 1 level. 3) softtabstop is how many columns of whitespace a tab keypress or a backspace keypress is worth. ... More on tab settings in vim in a medium article I wrote medium.com/@arisweedler/tab-settings-in-vim-1ea0863c5990 – Ari Sweedler Apr 10 at 23:05

Several settings controls the behavior:

First set expandtab allows to replace the tabs by white spaces characters :h 'expandtab'.

Then set shiftwidth=4 makes the tabulations be 4 white spaces :h 'shiftwidth'.

You could also be interested by by :h 'tabstop' which defines the number of spaces that a tab character in the file counts for.

As a bonus see :h 'smartindent' and :h 'autoindent' which are pretty useful.

| improve this answer | |

In fact, asside from other answers, it was also possible to use autoindent(to automatically indent newlines) and smartindent (wich reacts to the synthax of the code). Then the shiftwidth I wanted was 2.

I answered my need by modifying $HOME/.vimrc like below:

:set shiftwidth=2
:set autoindent
:set smartindent
| improve this answer | |
  • 4
    also :set tabstop=2 – Straff Nov 2 '18 at 20:11
  • 1
    I think it would be really helpful to add more explanations as to what the different lines do – Vic Seedoubleyew Apr 9 at 15:23
  • 1
    @J.Chomel actually none of the other answers here explain what autoindent or smartindent do. I think that even if that was the case, either your answer is a comment, in which case it can exempt itself from explanation, or it's a full blown answer, in which case it should not be code only if it's not self-explanatory – Vic Seedoubleyew Apr 12 at 12:06
  • 1
    @J.Chomel I am just trying to make it easier for everyone to learn. Good job on editing your answer, I think it is way more helpful now – Vic Seedoubleyew Apr 15 at 9:01


You can set shiftwidth to any number of spaces. This works both in vi and vim.

:set shiftwidth=2

Now, the width shifted for each >> and << will be 2.

| improve this answer | |
touch ~/.vimrc
echo "set ts=4 sw=4" >> ~/.vimrc

Shorthand for J.Chomel's answer.
touch will create the file .vimrc in your home directory if it doesn't exists yet
Next, append tabstop and shiftwidth with your preferences to the .vimrc file.

| improve this answer | |
  • 3
    Note that it is considered a best practice to use options long name in your vimrc (i.e. tabstop and shiftwidth) it is usually more readable and since your don't need to type them that often in your config file there is not much gain to use short names. – statox Aug 22 '19 at 7:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.