--- title: "SpaceVim lang#python layer" description: "This layer is for Python development, provide autocompletion, syntax checking, code format for Python file." --- # [Available Layers](../../) >> lang#python - [Description](#description) - [Features](#features) - [Install](#install) - [enable layer](#enable-layer) - [language tools](#language-tools) - [Configuration](#configuration) - [Key bindings](#key-bindings) - [Jump to definition](#jump-to-definition) - [Code generation](#code-generation) - [Code Coverage](#code-coverage) - [Text objects and motions](#text-objects-and-motions) - [Inferior REPL process](#inferior-repl-process) - [Running current script](#running-current-script) - [Testing](#testing) - [Refactoring](#refactoring) ## Description This layer is for Python development. ## Features - Auto-completion using [deoplete-jedi](https://github.com/zchee/deoplete-jedi) or [jedi-vim](https://github.com/davidhalter/jedi-vim) - Documentation Lookup using [jedi-vim](https://github.com/davidhalter/jedi-vim) ## Install ### enable layer To use this configuration layer, add following snippet to your custom configuration file. ```toml [[layers]] name = "lang#python" ``` ### language tools **syntax checking:** `checker` layer provide syntax checking feature, and for Python it uses `flake8` package: ```sh pip install --user flake8 ``` **code formatting:** The default key binding for formatting buffer is `SPC b f`, and you need to install `yapf`. To enable automatic buffer formatting on save, load this layer with setting `format_on_save` to `1`. ```toml [[layers]] name = "lang#python" format_on_save = 1 ``` ```sh pip install --user yapf ``` To use other tool as the format command, for example `black`, change the neoformat option in bootstrap function. ```viml let g:neoformat_python_black = { \ 'exe': 'black', \ 'stdin': 1, \ 'args': ['-q', '-'], \ } let g:neoformat_enabled_python = ['black'] ``` **format imports:** To be able to suppress unused imports easily, install [autoflake](https://github.com/myint/autoflake): ```sh pip install --user autoflake ``` To be able to sort your imports, install [isort](https://github.com/timothycrosley/isort) ```sh pip install --user isort ``` **code coverage:** To be able to show code coverage, install coverage.py ```sh pip install --user coverage ``` ## Configuration By default, when create a new python file, SpaceVim will insert file head automatically. to change the file head, use `python_file_head` option: ```toml [[layers]] name = "lang#python" python_file_head = [ '#!/usr/bin/env python', '# -*- coding: utf-8 -*-', '', '' ] ``` When enable autocomplete layer, the symbol will be complete automatically. By default the type info is disabled, because it is too slow. To enable type info: ```toml [[layers]] name = "lang#python" enable_typeinfo = true ``` By default, the python layer utilizes `neomake` for syntax checking, and the default python executable is simply `python`. Note that the python version is up to your system configuration. If the system (or environment) python version is 2, one can have the following configuration in the bootstrap function for syntax checking on python3: ```vim let g:neomake_python_python_exe = 'python3' ``` ## Key bindings ### Jump to definition | Mode | Key Bindings | Description | | ------ | ------------ | ------------------------------------------------ | | normal | `g d` | Jump to the definition position of cursor symbol | ### Code generation | Mode | Key Binding | Description | | ------ | ----------- | ------------------ | | normal | `SPC l g d` | Generate docstring | ### Code Coverage | Mode | Key Binding | Description | | ------ | ----------- | ----------------- | | normal | `SPC l c r` | coverager report | | normal | `SPC l c s` | coverager show | | normal | `SPC l c e` | coverager session | | normal | `SPC l c f` | coverager refresh | ### Text objects and motions This layer contains vim-pythonsense which provides text objects and motions for Python classes, methods, functions, and doc strings. | Text Objects | Descriptions | | ------------ | ------------------------ | | `ac` | Outer class text object. | ### Inferior REPL process Start a Python or iPython inferior REPL process with `SPC l s i`. If `ipython` is available in system executable search paths, `ipython` will be used to launch Python shell; otherwise, default `python` interpreter will be used. You may change your system executable search path by activating a virtual environment. Send code to inferior process commands: | Key Bindings | Descriptions | | ------------ | ------------------------------------------------ | | `SPC l s b` | send buffer and keep code buffer focused | | `SPC l s l` | send line and keep code buffer focused | | `SPC l s s` | send selection text and keep code buffer focused | ### Running current script To running a Python script, you can press `SPC l r` to run current file without loss focus, and the result will be shown in a runner buffer. ### Testing ### Refactoring | Key Bindings | Descriptions | | ------------ | ------------------------------------ | | `SPC l i r` | remove unused imports with autoflake | | `SPC l i s` | sort imports with isort |