¿Podría alguien explicarme en términos simples la manera más fácil de cambiar el comportamiento de indentación de Vim según el tipo de archivo? Por ejemplo, si abro un archivo de Python debería sangrar con 2 espacios, pero si abro un script de Powershell debería usar 4 espacios.Cambiando el comportamiento de sangría de Vim por tipo de archivo
Respuesta
Puede agregar .vim
archivos para ejecutar cada vez que vim cambie a un tipo de archivo en particular.
Por ejemplo, tengo un archivo ~/.vim/after/ftplugin/html.vim
con el siguiente contenido:
setlocal shiftwidth=2
setlocal tabstop=2
¿Qué hace que vim a usar pestañas con una anchura de 2 caracteres para sangrar (la opción noexpandtab
se establece a nivel mundial en otras partes de la configuración de mi).
Esto se describe aquí: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4, desplácese hacia abajo a la sección de plugins de tipo de archivo.
Debería poner eso en '~/.vim/after/ftplugin/html.vim' en su lugar. Pero como otros han señalado a continuación, es mucho más agradable agregar 'autocmd FileType html setlocal shiftwidth = 2 tabstop = 2' a su' .vimrc'. –
Vaya, en realidad, ese/es/donde tengo ese archivo. Repararé la respuesta. No estoy de acuerdo, creo que separar los comandos para diferentes tipos de archivos en archivos separados hace que todo sea mucho más fácil, especialmente si tiene requisitos para muchos tipos de archivos o muchas opciones para algunos tipos de archivos. – SpoonMeiser
En realidad, no hay muchas razones para usar el directorio posterior de ftplugins. Vim cargará todos los que encuentre en su runtimepath, no solo los primeros como para los archivos de sintaxis. – graywh
comandos Poner autocmd basado en el sufijo de archivo en el directorio ~/.vimrc
autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile *.pl syntax on
Los comandos que está buscando son probablemente ts = y sw =
¿Cuál es la ventaja de esto sobre 'FileType'? –
¿Hay alguna forma de invertir el partido? – SystemParadox
He tenido problemas para hacer que los tipos de archivos funcionen con archivos html (ya que el archivo .html no es realmente HTML, sino un archivo HTML de plantilla con un lenguaje de plantillas). Filetypes no parece reconocerlo como html, pero este método sí lo hará. –
por lo general trabajan con expandtab
conjunto, pero eso es malo para makefiles. Recientemente he añadido:
:autocmd FileType make set noexpandtab
hasta el final de mi archivo .vimrc y reconoce Makefile, makefile, y * .mk como archivos make y no se expande pestañas. Presumiblemente, puedes extender esto.
La mejor opción es habilitar: filetype plugins. El predeterminado para Vim incluye: setl noet, por lo que ni siquiera necesita ese aucmd en su vimrc. – graywh
OK. ¿Puedes explicar los beneficios de eso y qué implica hacerlo? ¿Por qué los plugins de tipo de archivo son mejores que autocmd? ¿Cuándo se debe usar autocmd? ¿No utilizado? –
Los complementos de tipo de archivo que vienen con Vim harán cosas útiles como "setlocal noexpandtab" para makefiles, por ejemplo. Los autocomandos contra ftplugins para cosas personales como shiftwidth no importan, es solo la forma en que eliges estructurar tu configuración de vim. – graywh
Utilice ftplugins u órdenes automáticas para establecer las opciones. (: H ftplugin para más información)
En ~/.vim/ftplugin/python.vim:
setlocal sw=2 sts=2 et
Y no se olvide de volver a conectarlos en ~/.vimrc
filetype plugin indent on
O en ~/.vimrc
au FileType python setl sw=2 sts=2 et
también sugeriría aprender la diferencia entre 'ts' y '' pts. Mucha gente no sabe acerca de 'pts'.
Gracias! También gracias por ese poco sobre 'ts' y 'sts'. ¿Hay alguna página en particular que recomiendes que discuta esta diferencia y cómo usarla? – jvriesem
@jvriesem No hay mucho que hacer: 'ts' es cómo se muestran los tabuladores; 'sts' es la cantidad de "espacios" para insertar cuando se presiona la tecla de tabulación; 'sw' es cuántos "espacios" usar por nivel de sangría; 'et' es si usar espacios o pestañas; 'sta' le permite insertar 'sw' "espacios" cuando presiona tabulador al principio de una línea. – graywh
Me pregunto si sería mejor utilizar los formularios completos, para mayor claridad, en lugar de la frase breve al final. – icedwater
Si bien puede configurar la sangría de Vim simplemente utilizando el complemento de sangrado o manualmente usando la configuración, le recomiendo usar un script de Python llamado Vindect que establece automáticamente la configuración relevante para usted cuando abre un archivo de Python. Use this tip para hacer que el uso de Vindect sea aún más efectivo. Cuando comencé a editar archivos python creados por otros con varios estilos de sangría (tabulación frente a espacio y cantidad de espacios), fue increíblemente frustrante.Pero Vindect junto con this indent file
Recomendamos:
Esto podría ser conocido por la mayoría de nosotros, pero de todos modos (Yo estaba perplejo mi primera time): haciendo :set et
(:set
expandtabs) no cambia la t abs que ya existe en el archivo, uno tiene que hacer :retab
. Por ejemplo:
:set et
:retab
y las pestañas en el archivo se sustituyen por espacios suficientes. Para tener pestañas hacia atrás, simplemente hacer:
:set noet
:retab
Siempre me sorprende por las personas que cambian el tamaño de las pestañas para diferentes tipos de archivos. ¿Qué diablos haces cuando miras un archivo usando menos?
Personalmente, yo uso estos ajustes en .vimrc:
autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
Muchos idiomas tienen convenciones establecidas hace mucho tiempo, al igual que ciertas compañías. Tome NodeJS como un ejemplo de lo primero. Las pestañas deben ser dos espacios.Dolor de cabeza, y bastante tonto, pero importante. –
¿Por qué las pestañas deben ser iguales para todas las circunstancias? Para un archivo de configuración, 8 pestañas espaciales funcionan bien, pero para el código con muchas sangrías, 2 es mucho más fácil de administrar. Y luego hay convenciones fijas: node.js debe tener 2 pestañas de espacio, y python es sintácticamente inválido con cualquier cosa que no sean 4 pestañas de espacio. – felixphew
@felixphew Python es perfectamente correcto con cualquier cantidad de espacios (o incluso pestañas), siempre y cuando se mantenga igual durante todo el proceso. – DJMcMayhem
editar su ~/.vimrc
, y añadir diferentes tipos de archivos para diferentes guiones, por ejemplo. Quiero html/rb
guión para 2 espacios, y js/coffee
archivos de guión para 4 espacios:
" by default, the indent is 2 spaces.
set shiftwidth=2
set softtabstop=2
set tabstop=2
" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab
se refieren a: Setting Vim whitespace preferences by filetype
El comentario para vimrc es simple' '' :) – sdkks
utilizo una utilidad que he escrito en C llamado autotab
. Analiza las primeras mil líneas de un archivo que carga y determina valores para los parámetros de Vim shiftwidth
, tabstop
y expandtab
.
Esto se compila utilizando, por ejemplo, gcc -O autotab.c -o autotab
. Las instrucciones para integrarse con Vim están en el encabezado de comentario en la parte superior.
Autotab es bastante inteligente, pero puede confundirse de vez en cuando, en particular por que se han mantenido de forma irregular utilizando diferentes estilos de sangría.
Si un archivo evidentemente usa pestañas, o una combinación de pestañas y espacios, para la sangría, Autotab descubrirá qué tamaño de pestañas se está utilizando al considerar factores como la alineación de elementos internos en líneas sucesivas, como comentarios.
Funciona para una variedad de lenguajes de programación, y es indulgente con los elementos "fuera de banda" que no obedecen a los incrementos de sangría, como las directivas de preprocesamiento C, C, sin mencionar las obvias líneas en blanco.
Hoy en día, puedes intentar editorconfig, también hay un vim plugin para él. Con esto, puede cambiar el tamaño de sangría en vim, pero en muchos otros editores, mantenga estilos de codificación coherentes.
A continuación se muestra un editor de archivos simple, como se puede ver, los archivos de Python tendrán 4 espacios para la sangría, y los archivos de plantillas de pug solo tendrán 2.
# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4
# 2 space indentation for pug templates
[*.pug]
indent_size = 2
- 1. Archivo de sangría de Vim para Treetop (analizador de Ruby)
- 2. cambiando el carácter vertsplit de vim a │
- 3. Sangría código por índice de columna de soporte en Vim?
- 4. Muy extraño comportamiento con la sintaxis y tipo de archivo de detección de Vim
- 5. Haskell y Vim: sangría correcta
- 6. vim/vi/linux: sangría correctamente el archivo html
- 7. Reglas de sangría de vim (un) molestas
- 8. ¿Por qué VIM no detecta mi tipo de archivo coffescript?
- 9. ¿La sangría de Vim Python no funciona?
- 10. Cambiando el comportamiento de un modelo de Django con __getattr__
- 11. eclipse: cambiando el n. ° de espacios para sangría/falta de definición
- 12. Molesto de sangría con CSS en Vim
- 13. sangría automática VIM de archivos LaTeX defectuosos
- 14. Cambiando el comportamiento del mapa en Clojure
- 15. Cambiando el tipo de tabla a InnoDB
- 16. ¿Cómo eliminar el resaltado de sangría en vim?
- 17. vim: C++ sangría de nuevo con #
- 18. sangría un montón de líneas en VIM
- 19. Formato y sangría HTML en Vim
- 20. Vim - sangría y resaltado de sintaxis roto después de recuperar el archivo
- 21. Cambiando el tipo de tabla de MyISAM a InnoDB
- 22. Vim Auto Sangría con nueva línea
- 23. ¿Cómo habilita la configuración de sangría de tabulación específica de archivo en VIM?
- 24. Vim elimina automáticamente la sangría en los comentarios de Python
- 25. Insertar sangría para columnas en Vim
- 26. Configuración de Vim preferencias de espacio en blanco por tipo de archivo
- 27. Vim y la sangría con soportes/apoyos
- 28. Vim: la línea actual de sangría (en blanco) e insertar
- 29. Incrustar configuración de vim en el archivo
- 30. Vim: Resalte la palabra TODO para cada tipo de archivo
BTW - La convención PEP8 para Python dice que la etiqueta debe tener 4 espacios y las pestañas deben tener 4 espacios. ref: http://stackoverflow.com/questions/120926/why-does-python-pep-8-strongly-recommend-spaces-over-tabs-for-indentation – cgseller