2009-09-10 6 views
14

Mi trabajo diario implica la codificación con Perl. En casa juego con Python y Erlang. Para Perl, quiero sangrar mi código con dos espacios. Mientras que para Python el estándar es 4. También tengo algunos enlaces de teclas para abrir declaraciones de funciones que me gustaría usar con todos los lenguajes de programación. ¿Cómo se puede lograr esto en gVim?gVim y lenguajes de programación múltiples

Como en, ¿hay alguna manera de mantener un archivo de configuración para cada lenguaje de programación o algo por el estilo?

Respuesta

22

Usted debe ser capaz de hacer con mediante el aprovechamiento de tipos de archivos ... por ejemplo, agregar esto a su vimrc (y modificar adecuadamente para diferentes idiomas):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

No anule la configuración predeterminada. Use 'setlocal' (o 'setl') en lugar de 'set'. No desea que la configuración del último salto de autocmd entre en otros almacenamientos intermedios. –

+0

@Maxim - Buena captura ... :-) –

+2

El comando 'set' acepta múltiples opciones. Entonces, es más fácil escribir: 'set tabstop = 4 shiftwidth = 4 expandtab' –

23

En su $ HOME, que .vim/directorio (o vimfiles/en Windows), en él haga el directorio ftplugin /, y en él guarde los archivos llamados "perl.vim" o "python.vim" o "html.vim" o ...

Estos deben estar cargados automáticamente cuando abre/crea un nuevo archivo de tipo de archivo determinado, siempre y cuando no olvide agregar :filetype plugin on en su .vimrc (o _vimrc en windows)

Luego, las opciones de vim se deben definir con :setlocal (y no con :set, de lo contrario, su definición anulará la configuración global predeterminada).

Las asignaciones se definen con :n/i/v(nore)map <buffer>, así como las abreviaturas. Los comandos se definen con la opción -b. Los menús no se pueden hacer locales sin la ayuda de un complemento.

local, <buffer> y -b son importantes para evitar los efectos secundarios.

+0

Si está en Windows, consulte ": ayuda dos ubicaciones". –

+0

+1 ¡No sabía que se podrían definir comandos para un solo buffer! –

3

Así es como lo hago. El siguiente es un extracto de mi .vimrc, y mantengo configuraciones adicionales por idioma, y ​​las cargo cuando se carga un nuevo buffer.

" HTML 
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml 
" XML 
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml 
" Perl 
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl 

Tenga en cuenta que aunque procedo con un archivo, puedo ejecutar cualquier comando VIM o invocar una función. p.ej. para cargar un nuevo archivo Java hago esto:

autocmd BufNewFile *.java call GeneratePackage() 

donde GeneratePackage() es una función VIM.

+0

autocmd FileType ... es mejor porque separa la detección del tipo de archivo (con BufNewFile) de las acciones realizadas para ese tipo de archivo. – joeforker

7

Además de la respuesta de rangerchris, puede considerar el uso de modelos. Modelines dicen el editor de cómo configurar sí:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

Eso modeline dice vi a utilizar 4 fichas de personajes y autoindentación, utilizar espacios en lugar de tabuladores, y que debe insertar un salto de línea cuando el cursor llega a 76 caracteres.

Puede controlar cómo Vim lee modelines con dos variables (más probable establecidos en su .vimrc):

set modeline 
set modelines=5 

La variable modeline le dice a Vim que buscar modelines si está establecido. La variable modelines le dice a Vim cuántas líneas desde la parte superior e inferior buscar buscando la línea de modo (en este caso, encontrará la línea de modo si está en la primera o las últimas cinco líneas del archivo).

Como cualquier sistema que toma instrucciones de fuentes que no son de confianza, las modelos pueden ser security threat, por lo que el usuario root nunca debe usar modelos y debe mantener su copia de Vim actualizada.

El beneficio real para las modelos es que son por archivo. La mayoría de las personas de Perl son cuatro espacios como personas sangrantes, pero soy una persona de ocho caracteres. Cuando trabajo con el código de otras personas, utilizo una línea de modo que refleja su uso. El resto del tiempo uso el mío.

Cuestiones relacionadas