Cómo configurar vim para que no ponga comentarios al comienzo de las líneas mientras se editan los archivos python

votos
47

Cuando agrego un # en el modo de inserción en una línea vacía en Vim mientras edito los archivos de python, vim mueve el # al principio de la línea, pero me gustaría que el # se inserte en el nivel de pestañas donde lo ingresé.

Por ejemplo, al escribir esto en vim

for i in range(10):
    #

el # no se queda allí donde ingresé.

Se mueve así, por vim.

for i in range(10):
#

¿Alguien sabe de un elemento de configuración en vim que cambiaría esto?

Si ayuda, estoy usando Ubuntu 8.10.

Publicado el 09/12/2008 a las 21:21
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
31

Encontré una respuesta aquí http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

Parece que la opción vim smartindent es la causa del problema. La página de referencia anterior describe work-a-rounds pero después de leer la ayuda en smartindent en vim (: help smartindent), decidí probar cindent en lugar de smartindent.

Reemplacé

set smartindent

con

set cindent

en mi archivo .vimrc

y hasta ahora está funcionando perfectamente.

Esto también cambió el comportamiento de '<<' y '>>' para sangrar bloques visuales que incluyen comentarios de pitón.

Hay más opciones de configuración e información sobre la sangría en la ayuda de vim para smartindent y cindent (: help smartindent y: help cindent).

Respondida el 09/12/2008 a las 23:07
fuente por usuario

votos
19

@PolyThinker Aunque veo esa respuesta a esta pregunta, en mi opinión no es una buena solución. El editor todavía piensa que debe estar sangrado todo el camino hacia la izquierda; verifique esto presionando == en una línea que comience con un hash, o presionando = mientras que un bloque de código con comentarios en él se resaltará para reiniciar.

Lo recomiendo encarecidamente filetype indent on, y elimine las líneas set smartindenty set autoindent(o set cindent) de su vimrc. Alguien más (al parecer, David Bustos) tuvo la amabilidad de escribir un analizador de sangría completo para nosotros; está ubicado en $ VIMDIRECTORY / indent / python.vim.

(La cindentsolución de Pablo probablemente funciona para python, pero filetype indent ones mucho más útil en general).

Respondida el 22/04/2009 a las 15:07
fuente por usuario

votos
10

Tengo las siguientes líneas en mi .vimrc, parece que está instalado por defecto con mi Ubuntu 8.10

set smartindent
inoremap # X^H#
set autoindent

Y no observo el problema. Tal vez puedas probar esto. (Tenga en cuenta que ^ H debe ingresarse mediante Ctrl-V Ctrl-H)

Respondida el 22/12/2008 a las 08:27
fuente por usuario

votos
4

Mi solución a la ausencia lo de #:

Si utiliza cindent, reconocer que está diseñado para C y C ++ codificación. Aquí, un # significa que está creando un #DEFINE o #macro (), por lo que el comportamiento es correcto. Sin embargo, para otros idiomas, donde # es un comentario, es irritante.

A continuación trabajó para mí:

" cindent       enable specific indenting for C code
" set cin       nocin
set cin

" cinkeys       The default cinkeys causes leading # to unindent to column 0.
"               To prevent this, remove the 0# from the definition.
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default
set cinkeys=0{,0},0),:,!^F,o,O,e
Respondida el 15/05/2014 a las 16:57
fuente por usuario

votos
2

Algunas de las otras respuestas fueron útiles, pero ninguno fue suficiente para evitar que Vim de reindenting una línea cuando '#' es el primer carácter. La respuesta de PolyThinker no funcionó para mí, pero le dio un indicio de que '#' podría volver a asignar a "insertar un carácter, a continuación, #, a continuación, eliminar el carácter adicional y poner el cursor donde debe estar". Esto es la asociación que hace eso:

inoremap # X#<left><backspace><right>

Esto es necesario porque los paquetes de sintaxis de vim parecen tratar '#' como un carácter especial, no importa cómo se establecen las opciones. Quiero una línea comenzó con '#' para ser el mismo que una línea iniciada con cualquier otro carácter. La solución más fiable que he encontrado es el mapeo anterior, que en realidad no cambiar el primer carácter de la línea.

Nota: Me he encontrado este mapeo causa problemas después de ejecutar I#<esc>pulsando a continuación "" volver a hacer la inserción anterior. No he encontrado todavía una solución.

Respondida el 20/09/2017 a las 02:07
fuente por usuario

votos
2

Es causado por la función 'smartindent'. Si tiene :set smartindentsu .vimrc, necesita eliminarlo.

Respondida el 22/12/2008 a las 03:13
fuente por usuario

votos
1

Mi configuración de Vim no hace eso. Puede probar el script python.vim disponible desde este enlace: http://www.vim.org/scripts/script.php?script_id=790

Respondida el 09/12/2008 a las 22:18
fuente por usuario

votos
0

He quitado set smartindentdesde ~/.vimrcpero todavía no se ha desactivado smartindent. Cuando abrí un archivo .py y encontré :set smartindent?que aparece smartindent.

Resulta que más abajo en la ~/.vimrcera de esta línea:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
                         ^^^^^^^^^^^

Una vez que he eliminado "smartindent" de esa línea, entonces smartindent finalmente fue desactivado y mis comentarios eran sangría correctamente de nuevo.

Respondida el 04/06/2014 a las 19:38
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more