2009-09-10 21 views
14

Il mio lavoro giornaliero prevede la codifica con Perl. A casa gioco con Python e Erlang. Per Perl voglio riordinare il mio codice con due spazi. Considerando che per Python lo standard è 4. Inoltre ho alcune associazioni di tasti per aprire dichiarazioni di funzioni che vorrei usare con tutti i linguaggi di programmazione. Come può essere raggiunto in gVim?gVim e più linguaggi di programmazione

Come in, c'è un modo per mantenere un file di configurazione per ogni linguaggio di programmazione o qualcosa del genere?

risposta

22

Si dovrebbe essere in grado di fare con sfruttando tipi di file ... ad esempio, aggiungere questo al vostro vimrc (e modificare in modo appropriato per le diverse lingue):

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

Non sovrascrivere le impostazioni predefinite. Usa 'setlocal' (o 'setl') invece di 'set'. Non vuoi che le impostazioni dell'ultima interruzione di autocmd in altri buffer. –

+0

@Maxim - Buona cattura ... :-) –

+2

Il comando 'set' accetta più opzioni. Quindi, è più facile scrivere: 'set tabstop = 4 shiftwidth = 4 expandtab' –

23

Nella vostra $ HOME, fare .vim/directory (o vimfiles/su Windows), in esso fa ftplugin/directory, e al suo interno conserva file chiamati "perl.vim" o "python.vim" o "html.vim" o ...

Questi dovrebbero essere caricati automaticamente quando apri/crei un nuovo file di un determinato tipo di file, purché non dimentichi di aggiungere :filetype plugin on nel tuo .vimrc (o _vimrc in windows)

Quindi, le opzioni vim devono essere definite con :setlocal (e non con :set, altrimenti la loro definizione sostituirà l'impostazione globale predefinita).

I mapping sono definiti con :n/i/v(nore)map <buffer> e le abbreviazioni. I comandi sono definiti con l'opzione -b. I menu non possono essere resi locali senza l'aiuto di un plugin.

local, <buffer> e -b sono importanti per prevenire effetti collaterali.

+0

Se sei su Windows, consulta ": help dos-locations". –

+0

+1 Non sapevo che i comandi potessero essere definiti per un singolo buffer! –

3

Ecco come lo faccio. Il seguente è un estratto dal mio .vimrc, e mantengo ulteriori configurazioni per lingua, e carico quelle quando viene caricato un nuovo 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 

Nota che sebbene io generi un file, posso eseguire qualsiasi comando VIM o chiamare una funzione. per esempio. per il caricamento di un nuovo file Java faccio questo:

autocmd BufNewFile *.java call GeneratePackage() 

dove GeneratePackage() è una funzione VIM.

+0

autocmd FileType ... è migliore perché separa il rilevamento del tipo di file (con BufNewFile) dalle azioni eseguite per quel tipo di file. – joeforker

7

Oltre alla risposta di rangerchris, è possibile considerare l'utilizzo di modeline. Modelines raccontano l'editor come configurare se stessa:

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

use strict; 
use warnings; 

print "hello world\n"; 

Che modeline dice VI di utilizzare 4 schede dei personaggi e indentazioni automatiche, di utilizzare gli spazi al posto delle schede, e che si dovrebbe inserire una nuova riga quando il cursore arriva a 76 caratteri.

È possibile controllare il modo in Vim legge modelines con due variabili (molto probabilmente impostate nel Vimrc):

set modeline 
set modelines=5 

La variabile modeline dice a Vim di cercare modeline se è impostato. La variabilecomunica a Vim quante righe in alto e in basso scansionano alla ricerca della modeline (in questo caso troverà la modeline se si trova nella prima o nell'ultima cinque righe del file).

Come qualsiasi sistema che riceve istruzioni da fonti non attendibili, le modeline possono essere un security threat, pertanto l'utente root non deve mai utilizzare le modeline e mantenere la copia di Vim aggiornata.

Il vero vantaggio per le modeline è che sono per file. La maggior parte delle persone Perl sono quattro spazi come indentati, ma io sono una persona con otto caratteri. Quando lavoro con il codice di altre persone, utilizzo una modeline che riflette il loro utilizzo. Il resto del tempo uso il mio.

Problemi correlati