How do I change tab size in Vim?
Categories:
Mastering Tab and Indentation Settings in Vim

Learn how to configure tab sizes, indentation, and expand tabs to spaces in Vim for consistent code formatting across all your projects.
Consistent code formatting is crucial for readability and collaboration. In Vim, managing tab sizes and indentation can sometimes be a source of frustration if not configured correctly. This article will guide you through the essential Vim commands and settings to control how tabs and spaces are handled, ensuring your code always looks the way you intend.
Understanding Vim's Indentation Options
Vim provides several options to control indentation behavior. It's important to understand the distinction between them to achieve the desired formatting. The primary options are tabstop
, softtabstop
, shiftwidth
, and expandtab
.
flowchart TD A[Start] --> B{User wants tabs or spaces?} B -- Tabs --> C[Set 'tabstop'] B -- Spaces --> D[Set 'expandtab'] D --> E[Set 'shiftwidth'] D --> F[Set 'softtabstop'] C --> G[Set 'shiftwidth'] C --> H[Set 'softtabstop'] G --> I[End] H --> I[End] E --> I[End] F --> I[End]
Decision flow for Vim indentation settings
Let's break down each of these options:
~/.vimrc
file to make them persistent across Vim sessions. You can also set them per-filetype using autocmd FileType
.Configuring Tabstop and Shiftwidth
tabstop
defines the actual width of a hard tab character (\t
) when displayed in Vim. shiftwidth
defines the number of spaces Vim uses for each step of auto-indentation, and for the <<
and >>
commands. It's common practice to set tabstop
and shiftwidth
to the same value for consistency.
set tabstop=4
set shiftwidth=4
Setting tabstop and shiftwidth to 4 spaces
In this example, a hard tab character will be displayed as 4 spaces wide, and each indentation level (e.g., after pressing Enter in insert mode, or using >>
) will be 4 spaces.
Using Softtabstop and Expandtab for Spaces
Many coding styles prefer spaces over hard tabs. Vim's expandtab
option converts all typed tabs into spaces. When expandtab
is set, softtabstop
becomes very important. softtabstop
defines how many spaces a Tab
keypress inserts. If you want your Tab
key to insert 4 spaces, and for those spaces to be treated as a single 'tab' for backspacing, you'd set softtabstop=4
.
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
Configuring Vim to use 4 spaces for tabs and indentation
With these settings:
tabstop=4
: Hard tabs (if any exist in the file) will display as 4 spaces.expandtab
: When you press theTab
key, Vim inserts spaces instead of a\t
character.softtabstop=4
: PressingTab
inserts 4 spaces. PressingBackspace
will delete 4 spaces at once, mimicking a tab.shiftwidth=4
: Auto-indentation and<<
,>>
commands will use 4 spaces.
tabstop
is set differently in various editors.Practical Steps to Apply Tab Settings
Here's how you can apply these settings in your Vim environment.
1. Open your Vim configuration file
Open your ~/.vimrc
file (or _vimrc
on Windows) in Vim. If it doesn't exist, you can create it.
2. Add the desired settings
Insert the configuration lines into your ~/.vimrc
file. For 2-space indentation with spaces, you might use:
set expandtab
set tabstop=2
set softtabstop=2
set shiftwidth=2
For 8-space indentation with hard tabs:
set noexpandtab
set tabstop=8
set softtabstop=0
set shiftwidth=8
3. Save and restart Vim
Save the ~/.vimrc
file (:w
) and then quit Vim (:q
). The next time you open Vim, your new tab settings will be active.
4. Apply settings to an open file (temporarily)
If you want to change settings for the current buffer only, you can type the commands directly in command mode (e.g., :set tabstop=4
). These changes will not persist after you close Vim.