如何从shebang线让Vim检测文件类型?

Lai*_*uan 38 vim bash file-type

有时我写脚本没有任何文件扩展名.例如:

#!/usr/bin/env node

console.log('hello world!');
Run Code Online (Sandbox Code Playgroud)

我希望Vim可以从shebang行检测文件类型(例如#!/usr/bin/env nodejavascript).我该filetype.vim怎么办?

ib.*_*ib. 31

按照列出的说明:help new-filetype-scripts,scripts.vim在用户运行时目录中创建该文件(~/.vim在类Unix系统上),并在其中编写以下脚本.

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

  • 另请参阅整个`:help new-filetype`部分,值得一读. (3认同)
  • @LaiYu-Hsuan:根据Vim正则表达式的语法,正斜杠字符不是特殊符号.当然,它可以作为`\ /`进行转义,但只有当模式分隔符是斜杠时,才需要在前向搜索命令(`/`)或替换命令(`:s`)中使用的模式. (2认同)

ali*_*iva 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()
Run Code Online (Sandbox Code Playgroud)

  • 实际上,"ft = javascript"更有可能奏效.大多数人都定义了"javascript",并且没有定义"节点". (5认同)