Establecer preferencias de espacios en blanco de Vim por tipo de archivo


155

En mi trabajo, debo seguir el estilo de la casa para la sangría, que es la siguiente:

  • 2 espacios al codificar html y ruby
  • pestañas al codificar javascript, con tabwidth = 4 recomendado

¿Cuál es la mejor manera de especificar diferentes preferencias de espacios en blanco por tipo de archivo?



Todas estas respuestas me confundieron más. El problema es que las opciones dependen de las preferencias. Sin embargo, la respuesta aceptada tiene una buena sintaxis. Esta fue una excelente guía: vimcasts.org/transcripts/2/en
Mikael Lindlöf

Respuestas:


245

Hay muchas maneras, pero aquí hay una manera simple y fácil de entender. agregue estas líneas a su ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4

27
ts = 'número de espacios que <Tab> en el archivo usa' sts = 'número de espacios que <Tab> usa mientras edita' sw = 'número de espacios a usar para el paso de sangría (automático)' para más detalles, consulte: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs

Necesitaba agregar expandtab al menos para ruby, ver la respuesta por 'demasiado php' aquí
Michael Durrant

87

La respuesta de Peter es bastante directa, pero desafortunadamente las opciones no son correctas. En su lugar, debe usar las siguientes opciones:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

También tenga en cuenta:

  • Puede hacer que vim muestre caracteres de tabulación utilizando :set list.
  • Una vez que haya configurado correctamente las opciones de tabulación / espacio, puede hacer que vim repare el archivo (reemplace los espacios con tabulaciones o viceversa) usando el :retab!comando.

2
¿Cuál es el beneficio de expandtabmás?sts=2
James McMahon

12
@JamesMcMahon expandtab expande todas las pestañas a espacios. sts (softtabstop) inserta espacios y pestañas para las sangrías: tantas pestañas como quepan en la sangría según el tamaño de la pestaña, y luego espacios después de eso. Por supuesto, si expandtab está activado, todas las pestañas que se insertan se convierten en espacios. stackoverflow.com/questions/1562336/… podría ayudar aún más. Sin la pestaña desplegable, la respuesta de Peter insertaría pestañas de 2 caracteres de ancho, no espacios.
ajmccluskey

35

+1 a la respuesta de Peter, pero Vim también proporciona otra solución. Si desea hacer algo más complicado que uno solo setlocal, como configurar un montón de opciones, comandos y asignaciones a la vez, la función del complemento de tipo de archivo de vim viene al rescate.

Debe tener filetype plugin ono filetype plugin indent onen su .vimrc, y luego crear un complemento para, por ejemplo, ruby ​​que pueda crear ~/.vim/ftplugin/ruby.vim. Técnicamente se puede utilizar cualquier comando te gusta aquí, para ejecutarse cuando se carga un archivo de Ruby, pero los más recomendados son setlocal, map <buffer>, command -buffer, y las funciones que definen. Mucha más información está en la Guía del usuario; si está bastante familiarizado con las secuencias de comandos vim, vaya a :help 41.11, de lo contrario, lea :help usr_40y :help usr_41.


10

También hay un buen script vim: DetectIndent que intenta detectar la sangría de un archivo que abre. Es muy útil si trabaja con muchos archivos con diferentes estilos de codificación.

Yo uso un autocomando en mi .vimrc :

:autocmd BufReadPost * :DetectIndent 

0

Para insertar caracteres de espacio cada vez que se presiona la tecla tab, configure la opción 'expandtab':

:set expandtab

El siguiente paso es controlar el número de caracteres de espacio que se insertarán cuando se presione la tecla de tabulación, configure la opción 'tabulación'. Por ejemplo, para insertar 2 espacios para una pestaña, use:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.