2012-01-17 14 views
33

時々私はファイル名の拡張子なしでスクリプトを書きます。例えば:Vimがshebang行からファイルタイプを検出する方法は?

#!/usr/bin/env node 

console.log('hello world!'); 

私はVimはシェバングラインからファイルタイプを検出することができることを願って(例えば#!/usr/bin/env nodejavascriptあります)。 filetype.vimにはどうすればよいですか? :help new-filetype-scriptsに記載されている指示に従い

+6

Vimは車輪を改造するのではなく、モデルラインをチェックしているので、2行目か最後のモデルのモデルライン '#vim:ft = javascript'を追加してみませんか? –

+13

@SwaroopCH [実際のエディタ](http://www.gnu.org/software/emacs/)のように、必要な情報を持っているファイル内の行の情報を、それを他の編集者のユーザのためにジャンクアップするエディタ特有のやり方で重複して繰り返すか? */me dons flame suit * –

答えて

27

、 は、ユーザランタイムディレクトリ( Unixライクなシステム上の~/.vim)でscripts.vimファイルを作成し、その中で次のスクリプトを記述します。

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

':help new-filetype'セクション全体を参照してください。これは読む価値があります。 –

+0

スラッシュをエスケープしないのはなぜですか? /bin/env –

+1

@ LaiYu-Hsuan:スラッシュ文字は、Vim正規表現の構文に従って特別な記号ではありません。もちろん '\ /'としてエスケープすることもできますが、パターンデリミタがスラッシュの場合は前方検索コマンド( '/')や置換コマンド( ':s')で使用されるパターンに対してのみ必要です。 –

10

少しパーティーに遅れて、しかし、あなたのために、このようなJavaScriptファイルを検出Node.vimハンドルこの内容で~/.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」が定義されていて、「ノード」は定義されていません。 –

0

このファイルを作成します。そしてその後、いくつかの。 :-)

関連する問題