83
votes

I prefer to use tab than white space(may be a little different from most of others)

But I found, when I hit Enter at the end of line, it will add some white spaces, but not tab. So, I have to delete them and press tab.

I want to know how to set vim as:

  1. use only tab to indent the lines
  2. a tab looks like 4-spaces, but actually is a tab
  3. when hit enter at the end of a line, the new line is started with only tabs

I've googled for this for a while, but not found a good answer. Thank you in advance


UPDATE

The answer @Alok has provided works well in most of cases. But I just found, sometimes, it depends on the file type. For example, if you are editing a haml file, and there is a haml.vim in your vimfiles/indent/, then all the tabs will be converted to space. So if you want it to be tab only, you should modify(or delete) the corresponding indent file.

1
Instead of modifying installed files, try putting your overriding settings in $HOME/vimfiles/after/indent/haml.vim. See :help after-directory for more info.Nefrubyr
It is common to have different tab/space preferences for different filetypes. Check out my screencast over at Vimcasts.org, which shows how to set whitespace preferences for different file types. This solution uses your vimrc, but if you want to set up lots of different filetypes, you might prefer to use the after-directory, as suggested by Nefrubyr.nelstrom
The /after/indent trick also works to get rid of those pesky spaces in python files, the offending file to look at is ftplugin/python.vim, just copy the line with setlocal and copy it to a blank file as suggested by @Nefrubyr, edit it and restore sanity.Paul

1 Answers

114
votes

The settings you are looking for are:

set autoindent
set noexpandtab
set tabstop=4
set shiftwidth=4

As single line:

set autoindent noexpandtab tabstop=4 shiftwidth=4

autoindent can be replaced with smartindent or cindent, depending upon your tastes. Also look at filetype plugin indent on.

http://vim.wikia.com/wiki/Indenting_source_code