Смотрите пример ниже,
// Start vim without loading your vimrc. set only tabstop=8 softtabstop=4.
// This makes <Tab> in insert mode equals to 4 <Space> length at max.
// In insert mode, type 12, one <Tab>, 5. We get insertion below,
12··5
// Quit insert mode. Move cursor back, we find 2 <Space> inserted.
// In insert mode, type 12, two <Tab>, 9. We get insertion below,
12······9
// Quit insert mode. Move cursor back, you find a <Tab> inserted.
// In insert mode, type 12, three <Tab>, 3. We get insertion below,
12··········3
// Move the cursor back, you find a <Tab> and 4 <Space> inserted.
// We can even set sotftabstop=12, but this time we only need type one <Tab>, then 3.
12··········3
// Move the cursor back, you find a <Tab> and 4 <Sapce> inserted.
Так tabstopчто о том, как широко Tabопределен а, а softtabstopо том, как далеко перемещается курсор при наборе текста Tab . Когда они не установлены на одно и то же значение, это означает, что если вы нажмете Tabклавишу, это не будет означать тривиальный Tabсимвол. В любом случае, именно vim решит, когда вы выйдете из режима вставки. Vim сначала попытается сопоставить вставку tabstopкак можно больше; если, наконец, он не может сделать полный tabstop, vim просто компенсирует Space.
Если говорить немного больше, если вы установите expandtab, это будет равно vim:
Пожалуйста, не удосуживайтесь подсчитать, сколько Tabи сколько Sapceнужно. Просто вставьте Space.