有时候我会写没有文件扩展名的脚本,例如:
#!/usr/bin/env node
console.log('hello world!');
我希望Vim能够从shebang行中检测出文件类型(例如#!/usr/bin/env node
是javascript
)。我应该在filetype.vim
中放置什么内容?
按照:help new-filetype-scripts
中列出的指示,
在用户运行时目录(Unix类系统上为~/.vim/
)中创建scripts.vim
文件,并在其中编写以下脚本:
if did_filetype()
finish
endif
if getline(1) =~# '^#!.*/bin/env\s\+node\>'
setfiletype javascript
endif
\/
,但只有在正向搜索命令(/
)或替换命令(:s
)中使用斜杠作为模式分隔符时才需要这样做。 - ib.autocmd
将这些行放入 .vimrc
中,可能需要使用 bufread
触发该函数。 - Yosh创建文件 ~/.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()
AddShebangPattern! javascript ^#!.*\s\+node\>
# vim: ft=javascript
,因为Vim已经检查了modeline,而不是重复发明轮子? - Swaroop C H