python vim indentation

Vim elimina automáticamente la sangría en los comentarios de Python



indentation (5)

Configurar smartindent hace que Vim se comporte como me describes, mientras que con nosmartindent (que es lo que nosmartindent usar) se comporta como prefieres.

Actualización: de los documentos en smartindent :

Al escribir ''#'' como primer carácter en una nueva línea, se elimina la sangría de esa línea, el ''#'' se coloca en la primera columna. La sangría se restaura para la siguiente línea. Si no quiere esto, use esta asignación: ": inoremap # X ^ H #", donde ^ H se ingresa con CTRL-V CTRL-H. Cuando se usa el comando ">>", las líneas que comienzan con ''#'' no se desplazan hacia la derecha.

Eso parece ser eso.

Actualización: Probablemente no sea necesario preocuparse por lo siguiente ... Lo dejaré aquí para obtener un valor informativo adicional. ;-)

Si la configuración de nosmartindent no ayuda, quizás podría usar el comando :set - sin parámetros - para obtener la lista de todas las configuraciones en vigencia en su sesión de Vim, y luego pegarla en algún lugar (en Pastie quizás). Hay algunas otras opciones que afectan la sangría automática, por lo que recuerdo.

Estoy usando Vim y editando scripts de Python.

Autoindent funciona bastante bien en general, pero cuando comienzo una nueva línea y escribo ''#'' para escribir un comentario, Vim desenlaza esa línea para mí.

Por ejemplo, si tiene

def foo():

y presiono enter, Vim sangrará apropiadamente

def foo(): pass

pero, si en lugar de escribir pass , escribo # , se desencripta automáticamente

def foo(): # comment class Thing(): def __init__(self): pass # comment line gets unindented all the way

mi archivo .vimrc sigue. Alguien sabe por qué está pasando esto?

set tabstop=4 set smartindent set shiftwidth=4 set expandtab set backspace=indent,eol,start set scrolloff=3 set statusline=%f%m%r%h%w/ [%Y/ %{&ff}]/ [%l/%L/ (%p%%)] set laststatus=2


Por alguna razón desconocida, el comportamiento anterior fue causado cuando tenía cindent . Apagarlo lo solucionó por mí. Ninguna de las otras soluciones anteriores ayudó.


Puede probar una opción solo para archivos Python:

autocmd BufRead *.py inoremap # X<c-h>#<space>


Si bien la publicación de Michał explica lo que hace el smartindent, puedes hacer mucho más que simplemente apagarlo. Puede configurarlo más a su gusto, o mejor aún, deje que Vim elija una mejor sangría para usted. Con lo siguiente en su vimrc en lugar de otras configuraciones de sangrado:

filetype indent on

Vim usará automáticamente el complemento apropiado para Python. Esto es mucho mejor que simplemente no eliminar el sangriento de una línea #, prácticamente todo debe estar adecuadamente sangrado.