Format Ruby code in Vim

旧街凉风 提交于 2019-12-02 16:40:32

Vimcasts has a useful screencast on this subject that you may be interested in

gg=G

gg => go to start of file
=  => apply autoformatting
G  => ... to the end of file

When I see questions about Vim and reformatting and reindenting, I usually feel confusion. But it is pretty easy.

Reindenting, done with = key, is a process of shifting line indetation without inserting any line ends - no hard wrapping. Simply put, beginning columns of the selected lines can change, but the content cannot.

On the other hand, reformatting is complete rewrite of a selected piece of code. Simply put, everything is deleted and written again according to the language rules defined in Vim. Easy, huh?

The usual patern for reindentation is to go to the beginning of the file (gg), change to line selection (V), go to the end of the file (G) and perform reidentation (=).

That's indenting in vim: ggVG=

Reformatting pattern starts with the very same keys (ggVG), but instead of equal key, you do gq - reformat Vim command.

That's formatting in vim: ggVGgq

This works out-of-box in every Vim instance, even with plain text. Only when Vim does not understand the programming language you need to provide it with correct formatting rules (usually bunch of .vim files which have to go to the .vim directory structure).

Reformatting for Ruby works only when plugin vim-ruby is installed.

I had to publish this on my blog ;-) Isn't Vim cool? It is.

Try:

gg=G

in normal mode.

If you're looking for more than just indentation, have a look at ruby-beautify. It can be integrated with vim through vim-autoformat.

ggVGgq will reformat the entire file according to the current filetype

I released a VIM plugin that will do some more comprehensive formatting for Ruby files. In addition to indenting, it does things like remove trailing whitespace, and consistently spaces out method declarations:

vim-autoformat-rails

For small indentation, try: =}, =)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!