Skip to main content

A simple reindent for containers that reindents as I like it

Project description

condent is a quick hack to reindent containers the way that I like them.

It’s mostly (currently entirely) for Python, but due to similar object literal syntaxes it should work for other languages by chance, and is easily generalizable to actually work with them in case it doesn’t. I suspect over time I’ll add actual support for the other languages I use on a semi-regular basis (mostly Ruby and JS).

It can fix basic things like:
  • Spacing
  • Moving something that fits on a single line onto one line
  • Moving something that doesn’t onto multiple lines
  • Fixing indentation of multiple line containers

What it won’t (shouldn’t) do is change the semantics of your code. If it does, please open a ticket.


Install with pip install condent and you’ll find a condent executable installed.


Sample invocation and output is:

$ echo 'd = {"foo":"bar","baz":"quux"}' | condent
d = {"foo" : "bar", "baz" : "quux"}

$ condent <<EOF
the_dict = {
the_dict = {foo : bar, baz : quux, spam : eggs}

$ condent <<EOF
    an_already_indented_dict_that_does_not_fit_on_one_line = {
foo:bar, baz:quux,
    an_already_indented_dict_that_does_not_fit_on_one_line = {
        foo : bar,
        baz : quux,
        spam : eggs,

You can see full usage info with condent -h.

Usage With Vim

The main reason this exists is to use with vim and its equalprg option.

To do so, put something like autocmd FileType python set equalprg=condent in your .vimrc or in an ftplugin file. You can then use it with = (see :help = for details).

I’ve tried a number of vim indent scripts over the past few years but never found one that worked right. Maybe it exists and it’s my (settings’) fault, but rather than figure out whether that’s the case it was easy enough to throw together in an afternoon.


It should be pep8 compliant with one exception.

I like my dict key and value to be symmetric around the :. Depending on interpretation this might be in violation of pep8 recommending avoiding extra whitespace, but I’ve been doing it forever and I like the way it looks, not to mention I’ve seen a ton of code that does it this way as well. To illustrate, this will produce {"foo" : "bar"} rather than producing {"foo": "bar"}. If you really don’t like that you can disable it with the command line flag --no-symmetric-colon. There are a bunch of other subjective style choices that can be toggled with command line flags.

Adding Features

Like many similar things, this is likely going to be a continual WIP. Like I said, I use things like this daily, so as I find bugs or desired features I’ll probably fix or add them.

There are a few specific things I have in mind which will probably get added in the next couple of days. If you have others, feel free to send a pull request. Even if I don’t like or use the style you desire, if it’s sane enough ;) it probably be merged as an option anyhow.

Project details

Release history Release notifications

History Node


This version
History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
condent-0.2.1.tar.gz (6.9 kB) Copy SHA256 hash SHA256 Source None Oct 12, 2012 (9.9 kB) Copy SHA256 hash SHA256 Source None Oct 12, 2012

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page