2012-01-17 39 views
33

有時我會寫沒有任何文件擴展名的腳本。例如:如何讓Vim從shebang行檢測文件類型?

#!/usr/bin/env node 

console.log('hello world!'); 

希望Vim可以從shebang行檢測文件類型(例如#!/usr/bin/env nodejavascript)。我應該輸入filetype.vim

+6

爲什麼不添加第二行或最後一行modeline'#vim:ft = javascript',因爲Vim已經檢查了modeline而不是重新發明輪子? – 2012-01-17 07:04:16

+13

@SwaroopCH爲什麼不解析已經存在於文件中具有必要信息的行中的信息,就像任何[真正的編輯器](http://www.gnu.org/software/emacs/)多年以來一樣,而不是以編輯器特定的方式重複冗餘,爲其他編輯器的用戶創建文件。 */me dons flame suit * – 2012-01-17 07:29:15

回答

27

:help new-filetype-scripts列出的說明, 創建scripts.vim文件中的用戶運行時目錄(~/.vim在類Unix系統 ),並寫在它下面的腳本。

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

另請參閱整個':help new-filetype'部分,值得一讀。 – 2012-01-17 08:36:31

+0

爲什麼不能逃脫正斜槓? /bin/env – 2012-01-18 09:40:43

+1

@賴玉軒:根據Vim正則表達式的語法,正斜槓字符不是特殊符號。它當然可以作爲'\ /'轉義,但是當模式分隔符是斜線時,它只適用於前向搜索命令('/')或替代命令(':s')中使用的模式。 – 2012-01-19 02:14:29

10

創建這個文件~/.vim/ftdetect/node.vim 與此內容

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

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

實際上,「ft = javascript」更有可能工作。大多數人確實定義了「javascript」並且沒有定義「節點」。 – 2012-03-29 00:42:12

0

有點遲到了,但Node.vim手柄檢測到這樣的JavaScript文件給你。然後還有一些。 :-)