2012-09-30 16:09:46 -04:00
vim-autoformat
2012-12-01 05:18:53 -05:00
==============
2013-01-21 07:34:25 -05:00
Format your code with only one button press!
2013-02-09 10:27:20 -05:00
This plugin makes use of external formatprograms to achieve the best result.
2013-03-08 15:14:17 -05:00
Check the list of formatprograms to see which languages are supported by default.
2013-03-08 15:34:54 -05:00
You can easily customize or add your own formatprogram.
2012-12-01 13:03:23 -05:00
2013-03-17 07:36:49 -04:00
How to install
2012-12-01 13:03:23 -05:00
-----------------------
2013-03-17 07:30:50 -04:00
###Vundle
2012-12-01 13:03:23 -05:00
Put this in your .vimrc
```vim
Bundle "Chiel92/vim-autoformat"
```
2013-03-17 07:30:50 -04:00
Then restart vim and run `:BundleInstall` .
To update the plugin to the latest version, your can also run `:BundleInstall` .
###Pathogen
Download the source and extract in your bundle directory.
Updating has to be done manually, as far as I'm aware.
###Other
It is highly recommended to use a plugin manager such as Vundle, since this makes it easy to update plugins or uninstall them.
It also keeps your .vim directory clean.
2012-12-02 09:12:04 -05:00
How to use
----------
2012-12-06 17:58:01 -05:00
First you have to install an external program that can format code of the programming language you are using.
2013-03-09 11:04:11 -05:00
It suffices to make the formatprogram globally available, which is the case if you install it via your package manager.
2013-03-09 14:54:51 -05:00
Alternatively, you can put its binary (or a link to it) in the `formatters/` folder.
2013-03-17 07:36:49 -04:00
A third way to do it is to point vim-autoformat to the the binary by explicitly putting the absolute path in `g:formatprg_<filetype>` in your .vimrc.
2012-12-02 09:12:04 -05:00
2013-03-08 15:14:17 -05:00
When you have installed the formatters you need, you can format the entire buffer with the command `:Autoformat` .
2012-12-02 09:12:04 -05:00
For convenience it is recommended that you assign a key for this, like so:
2012-12-02 15:19:14 -05:00
2012-12-02 09:12:04 -05:00
```vim
2012-12-03 03:03:07 -05:00
noremap < F7 > :Autoformat< CR > < CR >
2012-12-02 09:12:04 -05:00
```
2013-03-10 14:51:39 -04:00
If there is no formatprogram available for the current filetype, vim will auto-indent the buffer, instead of auto-formatting it.
This will fix at least the indentation of your code, according to vim's indentfile for that filetype.
2013-03-08 15:14:17 -05:00
If you don't want to format the entire buffer, you can alternatively format visually selected code with `gq` .
2013-03-09 11:04:11 -05:00
However, some formatprograms will behave a bit weird this way, because they need the context of a piece of code.
2012-12-02 15:36:06 -05:00
For more ways to perform autoformatting type `:help gq` .
2012-12-02 09:12:04 -05:00
2013-03-08 15:14:17 -05:00
Default formatprograms
2012-12-01 15:34:44 -05:00
------------------------
2013-03-08 15:34:54 -05:00
Here is a list of formatprograms that are supported by default.
2012-12-06 17:58:01 -05:00
2013-02-09 10:28:20 -05:00
* `astyle` for __C#__ , __C++__ , __C__ and __Java__ .
2012-12-15 07:56:15 -05:00
It's probably in your distro's repository, so you can download it as a regular package.
2012-12-06 17:58:01 -05:00
For Ubuntu type `sudo apt-get install astyle` in a terminal.
2013-02-08 16:46:20 -05:00
Otherwise, download it here: http://astyle.sourceforge.net/.
2012-12-02 14:54:59 -05:00
2012-12-15 07:56:15 -05:00
* `jsbeautify` (the python CLI version) for __Javascript__ .
This one can also be installed as a vundle package, and I recommend to do so.
2013-03-17 22:07:43 -04:00
Put this in your .vimrc: `Bundle "einars/js-beautify"` .
2012-12-06 17:58:01 -05:00
Note that we're only using the python version, so `node` doesn't have to be installed.
2013-02-08 16:46:20 -05:00
Here is the link to the repository: https://github.com/einars/js-beautify.
2012-12-06 17:50:38 -05:00
2012-12-02 15:19:14 -05:00
* `autopep8` for __Python__ .
2012-12-15 07:56:15 -05:00
It's probably in your distro's repository, so you can download it as a regular package.
2012-12-06 17:58:01 -05:00
For Ubuntu type `sudo apt-get install autopep8` in a terminal.
2013-02-08 16:46:20 -05:00
Here is the link to the repository: https://github.com/hhatto/autopep8.
And here the link to its page on the python website: http://pypi.python.org/pypi/autopep8/0.5.2.
2012-12-06 17:50:38 -05:00
2013-03-09 13:24:05 -05:00
* `tidy` for __HTML__ , __XHTML__ and __XML__ .
2013-01-20 12:56:32 -05:00
It's probably in your distro's repository, so you can download it as a regular package.
For Ubuntu type `sudo apt-get install tidy` in a terminal.
2012-12-02 15:15:45 -05:00
How can I change the behaviour of formatters?
---------------------------------------------
2013-03-09 14:54:51 -05:00
If you are not satisfied with the default configuration for a certain filetype, you can override it by defining it yourself.
The formatprogram used for a `<filetype>` is defined in `g:formatprg_<filetype>` .
2013-03-17 07:30:50 -04:00
The arguments passed to the formatprogram are either defined in `g:formatprg_args_expr_<filetype>` as an expression which can be evaluated, or else in `g:formatprg_args_<filetype>` as a plain string.
2013-03-09 14:54:51 -05:00
The formatprogram must read the unformatted code from the standard input, and write the formatted code to the standard output.
2013-03-16 08:53:16 -04:00
Defining any of these variable manually in your .vimrc, will override the default value, if existing.
2013-03-09 14:54:51 -05:00
So, a complete definition for C# files could look like this:
2013-03-08 15:14:17 -05:00
```vim
let g:formatprg_cs = "astyle"
2013-03-16 07:21:55 -04:00
let g:formatprg_args_expr_cs = '"--mode=cs --style=ansi -pcHs".& softtabstop'
2013-03-08 15:14:17 -05:00
```
2013-03-16 07:21:55 -04:00
Notice that `g:formatprg_args_expr_cs` can be evaluated.
2013-03-16 08:53:16 -04:00
As you see, this allows us to dynamically define some parameters.
2013-03-17 07:30:50 -04:00
In this example, the indent width that astyle will use, depends on the value of `&softtabstop` .
2013-03-16 08:53:16 -04:00
For the default formatprogram definitions, the options `expandtab` and `shiftwidth` are taken into account whenever possible.
2013-03-17 07:30:50 -04:00
This means that the formatting style will match your current vim settings as much as possible.
2013-03-16 08:53:16 -04:00
For the exact default definitions, have a look in `vim-autoformat/plugin/defaults.vim` .
2013-03-08 15:14:17 -05:00
2012-12-03 15:37:30 -05:00
2013-01-20 12:56:32 -05:00
Todo list
---------
* Check for windows support.
2013-03-10 19:01:37 -04:00
* Option for on-the-fly code-formatting, like visual studio (If ever. When you have a clever idea about how to do this, i'd be glad to hear.)
2013-03-17 07:30:50 -04:00
* Create a help file.
2013-01-22 14:49:39 -05:00
2013-03-17 07:30:50 -04:00
If you have any suggestions on this plugin or on this readme, if you have some nice default formatprg definition that can be added to the defaults, or if you experience problems, please contact me by creating an issue in this repository.
2013-03-10 19:01:37 -04:00
You can also send a message to ctje92 at gmail dot com.
2013-03-09 06:10:10 -05:00
Change log
----------
2013-03-09 14:54:51 -05:00
### March 9 2013
2013-03-16 07:21:55 -04:00
The `custom_config` branch has been merged into the master branch.
2013-03-09 13:58:32 -05:00
* Customization of formatprograms can be done easily now, as explained above.
2013-03-09 13:24:05 -05:00
* I set the default tabwidth to 4 for all formatprograms as well as for vim itself.
2013-03-09 11:53:35 -05:00
* The default parameters for astyle have been slightly modified: it will wrap spaces around operators.
2013-03-09 14:55:36 -05:00
* phpCB has been removed from the defaults, due to code-breaking behaviour.
2013-03-09 13:52:12 -05:00
* XHTML default definition added
2013-03-10 15:17:54 -04:00
2013-03-10 14:51:39 -04:00
### March 10 2013
* When no formatter is installed or defined, vim will now auto-indent the file instead. This uses the indentfile for that specific filetype.
2013-03-13 10:38:20 -04:00
### March 13 2013
* It is now possible to prevent vim-autoformat from overwriting your settings for `tabstop` , `softtabstop` , `shiftwidth` and `expandtab` in your .vimrc.
2013-03-16 08:57:11 -04:00
2013-03-16 07:21:55 -04:00
### March 16 2013
2013-03-16 08:57:11 -04:00
The `dynamic_indent_width` branch has been merged into the master branch.
2013-03-16 08:53:16 -04:00
* The options `expandtab` , `shiftwidth` , `tabstop` and `softtabstop` are not overwritten anymore.
* This obsoletes `g:autoformat_no_default_shiftwidth`
2013-03-16 08:57:11 -04:00
* `g:formatprg_args_expr_<filetype>` is introduced.