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.
-
$VIMRUNTIME/indent/
-
~/.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:
- Uso
:verbose set indentexpr?
para encontrar qué archivo estaba causando la eliminación de sangría - Encontrar donde se cambia
indentexpr
(para mí fuesetlocal indentexpr=GetTeXIndent()
) - Cambie esa línea a
setlocal indentexpr&
apagueindentexpr
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.