views:

8629

answers:

6

I've been somewhat spoiled using Eclipse and java. I started using vim to do C coding in a linux environment, is there a way to have vim automatically do the proper spacing for blocks?

So after typing a { the next line will have 2 spaces indented in, and a return on that line will keep it at the same indentation, and a } will shift back 2 spaces?

A: 

Try:

set sw=2

set ts=2

set smartindent

Craig B.
According to the help, cindent is better than smartindent, but only works for C-like code.
thomasrutter
smartindent is deprecated (was only for C-like code, too). Filetype indent scripts are much better.
graywh
+10  A: 

These two commands should do it:

:set autoindent
:set cindent

For bonus points put them in a file named .vimrc located in your home directory on linux

davr
That's awesome. This will definitely save my spacebar and garner greater vim appreciation from me. Thanks!
zxcv
I would also recommend putting those into ~.vim/ftplugin/c.vim so that you're not using cindent all the time, but only for C/C++ files.
graywh
@graywh: What about for pl, php, cpp, as, java, and all the other files I want to have the same indenting? Do I need to create a separate settings file for each one?
davr
I rely Vim's bundled indent scripts (:filetype indent on) which is *much* better than just using 'cindent' always.
graywh
+13  A: 

I wrote all about tabs in vim, which gives a few interesting things you didn't ask about. To automatically indent braces, use:

:set cindent

To indent two spaces (instead of one tab of eight spaces, the vim default):

:set shiftwidth=2

To keep vim from converting eight spaces into tabs:

:set expandtab

If you ever want to change the indentation of a block of text, use < and >. I usually use this in conjunction with block-select mode (v, select a block of text, < or >).

(I'd try to talk you out of using two-space indentation, since I (and most other people) find it hard to read, but that's another discussion.)

Commodore Jaeger
Very nice blog. I'm still fairly new to vim, nice to know there's good resources out there though.
zxcv
You also missed changing softtabstop in addition to shiftwidth.
graywh
A: 

and always remember this venerable explanation of Spaces + Tabs:

http://www.jwz.org/doc/tabs-vs-spaces.html

mike511
What is with that guy's argument? I don't follow how not using the TAB character, and filling with hard-coded spaces instead, solves everyone's problems. That would make it impossible, for example, to be able to open a file and have the width of its indents appear according to your own preferences.
thomasrutter
This guy's solution is much better :)http://blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
thomasrutter
+1  A: 

A lot of vim's features (like autoindent and cindent) are turned off by default. To really see what vim can do for you, you need a decent ~/.vimrc.

A good starter one is in $VIMRUNTIME/vimrc_example.vim. If you want to try it out, use

:source $VIMRUNTIME/vimrc_example.vim

when in vim.

I'd actually suggest just copying the contents to your ~/.vimrc as it's well commented, and a good place to start learning how to use vim. You can do this by

:e $VIMRUNTIME/vimrc_example.vim
:w! ~/.vimrc

This will overwrite your current ~/.vimrc, but if all you have in there is the indent settings Davr suggested, I wouldn't sweat it, as the example vimrc will take care of that for you as well. For a complete walkthrough of the example, and what it does for you, see :help vimrc-intro.

rampion
A: 

I ran:

user@ubuntu:~$ vi .vimrc # creates new file that Vim uses (vi = vim, vim = vi)

~~~~ And Added ~~~~
    set autoindent
~~~~ Thats It. ~~~~
JamesM