有時我會寫沒有任何文件擴展名的腳本。例如:如何讓Vim從shebang行檢測文件類型?
#!/usr/bin/env node
console.log('hello world!');
希望Vim可以從shebang行檢測文件類型(例如#!/usr/bin/env node
是javascript
)。我應該輸入filetype.vim
?
有時我會寫沒有任何文件擴展名的腳本。例如:如何讓Vim從shebang行檢測文件類型?
#!/usr/bin/env node
console.log('hello world!');
希望Vim可以從shebang行檢測文件類型(例如#!/usr/bin/env node
是javascript
)。我應該輸入filetype.vim
?
繼:help new-filetype-scripts
列出的說明, 創建scripts.vim
文件中的用戶運行時目錄(~/.vim
在類Unix系統 ),並寫在它下面的腳本。
if did_filetype()
finish
endif
if getline(1) =~# '^#!.*/bin/env\s\+node\>'
setfiletype javascript
endif
另請參閱整個':help new-filetype'部分,值得一讀。 – 2012-01-17 08:36:31
爲什麼不能逃脫正斜槓? /bin/env – 2012-01-18 09:40:43
@賴玉軒:根據Vim正則表達式的語法,正斜槓字符不是特殊符號。它當然可以作爲'\ /'轉義,但是當模式分隔符是斜線時,它只適用於前向搜索命令('/')或替代命令(':s')中使用的模式。 – 2012-01-19 02:14:29
創建這個文件~/.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()
實際上,「ft = javascript」更有可能工作。大多數人確實定義了「javascript」並且沒有定義「節點」。 – 2012-03-29 00:42:12
有點遲到了,但Node.vim手柄檢測到這樣的JavaScript文件給你。然後還有一些。 :-)
爲什麼不添加第二行或最後一行modeline'#vim:ft = javascript',因爲Vim已經檢查了modeline而不是重新發明輪子? – 2012-01-17 07:04:16
@SwaroopCH爲什麼不解析已經存在於文件中具有必要信息的行中的信息,就像任何[真正的編輯器](http://www.gnu.org/software/emacs/)多年以來一樣,而不是以編輯器特定的方式重複冗餘,爲其他編輯器的用戶創建文件。 */me dons flame suit * – 2012-01-17 07:29:15