All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
5 Options include the following:
7 - [wbolster/emacs-python-black](https://github.com/wbolster/emacs-python-black)
8 - [proofit404/blacken](https://github.com/pythonic-emacs/blacken)
9 - [Elpy](https://github.com/jorgenschaefer/elpy).
11 ## PyCharm/IntelliJ IDEA
13 1. Install _Black_ with the `d` extra.
16 $ pip install 'black[d]'
20 [BlackConnect IntelliJ IDEs plugin](https://plugins.jetbrains.com/plugin/14321-blackconnect).
22 1. Open plugin configuration in PyCharm/IntelliJ IDEA
26 `PyCharm -> Preferences -> Tools -> BlackConnect`
28 On Windows / Linux / BSD:
30 `File -> Settings -> Tools -> BlackConnect`
32 1. In `Local Instance (shared between projects)` section:
34 1. Check `Start local blackd instance when plugin loads`.
35 1. Press the `Detect` button near `Path` input. The plugin should detect the `blackd`
38 1. In `Trigger Settings` section check `Trigger on code reformat` to enable code
39 reformatting with _Black_.
41 1. Format the currently opened file by selecting `Code -> Reformat Code` or using a
44 1. Optionally, to run _Black_ on every file save:
46 - In `Trigger Settings` section of plugin configuration check
47 `Trigger when saving changed files`.
51 Wing IDE supports `black` via **Preference Settings** for system wide settings and
52 **Project Properties** for per-project or workspace specific settings, as explained in
53 the Wing documentation on
54 [Auto-Reformatting](https://wingware.com/doc/edit/auto-reformatting). The detailed
59 - Wing IDE version 8.0+
67 - Make sure it runs from the command line, e.g.
73 ### Preference Settings
75 If you want Wing IDE to always reformat with `black` for every project, follow these
78 1. In menubar navigate to `Edit -> Preferences -> Editor -> Reformatting`.
80 1. Set **Auto-Reformat** from `disable` (default) to `Line after edit` or
81 `Whole files before save`.
83 1. Set **Reformatter** from `PEP8` (default) to `Black`.
85 ### Project Properties
87 If you want to just reformat for a specific project and not intervene with Wing IDE
88 global setting, follow these steps:
90 1. In menubar navigate to `Project -> Project Properties -> Options`.
92 1. Set **Auto-Reformat** from `Use Preferences setting` (default) to `Line after edit`
93 or `Whole files before save`.
95 1. Set **Reformatter** from `Use Preferences setting` (default) to `Black`.
101 Commands and shortcuts:
103 - `:Black` to format the entire file (ranges not supported);
104 - you can optionally pass `target_version=<version>` with the same values as in the
106 - `:BlackUpgrade` to upgrade _Black_ inside the virtualenv;
107 - `:BlackVersion` to get the current version of _Black_ in use.
111 - `g:black_fast` (defaults to `0`)
112 - `g:black_linelength` (defaults to `88`)
113 - `g:black_skip_string_normalization` (defaults to `0`)
114 - `g:black_skip_magic_trailing_comma` (defaults to `0`)
115 - `g:black_virtualenv` (defaults to `~/.vim/black` or `~/.local/share/nvim/black`)
116 - `g:black_use_virtualenv` (defaults to `1`)
117 - `g:black_target_version` (defaults to `""`)
118 - `g:black_quiet` (defaults to `0`)
119 - `g:black_preview` (defaults to `0`)
123 This plugin **requires Vim 7.0+ built with Python 3.7+ support**. It needs Python 3.7 to
124 be able to run _Black_ inside the Vim process which is much faster than calling an
129 To install with [vim-plug](https://github.com/junegunn/vim-plug):
131 _Black_'s `stable` branch tracks official version updates, and can be used to simply
132 follow the most recent stable version.
135 Plug 'psf/black', { 'branch': 'stable' }
138 Another option which is a bit more explicit and offers more control is to use
139 `vim-plug`'s `tag` option with a shell wildcard. This will resolve to the latest tag
140 which matches the given pattern.
142 The following matches all stable versions (see the
143 [Release Process](../contributing/release_process.md) section for documentation of
144 version scheme used by Black):
147 Plug 'psf/black', { 'tag': '*.*.*' }
150 and the following demonstrates pinning to a specific year's stable style (2022 in this
154 Plug 'psf/black', { 'tag': '22.*.*' }
159 or with [Vundle](https://github.com/VundleVim/Vundle.vim):
165 and execute the following in a terminal:
168 $ cd ~/.vim/bundle/black
169 $ git checkout origin/stable -b stable
174 On Arch Linux, the plugin is shipped with the
175 [`python-black`](https://archlinux.org/packages/community/any/python-black/) package, so
176 you can start using it in Vim after install with no additional setup.
178 ##### Vim 8 Native Plugin Management
180 or you can copy the plugin files from
181 [plugin/black.vim](https://github.com/psf/black/blob/stable/plugin/black.vim) and
182 [autoload/black.vim](https://github.com/psf/black/blob/stable/autoload/black.vim).
185 mkdir -p ~/.vim/pack/python/start/black/plugin
186 mkdir -p ~/.vim/pack/python/start/black/autoload
187 curl https://raw.githubusercontent.com/psf/black/stable/plugin/black.vim -o ~/.vim/pack/python/start/black/plugin/black.vim
188 curl https://raw.githubusercontent.com/psf/black/stable/autoload/black.vim -o ~/.vim/pack/python/start/black/autoload/black.vim
191 Let me know if this requires any changes to work with Vim 8's builtin `packadd`, or
196 On first run, the plugin creates its own virtualenv using the right Python version and
197 automatically installs _Black_. You can upgrade it later by calling `:BlackUpgrade` and
200 If you need to do anything special to make your virtualenv work and install _Black_ (for
201 example you want to run a version from main), create a virtualenv manually and point
202 `g:black_virtualenv` to it. The plugin will use it.
204 If you would prefer to use the system installation of _Black_ rather than a virtualenv,
205 then add this to your vimrc:
208 let g:black_use_virtualenv = 0
211 Note that the `:BlackUpgrade` command is only usable and useful with a virtualenv, so
212 when the virtualenv is not in use, `:BlackUpgrade` is disabled. If you need to upgrade
213 the system installation of _Black_, then use your system package manager or pip--
214 whatever tool you used to install _Black_ originally.
216 To run _Black_ on save, add the following lines to `.vimrc` or `init.vim`:
219 augroup black_on_save
221 autocmd BufWritePre *.py Black
225 To run _Black_ on a key press (e.g. F9 below), add this:
228 nnoremap <F9> :Black<CR>
233 **How to get Vim with Python 3.6?** On Ubuntu 17.10 Vim comes with Python 3.6 by
234 default. On macOS with Homebrew run: `brew install vim`. When building Vim from source,
235 use: `./configure --enable-python3interp=yes`. There's many guides online how to do
238 **I get an import error when using _Black_ from a virtual environment**: If you get an
239 error message like this:
242 Traceback (most recent call last):
243 File "<string>", line 63, in <module>
244 File "/home/gui/.vim/black/lib/python3.7/site-packages/black.py", line 45, in <module>
245 from typed_ast import ast3, ast27
246 File "/home/gui/.vim/black/lib/python3.7/site-packages/typed_ast/ast3.py", line 40, in <module>
247 from typed_ast import _ast3
248 ImportError: /home/gui/.vim/black/lib/python3.7/site-packages/typed_ast/_ast3.cpython-37m-x86_64-linux-gnu.so: undefined symbool: PyExc_KeyboardInterrupt
251 Then you need to install `typed_ast` directly from the source code. The error happens
252 because `pip` will download [Python wheels](https://pythonwheels.com/) if they are
253 available. Python wheels are a new standard of distributing Python packages and packages
254 that have Cython and extensions written in C are already compiled, so the installation
255 is much more faster. The problem here is that somehow the Python environment inside Vim
256 does not match with those already compiled C extensions and these kind of errors are the
257 result. Luckily there is an easy fix: installing the packages from the source code.
259 The package that causes problems is:
261 - [typed-ast](https://pypi.org/project/typed-ast/)
263 Now remove those two packages:
266 $ pip uninstall typed-ast -y
269 And now you can install them with:
272 $ pip install --no-binary :all: typed-ast
275 The C extensions will be compiled and now Vim's Python environment will match. Note that
276 you need to have the GCC compiler and the Python development files installed (on
277 Ubuntu/Debian do `sudo apt-get install build-essential python3-dev`).
279 If you later want to update _Black_, you should do it like this:
282 $ pip install -U black --no-binary typed-ast
287 1. Install [`ale`](https://github.com/dense-analysis/ale)
291 1. Add this to your vimrc:
294 let g:ale_fixers = {}
295 let g:ale_fixers.python = ['black']
300 gedit is the default text editor of the GNOME, Unix like Operating Systems. Open gedit
307 1. `Go to edit > preferences > plugins`
308 1. Search for `external tools` and activate it.
309 1. In `Tools menu -> Manage external tools`
310 1. Add a new tool using `+` button.
311 1. Copy the below content to the code window.
315 Name=$GEDIT_CURRENT_DOCUMENT_NAME
319 - Set a keyboard shortcut if you like, Ex. `ctrl-B`
322 - Output: `Display in bottom pane` if you like.
323 - Change the name of the tool if you like.
325 Use your keyboard shortcut or `Tools -> External Tools` to use your new tool. When you
326 close and reopen your File, _Black_ will be done with its job.
328 ## Visual Studio Code
331 [Python extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
332 ([instructions](https://code.visualstudio.com/docs/python/editing#_formatting)).
334 - Alternatively the pre-release
335 [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter)
336 extension can be used which runs a [Language Server Protocol](https://langserver.org/)
337 server for Black. Formatting is much more responsive using this extension, **but the
338 minimum supported version of Black is 22.3.0**.
342 Use [sublack plugin](https://github.com/jgirardet/sublack).
346 If your editor supports the [Language Server Protocol](https://langserver.org/) (Atom,
347 Sublime Text, Visual Studio Code and many more), you can use the
348 [Python LSP Server](https://github.com/python-lsp/python-lsp-server) with the
349 [python-lsp-black](https://github.com/python-lsp/python-lsp-black) plugin.
353 Use [python-black](https://atom.io/packages/python-black) or
354 [formatters-python](https://atom.io/packages/formatters-python).
356 ## Gradle (the build tool)
358 Use the [Spotless](https://github.com/diffplug/spotless/tree/main/plugin-gradle) plugin.
362 Add the following hook to your kakrc, then run _Black_ with `:format`.
365 hook global WinSetOption filetype=python %{
366 set-option window formatcmd 'black -q -'
372 Use [Thonny-black-code-format](https://github.com/Franccisco/thonny-black-code-format).