Reputation: 1987
I get the following behavior. Given this settings.py
snippet, hitting 'o' from line 33
31# Application definition
32
33 INSTALLED_APPS = [
34 'rest_framework',
I get this
31# Application definition
32
33 INSTALLED_APPS = [
34 |<-cursor is here, two indents, 8 spaces
35 'rest_framework',
What I really want would be one indent, or a total of 4 spaces, in line with the rest of the list. What gives? I'm using the following .vimrc which I mostly cribbed from here.
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" Themes
Plugin 'altercation/vim-colors-solarized'
Plugin 'jnurmine/Zenburn'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
if has('gui_running')
set background=dark
colorscheme solarized
else
colorscheme zenburn
endif
au BufNewFile,BufRead *.py set tabstop=4 shiftwidth=4 textwidth=79 expandtab autoindent fileformat=unix
set encoding=utf-8
set nu
let python_highlight_all=1
syntax on
set backspace=indent,eol,start
Upvotes: 11
Views: 1918
Reputation: 4192
Checkout :h ft-python-indent
in your vim to see the most recent documentation on python indents. In general, you should do
filetype plugin indent on
let g:python_indent = {}
let g:python_indent.open_paren = 'shiftwidth()'
let g:python_indent.closed_paren_align_last_line = v:false
And then you should get expected behavior. Check the ft-python-indent help page for any further information.
Upvotes: 1
Reputation: 35042
According to the code of python.vim
provided by @Alik, you can notice that it inserts 2 shiftwidth
by default.
return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2))
But you can change this using the g:pyindent_open_paren
variable.
For instance:
let g:pyindent_open_paren=shiftwidth()
Or
let g:pyindent_open_paren=4
Upvotes: 9
Reputation: 25379
This happens because of default vim indentation plugin for Python. It inserts 2 shiftwidth
on the first line below [
.
You can see code which causes this behaviour here: https://github.com/vim/vim/blob/0b9e4d1224522791c0dbbd45742cbd688be823f3/runtime/indent/python.vim#L74
I would recommend you to install vim-python-pep8-indent
plugin which does indentation inside parenthesis exactly as you need.
Upvotes: 9