vim-python-pep8-indent


Ⅰ. 插件描述

A nicer Python indentation style for vim.

Ⅱ. 基本信息

创建日期:  2012-06-26
使用用户:  976
Github星:  581
插件作者:  Vimjas

Ⅲ. 安装方法

使用Vundle管理器安装

在你的.vimrc下添加:
Plugin 'hynek/vim-python-pep8-indent'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall

对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。

使用NeoBundle管理器安装

在你的.vimrc下添加:
NeoBundle 'hynek/vim-python-pep8-indent'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall

使用VimPlug管理器安装

在你的.vimrc下添加:
Plug 'hynek/vim-python-pep8-indent'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall

使用Pathogen管理器安装

在终端中运行以下命令:
cd ~/.vim/bundle
git clone https://github.com/hynek/vim-python-pep8-indent

Ⅳ. 文档说明

vim-python-pep8-indent

.. image:: https://circleci.com/gh/Vimjas/vim-python-pep8-indent.svg?style=svg
:target: https://circleci.com/gh/Vimjas/vim-python-pep8-indent
.. image:: https://codecov.io/gh/Vimjas/vim-python-pep8-indent/branch/master/graph/badge.svg
:target: https://codecov.io/gh/Vimjas/vim-python-pep8-indent

This small script modifies Vim_’s indentation behavior to comply with PEP8_ and my aesthetic preferences.
Most importantly::

foobar(foo,

      bar)

and::

foobar(

  foo,
  bar

)

Installation

Install the plugin using your favorite plugin manager / method, a few examples
follow:

Pathogen
^^^^^^^^

Follow the instructions on installing Pathogen_ and then:

.. code-block:: shell-session

$ cd ~/.vim/bundle
$ git clone https://github.com/Vimjas/vim-python-pep8-indent.git

Vundle
^^^^^^

Follow the instructions on installing Vundle_ and add the appropriate plugin line into your .vimrc:

.. code-block:: vim

Plugin 'Vimjas/vim-python-pep8-indent'

NeoBundle
^^^^^^^^^

Follow the instructions on installing NeoBundle_ and add the appropriate NeoBundle line into your .vimrc:

.. code-block:: vim

NeoBundle 'Vimjas/vim-python-pep8-indent'

Configuration

g:python_pep8_indent_multiline_string
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

You can configure the initial indentation of multiline strings using g:python_pep8_indent_multiline_string (which can also be set per buffer).
This defaults to 0, which means that multiline strings are not indented.
-1 and positive values will be used as-is, where -1 is a special value for Vim's indentexpr, and will keep the existing indent (using Vim's autoindent setting).
-2 is meant to be used for strings that are wrapped with textwrap.dedent etc. It will add a level of indentation if the multiline string started in the previous line, without any content in it already::

testdir.makeconftest("""

   _

With content already, it will be aligned to the opening parenthesis::

testdir.makeconftest("""def pytest_addoption(parser):

                    _

Existing indentation (including 0) in multiline strings will be kept, so this setting only applies to the indentation of new/empty lines.

g:python_pep8_indent_hang_closing
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Control closing bracket indentation with python_pep8_indent_hang_closing, set globally or per buffer.

By default (set to 0), closing brackets line up with the opening line::

my_list = [

   1, 2, 3,
   4, 5, 6,

]
result = some_function_that_takes_arguments(

   'a', 'b', 'c',
   'd', 'e', 'f',

)

With python_pep8_indent_hang_closing = 1, closing brackets line up with the items::

my_list = [

   1, 2, 3,
   4, 5, 6,
   ]

result = some_function_that_takes_arguments(

   'a', 'b', 'c',
   'd', 'e', 'f',
   )

Troubleshooting

In case it is not working, please make sure your Vim is configured to load
indent files (filetype indent on).
This is typically the case when using a plugin manager, but check its docs.

Check :verbose set indentexpr? in a Python file, which should show
something like the following:

indentexpr=GetPythonPEPIndent(v:lnum)

    Last set from ~/…/plugged/vim-python-pep8-indent/indent/python.vim

Notes

Please note that Kirill Klenov’s python-mode_ ships its own version of this bundle.
Therefore, if you want to use this version specifically, you’ll have to disable python-mode’s using:

.. code-block:: vim

let g:pymode_indent = 0

License and Authorship

This script is based on one from Vim’s official script repo_ that was not originally written by me.
Unfortunately the indentation was off by one character in one case and the script hasn’t been updated since 2005.

Even more unfortunately, I wasn’t able to reach any of the original authors/maintainers:
David Bustos and Eric Mc Sween.

So I fixed the annoyance with the help of Steve Losh_ and am putting it out here so you don’t have to patch the original yourself.
The original patch is still available here_.

Over the time a lot more improvements have been contributed_ by generous people_.

I’d like to thank the original authors here for their work and release it hereby to the Public Domain (using the CC0_ licence) since I hope that would be in their spirit.
If anyone with a say in this objects, please let me_ know immediately.
Also, if someone is in contact with one of them, I would appreciate being introduced.

While my Vimscript_ skills are still feeble, I intend to maintain it for now.
This mainly means that I’ll triage through bugs and pull requests but won’t be fixing much myself.

.. _Vim: http://www.vim.org/
.. _PEP8: http://www.python.org/dev/peps/pep-0008/
.. _script repo: http://www.vim.org/scripts/script.php?script_id=974
.. _Steve Losh: http://stevelosh.com/
.. _here: https://gist.github.com/2965846
.. _Neobundle: https://github.com/Shougo/neobundle.vim
.. _Pathogen: https://github.com/tpope/vim-pathogen
.. _python-mode: https://github.com/klen/python-mode
.. _Vimscript: http://learnvimscriptthehardway.stevelosh.com/
.. _vundle: https://github.com/gmarik/Vundle.vim
.. _me: https://hynek.me/
.. _CC0: http://creativecommons.org/publicdomain/zero/1.0/
.. _contributed: https://github.com/hynek/vim-python-pep8-indent/blob/master/CONTRIBUTING.rst
.. _generous people: https://github.com/hynek/vim-python-pep8-indent/graphs/contributors

添加新评论