Skip to content

google/vim-codefmt

Travis Build Status

codefmt is a utility for syntax-aware code formatting. It contains several built-in formatters, and allows new formatters to be registered by other plugins.

For details, see the executable documentation in the vroom/ directory or the helpfiles in the doc/ directory. The helpfiles are also available via :help codefmt if codefmt is installed (and helptags have been generated).

Supported File-types

Commands

Use :FormatLines to format a range of lines or use :FormatCode to format the entire buffer. Use :NoAutoFormatBuffer to disable current buffer formatting.

Usage example

Before:

intfoo(int * x){return * x** x }

After running :FormatCode:

intfoo(int* x){return *x * *x}

Installation

This example uses Vundle, whose plugin-adding command is Plugin.

" Add maktaba and codefmt to the runtimepath." (The latter must be installed before it can be used.)Plugin'google/vim-maktaba'Plugin'google/vim-codefmt'" Also add Glaive, which is used to configure codefmt's maktaba flags. See" `:help :Glaive` for usage.Plugin'google/vim-glaive'" ...callvundle#end() " the glaive#Install() should go after the "call vundle#end()"callglaive#Install() " Optional: Enable codefmt's default mappings on the <Leader>= prefix. Glaive codefmt plugin[mappings] Glaive codefmt google_java_executable="java -jar /path/to/google-java-format-VERSION-all-deps.jar"

Make sure you have updated maktaba recently. Codefmt depends upon maktaba to register formatters.

Autoformatting

Want to just sit back and let autoformat happen automatically? Add this to your vimrc (or any subset):

augroupautoformat_settingsautocmdFileTypebzl AutoFormatBuffer buildifier autocmdFileTypec,cpp,proto,javascript,typescript,arduino AutoFormatBuffer clang-format autocmdFileTypeclojure AutoFormatBuffer cljstyle autocmdFileTypedart AutoFormatBuffer dartfmt autocmdFileTypeelixir,eelixir,heex AutoFormatBuffer mixformat autocmdFileTypefish AutoFormatBuffer fish_indent autocmdFileTypegn AutoFormatBuffer gn autocmdFileTypego AutoFormatBuffer gofmt autocmdFileTypehaskell AutoFormatBuffer ormolu " Alternative for web languages: prettierautocmdFileTypehtml,css,sass,scss,less,json AutoFormatBuffer js-beautifyautocmdFileTypejava AutoFormatBuffer google-java-format autocmdFileTypejsonnet AutoFormatBuffer jsonnetfmt autocmdFileTypejulia AutoFormatBuffer JuliaFormatter autocmdFileTypekotlin AutoFormatBuffer ktfmt autocmdFileTypelua AutoFormatBuffer luaformatterfiveone autocmdFileTypemarkdown AutoFormatBuffer prettier autocmdFileTypeocaml AutoFormatBuffer ocamlformat autocmdFileTypepython AutoFormatBuffer yapf " Alternative: autocmd FileType python AutoFormatBuffer autopep8autocmdFileTyperuby AutoFormatBuffer rubocop autocmdFileTyperust AutoFormatBuffer rustfmt autocmdFileTypeswift AutoFormatBuffer swift-format autocmdFileTypevue AutoFormatBuffer prettier augroupEND

Configuring formatters

Most formatters have some options available that can be configured via Glaive You can get a quick view of all codefmt flags by executing :Glaive codefmt, or start typing flag names and use tab completion. See :help Glaive for usage details.

Installing formatters

Codefmt defines several built-in formatters. The easiest way to see the list of available formatters is via tab completion: Type :FormatCode <TAB> in vim. Formatters that apply to the current filetype will be listed first.

To use a particular formatter, type :FormatCode FORMATTER-NAME. This will either format the current buffer using the selected formatter or show an error message with basic setup instructions for this formatter. Normally you will trigger formatters via key mappings and/or autocommand hooks. See vroom/main.vroom to learn more about formatting features, and see vroom/FORMATTER-NAME.vroom to learn more about usage for individual formatters.

Creating a New Formatter

Assume a filetype myft and a formatter called MyFormatter. Our detailed guide to creating a formatter lives here.

  • Create an issue for your new formatter and discuss!

  • Create a new file in autoload/codefmt/myformatter.vim See `autoload/codefmt/buildifier.vim for an example. This is where all the logic for formatting goes.

  • Register the formatter in plugin/register.vim with:

    calls:registry.AddExtension(codefmt#myformatter#GetFormatter())
  • Create a flag in instant/flags.vim

    """ The path to the buildifier executable.calls:plugin.Flag('myformatter_executable', 'myformatter')
  • Create a vroom test named vroom/myformatter.vroom to ensure your formatter works properly.

  • Update the README.md to mention your new filetype!

That's it! Of course, the complicated step is in the details of myformatter.vim.

// TODO(kashomon): Create a worked example formatter.

About

Vim plugin for syntax-aware code formatting

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 38

Languages