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_ inside the virtualenv.
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_virtualenv` (defaults to `~/.vim/black` or `~/.local/share/nvim/black`)
115 - `g:black_quiet` (defaults to `0`)
116 - `g:black_preview` (defaults to `0`)
118 To install with [vim-plug](https://github.com/junegunn/vim-plug):
121 Plug 'psf/black', { 'branch': 'stable' }
124 or with [Vundle](https://github.com/VundleVim/Vundle.vim):
130 and execute the following in a terminal:
133 $ cd ~/.vim/bundle/black
134 $ git checkout origin/stable -b stable
137 or you can copy the plugin files from
138 [plugin/black.vim](https://github.com/psf/black/blob/stable/plugin/black.vim) and
139 [autoload/black.vim](https://github.com/psf/black/blob/stable/autoload/black.vim).
142 mkdir -p ~/.vim/pack/python/start/black/plugin
143 mkdir -p ~/.vim/pack/python/start/black/autoload
144 curl https://raw.githubusercontent.com/psf/black/stable/plugin/black.vim -o ~/.vim/pack/python/start/black/plugin/black.vim
145 curl https://raw.githubusercontent.com/psf/black/stable/autoload/black.vim -o ~/.vim/pack/python/start/black/autoload/black.vim
148 Let me know if this requires any changes to work with Vim 8's builtin `packadd`, or
151 This plugin **requires Vim 7.0+ built with Python 3.7+ support**. It needs Python 3.7 to
152 be able to run _Black_ inside the Vim process which is much faster than calling an
155 On first run, the plugin creates its own virtualenv using the right Python version and
156 automatically installs _Black_. You can upgrade it later by calling `:BlackUpgrade` and
159 If you need to do anything special to make your virtualenv work and install _Black_ (for
160 example you want to run a version from main), create a virtualenv manually and point
161 `g:black_virtualenv` to it. The plugin will use it.
163 To run _Black_ on save, add the following lines to `.vimrc` or `init.vim`:
166 augroup black_on_save
168 autocmd BufWritePre *.py Black
172 To run _Black_ on a key press (e.g. F9 below), add this:
175 nnoremap <F9> :Black<CR>
178 **How to get Vim with Python 3.6?** On Ubuntu 17.10 Vim comes with Python 3.6 by
179 default. On macOS with Homebrew run: `brew install vim`. When building Vim from source,
180 use: `./configure --enable-python3interp=yes`. There's many guides online how to do
183 **I get an import error when using _Black_ from a virtual environment**: If you get an
184 error message like this:
187 Traceback (most recent call last):
188 File "<string>", line 63, in <module>
189 File "/home/gui/.vim/black/lib/python3.7/site-packages/black.py", line 45, in <module>
190 from typed_ast import ast3, ast27
191 File "/home/gui/.vim/black/lib/python3.7/site-packages/typed_ast/ast3.py", line 40, in <module>
192 from typed_ast import _ast3
193 ImportError: /home/gui/.vim/black/lib/python3.7/site-packages/typed_ast/_ast3.cpython-37m-x86_64-linux-gnu.so: undefined symbool: PyExc_KeyboardInterrupt
196 Then you need to install `typed_ast` directly from the source code. The error happens
197 because `pip` will download [Python wheels](https://pythonwheels.com/) if they are
198 available. Python wheels are a new standard of distributing Python packages and packages
199 that have Cython and extensions written in C are already compiled, so the installation
200 is much more faster. The problem here is that somehow the Python environment inside Vim
201 does not match with those already compiled C extensions and these kind of errors are the
202 result. Luckily there is an easy fix: installing the packages from the source code.
204 The package that causes problems is:
206 - [typed-ast](https://pypi.org/project/typed-ast/)
208 Now remove those two packages:
211 $ pip uninstall typed-ast -y
214 And now you can install them with:
217 $ pip install --no-binary :all: typed-ast
220 The C extensions will be compiled and now Vim's Python environment will match. Note that
221 you need to have the GCC compiler and the Python development files installed (on
222 Ubuntu/Debian do `sudo apt-get install build-essential python3-dev`).
224 If you later want to update _Black_, you should do it like this:
227 $ pip install -U black --no-binary typed-ast
232 1. Install [`ale`](https://github.com/dense-analysis/ale)
236 1. Add this to your vimrc:
239 let g:ale_fixers = {}
240 let g:ale_fixers.python = ['black']
245 gedit is the default text editor of the GNOME, Unix like Operating Systems. Open gedit
252 1. `Go to edit > preferences > plugins`
253 1. Search for `external tools` and activate it.
254 1. In `Tools menu -> Manage external tools`
255 1. Add a new tool using `+` button.
256 1. Copy the below content to the code window.
260 Name=$GEDIT_CURRENT_DOCUMENT_NAME
264 - Set a keyboard shortcut if you like, Ex. `ctrl-B`
267 - Output: `Display in bottom pane` if you like.
268 - Change the name of the tool if you like.
270 Use your keyboard shortcut or `Tools -> External Tools` to use your new tool. When you
271 close and reopen your File, _Black_ will be done with its job.
273 ## Visual Studio Code
276 [Python extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
277 ([instructions](https://code.visualstudio.com/docs/python/editing#_formatting)).
279 - Alternatively the pre-release
280 [Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter)
281 extension can be used which runs a [Language Server Protocol](https://langserver.org/)
282 server for Black. Formatting is much more responsive using this extension, **but the
283 minimum supported version of Black is 22.3.0**.
287 Use [sublack plugin](https://github.com/jgirardet/sublack).
291 If your editor supports the [Language Server Protocol](https://langserver.org/) (Atom,
292 Sublime Text, Visual Studio Code and many more), you can use the
293 [Python LSP Server](https://github.com/python-lsp/python-lsp-server) with the
294 [python-lsp-black](https://github.com/python-lsp/python-lsp-black) plugin.
298 Use [python-black](https://atom.io/packages/python-black) or
299 [formatters-python](https://atom.io/packages/formatters-python).
301 ## Gradle (the build tool)
303 Use the [Spotless](https://github.com/diffplug/spotless/tree/main/plugin-gradle) plugin.
307 Add the following hook to your kakrc, then run _Black_ with `:format`.
310 hook global WinSetOption filetype=python %{
311 set-option window formatcmd 'black -q -'
317 Use [Thonny-black-code-format](https://github.com/Franccisco/thonny-black-code-format).