I edit Python code with Vim.

With the tab key I get four spaces inserted for indentation. How can I delete those spaces with one "Backspace"(?) stroke - instead of four?

There has to be some "set" option for that...

Here is my .vimrc:

set autoindent
set ts=4
set sw=4
set et

8 Answers 8


You can use Ctrl+D to back up one tab stop. This actually moves the whole line to the left one tab stop; Ctrl+T does the same thing to the right. Note that these keystrokes only work in Insert mode (use << and >> for the equivalent in Command mode).

set softtabstop=4
  • 11
    IMO this is exactly what the OP asked for. Deserves more upvotes. Jan 9, 2012 at 7:06
  • 2
    This is the correct answer.
    – mk12
    Jul 30, 2012 at 18:09
  • 1
    Did not know about this, and this was exactly what I was looking for. +1
    – NigoroJr
    May 12, 2015 at 19:46

tl;dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

short form: set ts=4 sts=-1 sw=0 et


If you set softtabstop (or sts) to -1 it will automatically behave the same as tabstop (ts), which will save you some hassle if you change tabbing a lot. Setting shiftwidth (sw) to 0 should effectively make that the same as tabstop as well.

In Detail

shiftwidth sw

Number of spaces to use for each step of (auto)indent. Used for cindent, >>, <<, etc.
When zero the tabstop value will be used.

tabstop ts

Number of spaces that a in the file counts for. Also see :retab command, and softtabstop option.

softtabstop sts

Number of spaces that a Tab counts for while performing editing operations, like inserting a Tab or using BS. It feels like Tabs are being inserted, while in fact a mix of spaces and s are used. This is useful to keep the tabs is setting at its standard value, while being able to edit like it is set to sts. When sts is negative, the value of shiftwidth is used. This will save you some hassle if you change tabstops a lot. When expandtab is not set, the number of spaces is minimized by using Tabs.

expandtab et

In Insert mode: Use the appropriate number of spaces to insert a . Spaces are used in indents with the > and < commands and when autoindent is on. To insert a real tab when expandtab is on, use Ctrl-V Tab. See also :retab

  • Neat, I've been using vim for years but the inheritance of sts/sw/ts never caught my eye.
    – timss
    Aug 30, 2017 at 15:00

I wrote GreedyBackspace.vim for someone who wanted something like this. I don't personally use it so it's been a while since I've updated it. I haven't received any bug reports on it lately, though.


Several options:

  1. You could 'retab' all whitespaces so they're replaced with tabs. That way they could be easily deleted.
  2. You could (this is untested, so I'm just proposing ideas here) make a function which 'execute's in normal mode 4 times the backspace key. Then map it to something. However, it has no way of knowing whether it will delete spaces or some important characters, so this is potentially unsafe.
  3. '4X' will delete the last 4 characters (that's big X, not small, small one will act like the Del key'.

easiest way is <<, repeat with a .

  • Hello and welcome to superuser. Although i agree with your answer being a vi user myself. Your answer is short, does not explain why you suggest what you are suggesting and why you are not suggesting something that fits the question asked.
    – Mogget
    Apr 3, 2016 at 21:50

Have you checked using the expand tabs setting in your VIM?

:set noet

I usually prefer keeping the tabs on while working on the files.
When it is required, I replace the tabs to 4 spaces or as many as required.

:%s/<ctrl+V><tab>/    /g

As a small bonus, your source file is shorter by 3 chars per tab :-)

  • oh, I have et because I have to expand tabs - i think - because code I edit was initially written that way. now I'm just following that convention.
    – Evgeny
    Jul 16, 2009 at 3:20
  • You could still do what i say and restore spaces at the end (when you have to give the file back to the repository)
    – nik
    Jul 16, 2009 at 3:24
  • Maybe you could have a vim function that expanded them to tabs on open and collapsed them to spaces on closing? Anyone have any ideas? Feb 23, 2010 at 16:33
  • This is a really unhelpful answer--it needlessly reopens the tabs-vs-spaces debate, without actually providing any useful information. Nov 24, 2015 at 19:01

I don't think there's a way. Once the tab key is expanded to four spaces, vim has no way of knowing they were ever a tab.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.