mac colorscheme colores color activar vim indentation file-type

colorscheme - set colors vim



Deshabilitar toda sangría automática en vim (4)

En TeX vim usualmente arruina mi sangría. Principalmente cuando estoy en una ecuación mostrada que creo debería verse así:

/[ x=/frac{y}{z} /]

donde el espacio en blanco delante de la x es una pestaña.

Cuando comienzo a escribir la ecuación, escribo primero las marcas /[ y /] y luego vuelvo entre ellas, escribiendo la pestaña y luego el resto de la ecuación.

Vim no hace nada malo hasta que tengo que usar algo que incorpora llaves ( /frac{} por ejemplo). Cuando escribo el cierre } vim cambia automáticamente la sangría de toda la línea a la izquierda, lo que deshace la pestaña escrita.

Esto es muy molesto, ¿cómo lo inhabilito?

mi .vimrc contiene:

"indentation set smartindent set autoindent set tabstop=5 set shiftwidth=5 filetype indent on


Acabo de pasar unas pocas horas trabajando con los dolores de sangrado con javascript, y la conclusión a la que llegué es que no elimine el filetype indent on de su vimrc.

Esta configuración proporciona la mejor sangría inteligente para múltiples tipos de archivos. Si está obteniendo malos resultados con esto, es probable que haya un problema de configuración.

Configuración de sangría específica de archivo

Entonces, si eres como yo, probablemente tuviste una filetype indent on en tu vimrc y no tenías idea de lo que estaba haciendo.

Todo lo que esta configuración hace es decirle a vim que busque archivos con reglas de sangría específicas del tipo de archivo. Hay algunos lugares donde se ve, pero probablemente solo hay dos en los que estarías interesado.

  1. $VIMRUNTIME/indent/
  2. ~/.vimrc/after/indent/

El primer lugar contiene las reglas de sangría predeterminadas que vienen con vim. Si filetype indent on que filetype indent on en una instalación vim nueva, aquí es de donde vendría toda la sangría inteligente. Por ejemplo, al abrir un archivo llamado index.html , obtendría las reglas de $VIMRUNTIME/indent/html.vim .

En mi experiencia, estas reglas predeterminadas son bastante buenas, pero otras configuraciones pueden desordenarlas.

El segundo lugar (el directorio after ) le permite agregar configuraciones que reemplazarán aquellas en primer lugar. Esto es bueno porque no tienes que editar los archivos predeterminados para personalizarlos.

Sabores de sangría

Hay algunas opciones de sangrado diferentes como las que has visto, y no todas juegan bien juntos. Desde la wiki de Vim:

autoindente

''autoindent'' no hace nada más que copiar la sangría de la línea anterior, al iniciar una nueva línea. Puede ser útil para archivos de texto estructurado, o cuando desea controlar la mayoría de la sangría manualmente, sin interferencia de Vim. ''autoindent'' no interfiere con otras configuraciones de sangrado, y algunos scripts de sangrado basados ​​en tipos de archivos incluso lo habilitan automáticamente.

Utilizo la filetype indent on y set autoindent en mi vimrc, ya que funcionan bien juntos. No tengo los otros establecidos.

smartindent & cindent

''smartindent'' inserta automáticamente un nivel adicional de sangría en algunos casos, y funciona para archivos tipo C. ''cindent'' es más personalizable, pero también más estricto cuando se trata de sintaxis. ''smartindent'' y ''cindent'' pueden interferir con la sangría basada en el tipo de archivo, y nunca deben usarse junto con él.

Cuando se trata de C y C ++, las indentaciones basadas en el tipo de archivo establecen automáticamente ''cindent'', y por esa razón, no hay necesidad de establecer ''cindent'' manualmente para dichos archivos. En estos casos, las opciones ''cinwords'', ''cinkeys'' y ''cinoptions'' siguen vigentes.

En general, ''smartindent'' o ''cindent'' solo deben configurarse manualmente si no está satisfecho con el funcionamiento de la sangría basada en el tipo de archivo.

indentexpr

Ejecuta los scripts de sangría de tipo de archivo que se encuentran en (vimfolder)/indent//(indentscripts) . Se menciona en la documentación de vim para el tipo de archivo, junto con los otros que acabo de mencionar (también, fue la causa del problema que estaba teniendo):

Restablezca ''autoindent'', ''cindent'', ''smartindent'' y / o ''indentexpr'' para deshabilitar la sangría en un archivo abierto.

Solución de problemas

Existe la posibilidad de que algún complemento malicioso cambie sus configuraciones de sangría y es por eso que está obteniendo malos resultados. Por suerte, verbose le dirá qué archivo fue el último en cambiar la opción en cuestión.

:verbose set autoindent? :verbose set cindent? :verbose set smartindent? :verbose set indentexpr?

Puede obtener un resultado como

indentexpr=SomeMessedUpValue Last set from ~/.vim/bundle/some_plugin/indent/plaintex.vim

Si eso sucede, puede mover ese archivo, cerrar y abrir vim, y ver si soluciona su problema.

Desactivar la configuración de sangría para TeX

Tal vez los valores predeterminados simplemente no lo están haciendo por usted, y usted quiere deshabilitar la configuración de sangría para TeX, pero deje todos los otros tipos de archivos solos. Puede hacerlo fácilmente configurando estos valores a sus valores predeterminados en un archivo en el directorio after .

No sé mucho sobre Tex o LaTex, pero cuando creé un archivo con la extensión .tex y ejecuté :filetype tenía el tipo de archivo como plaintex . Suponiendo que esto sea correcto, desearía crear un archivo, ~/.vim/after/indent/plaintex.vim . En ese archivo:

set autoindent& set cindent& set smartindent& set indentexpr&

Esto establecerá todos estos valores a sus valores predeterminados cada vez que abra un archivo .tex .


Elimine el set autoindent líneas set autoindent y set smartindent para eliminar toda la autoindentación vim.


Para cualquier persona que tenga un problema similar, una solución que funcionó para mí fue:

  1. Uso :verbose set indentexpr? para encontrar qué archivo estaba causando la eliminación de sangría
  2. Encontrar donde se cambia indentexpr (para mí fue setlocal indentexpr=GetTeXIndent() )
  3. Cambie esa línea a setlocal indentexpr& apague indentexpr

Esto eliminó todas las separaciones entre paréntesis, paréntesis y llaves.


Parece que hay una pequeña mezcla de términos en su pregunta. En resumen, el término autoindent apunta a un tipo especial de sangría que simplemente sigue el nivel de sangría de la línea anterior (lo cual es bastante útil a veces). Para eliminarlo, set noautoindent a mano o escríbalo en su _vimrc.

Hay otros dos tipos automáticos de sangría, cindent y cindent . Del mismo modo, si desea deshabilitarlos, vaya con set nocindent y set nosmartindent

Si buscas ayuda ( help autoindent , ...) todos están muy bien explicados. Cuál prefieres (o no) está determinado principalmente por tu estilo y hábitos de programación. Entonces, pruébalos y ve cuál te gusta más.

Desafortunadamente, no uso mucho más LaTeX, así que no estoy familiarizado con sus reglas internas de sangrado de tipo de archivo.