2009-05-21 25 views

Respuesta

47

sólo hay que poner la configuración en el archivo plugin filetype ~/.vim/ftplugin/LANGUAGE.vim. Mi ~/.vim/ftplugin/perl.vim contiene las líneas:

" 
" ---------- tabulator/shiftwidth -------------------- 
" Set tabulator and shift width to 4 (Perl Style Guide) 
" 
setlocal tabstop=4 
setlocal shiftwidth=4 
" 

Estos ajustes serán automáticamente en efecto para cada archivo con el tipo de archivo 'Perl' (nuevo o existente).

+0

Es triste que todavía tenemos que tener ftplugin para hacer esto. – shabunc

+1

¿Por qué? Este enfoque parece más claro que otros mencionados en otras respuestas. – flyer88

+0

ftplugin es un gran enfoque para este – connorbode

9

Normalmente, lo que hace es configurar un archivo especial de tipo vimrc con la configuración para un idioma en particular, y luego usar comandos automáticos en su .vimrc principal para ejecutar el vimrc especial cuando sea necesario. Aquí está mi configuración para Haskell (.hs, etc.) archivos:

autocmd! BufNewFile,BufReadPre,FileReadPre *.hs so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.hsc so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.lhs so ~/.vim/haskell.vim 
autocmd! BufNewFile,BufReadPre,FileReadPre *.cabal so ~/.vim/haskell.vim 

Mi ~/.vim/haskell.vim hace cosas por el estilo "expandtab set" para utilizar espacios en lugar de tabuladores, y todo tipo de otra magia para formatear y cosas así. A menudo puede descargar buenas versiones de estos para varios idiomas desde http://vim.org y otros sitios.

Tenga en cuenta que puede hacer mucho más que simplemente cambiar la configuración de vim. Por ejemplo, puede ejecutar el archivo a través de un filtro antes y después de la edición:

" Edit gpg-encrypted ascii-armoured files 
autocmd! BufReadPre,FileReadPre  *.asc set bin 
autocmd BufReadPost,FileReadPost *.asc '[,']!gpg -q -d 
autocmd BufReadPost,FileReadPost *.asc set nobin 
autocmd! BufWritePre,FileWritePre *.asc set bin 
autocmd BufWritePre,FileWritePre *.asc '[,']!gpg -e 
autocmd BufWritePost,FileWritePost *.asc undo 
autocmd BufWritePost,FileWritePost *.asc set nobin 
+0

Muy bien, gracias. Voy a ir con esta solución en lugar de la basada en ftplugin, porque esto parece más limpio en el caso de que tenga múltiples extensiones para archivos que usan el mismo lenguaje (como lo ha hecho en su ejemplo de Haskell). –

+1

Hay un pequeño precio a pagar. Los comandos de origen (por ejemplo, so ~/.vim/haskell.vim) se ejecutarán cada vez que cambie a dicho búfer. –

+4

Esta no es la solución correcta. La solución correcta consiste en utilizar ftplugins (no es necesario escribir y mantener los autocomandos nosotros mismos), y (muy importante) en el uso de la configuración local. -> s #: establecer tabstop = #: setlocal tabstop = #. Ver la respuesta de fgm. Si su extensión no es reconocida como haskell, entonces actualice su base de tipos de archivos. ¿No desea que vim aplique el resaltado de sintaxis correcto a sus archivos? –

20

Mi respuesta se basa en this tip en la Wiki VIM. Esta respuesta utiliza el directorio "después" para que no tenga que ensuciar con los archivos de complemento suministrados para diferentes tipos de archivos.

Por ejemplo, para especificar la configuración personalizada para los archivos de Python, crea un archivo llamado python.vim para mantener la configuración de Python:

setlocal expandtab 
setlocal shiftwidth=4 
setlocal softtabstop=4 

Coloque este archivo en cualquiera

  • ~/.vim/after/ftplugin (Linux)
  • $HOME/vimfiles/after/ftplugin (Windows)

Y, por último, debe tener esto en su .vimrc (Linux) o _vimrc (Windows):

filetype plugin indent on 
+0

¿Por qué el voto a favor? –

+0

Por error, si editas tu respuesta, puedo volver a votarla. –

+1

@BjornTipling - existe esa edición que solicitó hace un año. :) –

60

Estas otras respuestas parecen demasiado compleja. En lugar de perder el tiempo con más directorios y archivos en su árbol ~/.vim, simplemente agregue lo siguiente a su ~/.vimrc.

autocmd Filetype python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4 

(que puede ser l33t y abreviar los parámetros a et ts=4 sw=4 sts=4). He encontrado esto en Setting Vim whitespace preferences by filetype

+3

La mejor respuesta OMI, gracias. – bryant

+1

Además, más al punto que algunos otros – cloying

+0

+1 para la opción de configurarlo desde vimrc. Se vuelve más importante cuando se usa un administrador de paquetes vim (a la vundle) y no se desea comenzar a agregar configuraciones en lugares oscuros ... –

2

utilizo el plugin editor config y añadir un archivo .editorconfig a todos mis proyectos - que le permitirá definir la configuración de sangrado diferentes para diferentes proyectos que utilizan el mismo lenguaje de programación que pueden ser útiles tan a menudo diferentes proyectos en el mismo idioma tienen diferentes estándares de codificación.

se puede ver un ejemplo de los tipos de configuración se pueden establecer aquí: http://editorconfig.org/

+1

Esto es genial porque otros editores también admiten el mismo archivo .editorconfig (átomo, sublime text, webstorm, visualstudio, etc, etc.), por lo que funciona bien en un equipo o repositorio donde las personas utilizan todos los diferentes sabores de los editores. – Charlino

Cuestiones relacionadas