How to configure vim to not put comments at the beginning of lines while editing python files


When I add a # in insert mode on an empty line in Vim while editing python files, vim moves the # to the beginning of the line, but I would like the # to be inserted at the tab level where I entered it.

For example, when writing this in vim

for i in range(10):

the # does not stay there where I entered it.

It is moved like so, by vim.

for i in range(10):

Does anyone know of a configuration item in vim that would change this?

If it helps, I am using Ubuntu 8.10.

12/22/2008 8:21:28 AM

Accepted Answer

I found an answer here

It seems that the vim smartindent option is the cause of the problem. The referenced page above describes work-a-rounds but after reading the help in smartindent in vim itself (:help smartindent), I decided to try cindent instead of smartindent.

I replaced

set smartindent


set cindent

in my .vimrc file

and so far it is working perfectly.

This changed also fixed the behavior of '<<' and '>>' for indenting visual blocks that include python comments.

There are more configuration options for and information on indentation in the vim help for smartindent and cindent (:help smartindent and :help cindent).

12/22/2008 2:08:55 AM

@PolyThinker Though I see that response a lot to this question, in my opinion it's not a good solution. The editor still thinks it should be indented all the way to left - check this by pushing == on a line that starts with a hash, or pushing = while a block of code with comments in it is highlighted to reindent.

I would strongly recommend filetype indent on, and remove the set smartindent and set autoindent (or set cindent) lines from your vimrc. Someone else (appparently David Bustos) was kind enough to write a full indentation parser for us; it's located at $VIMDIRECTORY/indent/python.vim.

(Paul's cindent solution probably works for python, but filetype indent on is much more generally useful.)

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow