Veja o exemplo abaixo,
// 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.
O mesmo tabstop
ocorre com a largura Tab
definida por um, enquanto softtabstop
a distância com que o cursor se move durante a digitação Tab
. Quando eles não estão definidos para o mesmo valor, significa que, se você pressionar a Tab
tecla, isso não implica trivialmente um Tab
caractere. Em qualquer caso, é o vim quem decide quando você sai do modo de inserção. O Vim primeiro tentará corresponder à inserção o maior número tabstop
possível; se, por fim, não puder ser preenchido tabstop
, o vim simplesmente compensa Space
.
Para falar um pouco mais, se você definir expandtab
, é igual a dizer ao vim:
Por favor, não se preocupe em calcular quantos Tab
e Sapce
é necessário. Basta inserir Space
.