2012-01-17 7 views
33

A volte scrivo script senza alcuna estensione di nome file. Ad esempio:Come rendere Vim rilevare il tipo di file dalla linea shebang?

#!/usr/bin/env node 

console.log('hello world!'); 

Spero che Vim può rilevare il tipo di file dalla linea shebang (ad esempio #!/usr/bin/env node è javascript). Cosa devo inserire in filetype.vim?

+6

Perché non aggiungere una seconda o ultima riga modeline '# vim: ft = javascript' dato che Vim controlla già la modeline invece di reinventare la ruota? –

+13

@SwaroopCH Perché non analizzare le informazioni da una riga già nel file che ha le informazioni necessarie, come ogni [editor reale] (http://www.gnu.org/software/emacs/) ha fatto per anni, piuttosto che ripetendolo ridondantemente in un modo specifico dell'editor che recupera il file per gli utenti di altri editor? */me dons flame suit * –

risposta

27

Seguendo le istruzioni elencate nella :help new-filetype-scripts, creare il file scripts.vim nella directory di runtime utente (~/.vim sui sistemi Unix-like), e scrivere il seguente script in esso.

if did_filetype() 
    finish 
endif 
if getline(1) =~# '^#!.*/bin/env\s\+node\>' 
    setfiletype javascript 
endif 
+3

Vedi anche la sezione ': help new-filetype' che vale la pena di leggere. –

+0

perché le barre in avanti non vengono sfuggite? /bin/env –

+1

@ LaiYu-Hsuan: un carattere di barra diretta non è un simbolo speciale in base alla sintassi delle espressioni regolari di Vim. Potrebbe essere sfuggito come '\ /', naturalmente, ma è necessario solo per i pattern usati in un comando di ricerca in avanti ('/') o in un comando di sostituzione (': s') quando i delimitatori di pattern sono barre. –

10

creare questo file ~/.vim/ftdetect/node.vim con questo contenuto

fun! s:DetectNode() 
    if getline(1) == '#!/usr/bin/env node' 
     set ft=javascript 
    endif 
endfun 

autocmd BufNewFile,BufRead * call s:DetectNode() 
+5

, "ft = javascript" è molto più probabile che funzioni. Molte persone hanno definito "javascript" e NON hanno "nodi" definiti. –

0

Un po 'tardi alla festa, ma Node.vim maniglie rilevare tali file JavaScript per voi. E poi qualche. :-)

Problemi correlati