I want to configure Vim to use spaces for <Tab>
s everywhere. Therefore, I've had a look at :h tabstop
to figure out how to perform the configuration.
Looking at the help text, option 2. seems appropriate for my use case. However, it doesn't mention softtabstop
, why not? Without setting softtabstop
, every <Tab>
I insert result in the default number of spaces for the filetype
(4 for Python), and not the value configured for tabstop
?
Shouldn't softtabstop
be set when using option 2? If not, then indentation and <Tab>
s inserted in Insert mode results in different number of spaces, which is awkward.
Bonus: What is the standard way of handling <Tab>s
in Vim that most users opt for?
Bonus: what is meant by "Then Vim
will use a mix of tabs and spaces, but typing <Tab>
and <BS>
will
behave like a tab appears every 4 (or 3) characters." in option 1?
:h tabstop
:
Number of spaces that a <Tab> in the file counts for. Also see
|:retab| command, and 'softtabstop' option.
Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
(or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim
will use a mix of tabs and spaces, but typing <Tab> and <BS> will
behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
'expandtab'. This way you will always insert spaces. The
formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
|modeline| to set these values when editing the file again. Only
works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
'noexpandtab'. This should then work (for initial indents only)
for any tabstop setting that people use. It might be nice to have
tabs after the first non-blank inserted as spaces if you do this
though. Otherwise aligned comments will be wrong when 'tabstop' is
changed.