¿Cómo configuro la autoindentación de Vim correctamente para editar archivos Python?

82

Tengo problemas para configurar Vim (7.1.xxx) para editar archivos Python (* .py). La sangría parece estar rota (4 espacios óptimos). Seguí algunos tutoriales que encontré a través de Google. Aún sin efecto: / Por favor ayuda.

M_1
fuente
2
¿Cuál es exactamente tu problema? ¿Cómo se rompe la sangría?
cschol
1
¿Qué plataforma estás usando? Windows / Mac / Linux?
Jamie

Respuestas:

74

Yo uso esto en mi macbook:

" configure expanding of tabs for various file types
au BufRead,BufNewFile *.py set expandtab
au BufRead,BufNewFile *.c set expandtab
au BufRead,BufNewFile *.h set expandtab
au BufRead,BufNewFile Makefile* set noexpandtab

" --------------------------------------------------------------------------------
" configure editor with tabs and nice stuff...
" --------------------------------------------------------------------------------
set expandtab           " enter spaces when tab is pressed
set textwidth=120       " break lines when line length increases
set tabstop=4           " use 4 spaces to represent tab
set softtabstop=4
set shiftwidth=4        " number of spaces to use for auto indent
set autoindent          " copy indent from current line when starting a new line

" make backspaces more powerfull
set backspace=indent,eol,start

set ruler                           " show line and column number
syntax on               " syntax highlighting
set showcmd             " show (partial) command in status line

(editado para mostrar solo cosas relacionadas con sangría / tabulaciones)

Daren Thomas
fuente
1
No use pestañas al editar lenguajes de estilo C. s / noexpandtab / expandtab
badeip
@AlexKreimer probablemente tengas razón, escribí esto en 2008, eso fue hace mucho tiempo. Me encantaría actualizarlo, pero he dejado de usar vim para la mayoría de las cosas. ¡Asegúrese de volver aquí y publicar un enlace a una mejor respuesta (o escribir una usted mismo) cuando encuentre una mejor solución!
Daren Thomas
@DarenThomas IMO, una respuesta muy desactualizada
Alex Kreimer
15

Yo suelo:

$ cat ~/.vimrc
syntax on
set showmatch
set ts=4
set sts=4
set sw=4
set autoindent
set smartindent
set smarttab
set expandtab
set number

Pero pero voy a probar las entradas de Daren

thanos
fuente
2
Tenga en cuenta que smartindentsolo es adecuado para editar archivos C, no archivos Python (y de todos modos ya está en desuso; consulte stackoverflow.com/a/234578/37639 ).
corwin.amber
12

Una opción más simple: simplemente descomente la siguiente parte de la configuración (que originalmente está comentada) en el archivo / etc / vim / vimrc:

    if has("autocmd")
      filetype plugin indent on
    endif
Teddy Belay
fuente
3

Asegúrese de que está editando el archivo de configuración correcto para VIM. Especialmente si está utilizando Windows, donde el archivo podría llamarse _vimrc en lugar de .vimrc como en otras plataformas.

En tipo vim

:help vimrc

y verifique su ruta al archivo _vimrc / .vimrc con

:echo $HOME

:echo $VIM

Asegúrate de estar usando solo un archivo. Si desea dividir su configuración en partes más pequeñas, puede obtener otros archivos desde dentro de su archivo _vimrc.

:help source

Jamie
fuente
1

Combinando las soluciones propuestas por Daren y Thanos tenemos un buen archivo .vimrc.

-----
" configure expanding of tabs for various file types
au BufRead,BufNewFile *.py set expandtab
au BufRead,BufNewFile *.c set noexpandtab
au BufRead,BufNewFile *.h set noexpandtab
au BufRead,BufNewFile Makefile* set noexpandtab

" --------------------------------------------------------------------------------
" configure editor with tabs and nice stuff...
" --------------------------------------------------------------------------------
set expandtab           " enter spaces when tab is pressed
set textwidth=120       " break lines when line length increases
set tabstop=4           " use 4 spaces to represent tab
set softtabstop=4
set shiftwidth=4        " number of spaces to use for auto indent
set autoindent          " copy indent from current line when starting a new line
set smartindent
set smarttab
set expandtab
set number

" make backspaces more powerfull
set backspace=indent,eol,start

set ruler                           " show line and column number
syntax on               " syntax highlighting
set showcmd             " show (partial) command in status line

Flávio Brito
fuente
0

para una edición de Python más avanzada, considere instalar el complemento vim simplefold . le permite hacer un plegado de código avanzado usando expresiones regulares. Lo uso para plegar las definiciones de mi clase y método para una edición más rápida.

Gabor
fuente