2010-01-06 14 views
11

Tengo Vim 7 (mejorado) en CentOS 5, y viene con todos los plugins/scripts habituales de Vim listos para funcionar.¿La sangría de Vim Python no funciona?

$ find /usr/share/vim/vim70/ -name \*python\* 
/usr/share/vim/vim70/syntax/python.vim 
/usr/share/vim/vim70/ftplugin/python.vim 
/usr/share/vim/vim70/indent/python.vim 
/usr/share/vim/vim70/autoload/pythoncomplete.vim 

Me gustaría pensar que cuando se abre un archivo con extensión .py (vim file.py) que se carga automáticamente estos plugins, pero no estoy seguro de que es el caso. Lo que quiero es:

Presione TAB y reciba cuatro espacios. Sangría automática en la siguiente línea para suites, condicionales, etc.

Esto funciona al establecer explícitamente tabstop, shiftwidth, etc. en mi archivo .vimrc. ¿No es esto para lo que están los archivos Python? ¿Por qué tengo que configurar estas cosas en mi .vimrc? ¿Cómo obtengo estas características de los complementos de Vim?

.vimrc actual:

syntax on 
set hls 
set expandtab 
set textwidth=0 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set autoindent 
set backspace=indent,eol,start 
set incsearch 
set ignorecase 
set ruler 
set wildmenu 
set smarttab 
filetype indent on 
filetype on 
filetype plugin on 

Respuesta

2

Ajuste tabstop, shiftwidth, etc ... en su vimrc es correcta. Configuran la configuración global y sirven como parámetros para el soporte de sangría específico de tipo de archivo.

Los complementos de sangría de idioma utilizan esta configuración, pero generalmente también establecen una expresión de sangría (:he inde) apropiada para el idioma. Por lo tanto, el penetrador de Python debería sangrar automáticamente después de una instrucción de apertura de bloque (def, clase, para ...) y dedenar después de una de cierre (return, pass, continue ...) y hacerlo de acuerdo con ts, sw, ... ha establecido.

Si aún no está seguro de si el complemento se está cargando para un búfer, simplemente haga :filetype para mostrar los ajustes de detección, complemento y sangría, y :set ft? para ver el tipo detectado.

+0

Entonces, para resumir el archivo ../indent/python.vim no es capaz de establecer la tabstop, shiftwidth, etc ... para mí por lo que se debe especificar en el vimrc? ¿Qué sucede si quiero que tabstop sea diferente según el tipo de archivo? ¿Puedo colocar estas configuraciones de vimrc en el archivo indent/python.vim para que solo las carguen para los archivos de Python? – CarpeNoctem

+0

Puede agregar esas configuraciones a indent/python.vim y obtener ese resultado, pero una forma mejor sería agregar configuraciones específicas de tipo de archivo como autocmds que se ejecutarán después de cargar un búfer. (: él au) – abeyer

5

Mi comprensión es que el archivo python.vim es simplemente un archivo de resaltado de sintaxis, porque los archivos de Python se pueden sangrar de varias maneras. PEP8 prescribe cuatro espacios, pero los archivos heredados pueden ser diferentes, incluyendo el uso de pestañas.

Algunos de nuestros archivos heredados de Python utilizan dos espacios por sangrado. Así que dejo el guion de Python a Vim y lo configuro por archivo y por tipo de archivo. La siguiente línea en .vimrc me da configuraciones específicas de Python que difieren de decir mi xml, xhtml y html (dos espacios).

au FileType python setl shiftwidth=4 tabstop=4 

También puede establecer la configuración específica de un archivo con modeline que es práctico si usted tiene archivos heredados.

# vi: set tabstop=2 expandtab textwidth=70 filetype=python: 
Cuestiones relacionadas