tweekmonster / braceless.vim

:snake: Text objects, folding, and more for Python and other indented languages.
395 stars 13 forks source link
auto-indent easymotion python vim vim-plugins

Braceless Build Status

Text objects, folding, and more for Python and other indented languages. CoffeeScript support is already baked in, but mainly as an incomplete proof of concept.

Usage

Use your favorite plugin plugin of choice to install tweekmonster/braceless.vim, then add a line like this to your vimrc file:

autocmd FileType python BracelessEnable +indent

The command arguments are:

Option Description
+indent Enable indent handling
+fold Enable folding
+fold-slow Enable indentexpr folding, which is depreciated and slow
+highlight Enable indent guide
+highlight-cc Enable indent guide, but use colorcolumn
+highlight-cc2 Enable indent guide and use colorcolumn

The default motion of interest is P. It can be used for things like vaP, ciP, >iP, etc. :h braceless Covers the details of this plugin.

Text objects

Braceless doesn't give you similarly indented blocks as text objects. You get actual code blocks using iP and aP.

braceless-motions

Object motions

Moving to recognized blocks is done with [[ and ]]. In Python, [m and ]m moves to def and class blocks, while [M and ]M moves to the end of those blocks.

braceless-movement

Folding

Get useful code folding by adding +fold. ~~Unfortunately, this can be a little slow on large scripts.~~ Folding is now much faster! Read the boring exciting details in :h braceless-folds!

braceless-fold

Indent guide

See what indent level you're operating on with +highlight. You can also enable colorcolumn so the guide can span the height of the window. If you would like this kind of indent highlighting in other files that don't need Braceless, take a look at local-indent.vim

braceless-highlight

Somewhat intelligent auto-indent

Ever wished for autoindent that didn't make you fix the indent? Wish no more, pal. Just add +indent. It's not perfect, but it's definitely better. There is even PEP 8 indentation built in, and if you use delimitMate with the expand_cr option enabled, Braceless will disable it temporarily when you're messing with block arguments.

braceless-autoindent

(The backspace key was never used in the image above)

EasyMotion

Built-in support for EasyMotion.

braceless-easymotion

Not just Python!

Braceless can simply recognize indentation.

braceless-others

The above GIF was using:

autocmd FileType haml,yaml,coffee BracelessEnable +indent +fold +highlight

You can extend Braceless to give full support to other indented languages. See :h braceless-custom

License

MIT