The following combinations are demonstrated in the video:
set ts=8 sts=0 sw=8 noexpandtab " default settings set ts=8 sts=0 sw=8 expandtab set ts=8 sts=8 sw=8 expandtab set ts=8 sts=4 sw=4 expandtab set ts=8 sts=4 sw=4 noexpandtab set ts=4 sts=4 sw=4 noexpandtab
If you prefer to work with tab characters then it is a good idea to ensure that tabstop == softtabstop
. This makes it less likely that you’ll end up with a mixture of tabs and spaces for indentation.
If you prefer to work with spaces, then it is preferable to ensure that softtabstop == shiftwidth
. This way, you can expect the same number of spaces to be inserted whether you press the tab key in insert mode, or use the indentation commands in normal/visual modes.
The following snippet of vimscript allows you to assign the same value to tabstop, softtabstop and shiftwidth simultaneously:
" Set tabstop, softtabstop and shiftwidth to the same value command! -nargs=* Stab call Stab() function! Stab() let l:tabstop = 1 * input('set tabstop = softtabstop = shiftwidth = ') if l:tabstop > 0 let &l:sts = l:tabstop let &l:ts = l:tabstop let &l:sw = l:tabstop endif call SummarizeTabs() endfunction function! SummarizeTabs() try echohl ModeMsg echon 'tabstop='.&l:ts echon ' shiftwidth='.&l:sw echon ' softtabstop='.&l:sts if &l:et echon ' expandtab' else echon ' noexpandtab' endif finally echohl None endtry endfunction
To invoke this command, go into normal mode (by pressing escape) then run:
:Stab
Then hit enter. You will see this:
set tabstop = softtabstop = shiftwidth =
Enter the size that you want to assign to those settings, and hit enter. A summary line then shows the value of each setting, as well as showing whether or not expandtab is enabled. If you hit enter without providing a value, then the tab settings are not affected.
You can also call the summary line by itself. I’ve mapped this to ctrl-shift-tab
for convenience. Feel free to modify the mappings, and the funcionality to suit your preferences.
Further Reading
When I started researching this episode, I asked a question on StackOverflow.com. The answers that came in seemed to be at odds with each other, which demonstrated to me that there is a lot of confusion over the subject. I’d like to thank toomuchphp for providing the vimscript sample which I have adapted for my preferences. If it proves useful to yourself, why not show your gratitude by upvoting his answer?