¿Qué configuración en vim contrarresta la negativa de smartindent a sangrar # comentarios en scripts de shell?

StackOverflow https://stackoverflow.com/questions/385327

  •  23-08-2019
  •  | 
  •  

Pregunta

Recientemente comencé a usar vim 7 (anteriormente vim 6) y el smartindent configuración.En su mayor parte, funciona bien, aunque estoy tan acostumbrado a escribir una tabulación después de una llave abierta que es casi contraproducente.

Sin embargo, hay un comportamiento maníaco.Al editar un script de shell, intento crear un comentario en el nivel de sangría actual, pero smartindent no tendrá nada que ver con eso.Insiste en que el comentario debe estar en el nivel 0 (sin sangría).Lo que es peor, se rompe shift-right ('>>' y amigos) para que no trabajen.Esto es una absoluta insubordinación y me gustaría saber cuál es la mejor manera de solucionarlo.

(Tampoco estoy interesado en smartindentLas ideas de sangría then después if.)

Las soluciones preferidas me ahorrarán ataques manuales: soy un vago.Una opción sería "apagar smartindent al editar scripts de shell (déjelo activado para el resto)'.Otra opción serían las pautas sobre cómo encontrar el script de control para smartindent y qué editar para cambiar las características que no me gustan.La última opción (que no necesito consejos sobre cómo hacer, sólo una pista de que es la mejor o única manera de restaurar la cordura) es dejar smartindent desarmado.

Vi la pregunta vagamente relacionada en "(PHP y) molestas reglas de indentación de vim";no me proporciona la respuesta directa, aunque tal vez la cindent y los elementos relacionados mencionados allí son, de hecho, parte de la respuesta.

¿Fue útil?

Solución

Encuentra el archivo de guión, (por ejemplo /usr/share/vim/vim71/indent/sh.vim en mi sistema)

Esta línea se ve como el problema:

setlocal indentkeys-=:,0#

Tal vez esto se puede solucionar en su .vimrc o cargar un archivo de guión personalizado manualmente.

editar:. Parece más complicado de lo que pensaba, pero tal vez hay algo establecido específicamente en el archivo de sangría que se necesitaría para fijar

2a Edición: Parece que yo estaba completamente equivocado, Salida:

La restauración de guión después de escribir de hash

o

howto

-configure-vim a-comments-en-el-principio-de-líneas, mientras que la edición no-puestos-

Otros consejos

Bueno, después de explorar algunas opciones, incluido el uso de ':set cindent' en lugar de ':set smartindent', terminé volviendo a usar simplemente ':set autoindent'.Probablemente hay maneras de hacer que esto funcione exactamente como quiero, pero es lo suficientemente complicado y complicado como para que no me moleste.he trabajado bien con autoindent durante los más de 20 años anteriores, y los beneficios de las campanas y silbatos adicionales proporcionados por smartindent son superados por lo que considero su mala conducta.

Gracias Juan por tu ayuda.Lo creas o no, ayudó mucho.

Sin embargo, también descubrí un par de otros comandos interesantes mientras seguía esto:

>i}
>a}

Estos desplazan hacia la derecha el bloque de código en el que se encuentra.El 'i' la versión sangra el cuerpo y no las llaves de cierre (mi estilo preferido), y el 'a' version aplica sangría a las llaves de cierre (la versión que se requiere en el trabajo).

Además, puedes aplicar calificadores a '%' en comandos ejecutados en el shell:

:make %:r.o

Esto ejecutaría make en la 'raíz' del nombre del archivo actual (es decir, '%:r') seguido por '.o'.O, en otras palabras, si estoy editando somefile.c, esto se ejecuta make somefile.o.

Añadir la siguiente línea en su .vimrc

guión tipo de archivo en

(que establecerá el modo de sangría derecha dependiendo del tipo de archivo)

Yo tenía el mismo problema durante mucho tiempo, hasta que me di cuenta de que el sangrado automático y smartindent son innecesarios si "guión tipo de archivo" se pone en su vimrc - 'filetype guión de' utiliza el guión / sh.vim (o lo que sea idioma) en el directorio de vim para averiguar las reglas de sangría, y el sangrado automático y smartindent ambos pueden interferir con él.

No he probado esto con sh, pero Perl repente empezó a comportarse adecuadamente cuando cambié.

Nota al margen: redirección de Juan, "Restauración de guión después de escribir de hash", no es una buena solución - aunque no corrige el problema en una situación (escribir código en), no cambia la forma en el editor piensa que debe tener una sangría, por lo que un nuevo guión (= visuales, o == normal) le mete de nuevo a la izquierda.

Tengo las siguientes líneas en mi .vimrc y no observo el problema.

set smartindent
inoremap # X^H#

Antes tenía set autoindent después de estas dos líneas, pero parece que no tiene ningún efecto.

Sí que es muy molesto. smartindent es realmente sólo para C como las lenguas. Veo cómo puedo activar la sangría adecuada en función de la lengua en: http://www.pixelbeat.org/settings/.vimrc

La respuesta anterior sugiere:

: inoremap # X ^ H #

es excelente. Es la respuesta sugerida por la documentación VIM en ": ayuda smartindent". Tenga en cuenta que H ^ se introduce mediante CTRL-V CTRL-H. La sección pertinente de la documentación se encuentra por debajo.

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top