On Apr 19, 2012, at 4:22 AM, Stuart Jansen wrote:

> Not perfect, but good enough for most lines. I don't think it's possible
> to get vim to do a great job of indenting or folding because it was
> designed to work best with C-like languages.

I've tried several python vim indenting plugins, and they all fall short on at 
least these trivialities (some are much worse):

1. It indents lines below a comment ending in ":" (as if it were an if 
statement, but it's just a comment)
2. It folds in the middle of a doc string that happens to look like Python code 
(say, example usage)
3. It breaks Vim's Shift+e command due to weird shell errors about Django 
environment variables and other stuff
4. Auto-indent of whole blocks is hopelessly broken (this is more inherent to 
Python unfortunately).

That is my biggest beef with Python: You simply cannot auto-indent. And before 
you say, "Well, the language naturally indents, so there's no need", may I 
offer this preemptive retort:

If I have an existing block of code that I want to wrap in an "if" statement, I 
have to manually indent the whole block (thank goodness for Vim's Ctrl+v and 
Shift+i). In C++, I would simply wrap the block in an "if" with its curly 
braces, and then auto-indent using Vim's "%" curly brace matching command and 
the "=" auto-indent command.

If I attempt the same with Python, I'm likely to change the flow control in the 
block. Blarg!

I've come to two conclusions about writing Python code:

1. Pylint is not optional.
2. Unit tests with 100% code coverage are not optional.

Those two commandments are necessary just to give you the ground level 
confidence that your code is syntactically valid and free from even the most 
basic errors (like using a name before its assigned, nonexistent module, and 
even some syntax errors, for example).

So there you go, free advice worth what you paid for it (about 5 minutes of 
your time, so not cheap--sorry).

--Dave

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to