Vim:如何通过`#!`设置没有扩展名的文件的文件类型?

31

我该如何设置带有#!/usr/bin/env node文件类型的文件为JavaScript?

3个回答

67

7
你需要在你的 .vimrc 文件中启用 modeline。set modeline - Drake Guan
9
你可能还需要在你的 .vimrc 文件中添加 set modelines=5 这行代码,这会让 vim 在文件的前五行或后五行查找 modeline 信息。有些人将这个值设置为 0,导致该功能无法正常工作。 - taxilian
2
感谢提供语法。我刚在一个cql文件中使用了SQL着色// vim: set ft=sql:。请注意末尾的**:**。 - Greg
1
@taxilian 谢谢。我以前总是搞不清楚为什么我的模型行有一半的时间都不能正常工作。设置 modelines=5 就解决了问题。 - Tobia

4
在vim中,执行命令:e $VIMRUNTIME/scripts.vim。这个文件用于在没有文件名中指定类型(例如扩展名)时检测“scripts”的文件类型。如果在文件中搜索“#!”,您将看到执行此操作的逻辑。问题是,这是一堆特殊情况,并且没有细粒度的钩子可以满足您的要求。一个可能的解决方案是修改这个scripts.vim文件,并将您的修改提交以包含在Vim中。
如果您不想修改vim附带的文件,则另一种选择是在个人运行时路径中创建自己的scripts.vim(使用:set rtp?查看系统设置)。这将在$VIMRUNTIME中的文件之后运行。您可以包含用于查看第一行和检测“node”的逻辑。您可能需要模仿$VIMRUNTIME/scripts.vim中的逻辑编写代码。

我找到了文件,但我可以在/.vimrc或/.vim/*中做这件事吗? - guilin 桂林
你应该能够在 ~/.vim/scripts.vim 中完成这个任务。可以参考 :h new-filetype-scripts 的示例。 - Peter Rincker
@guilin 桂林:请看我的回答的第二段。~/.vim 在您的 runtimepath 中(在 Unix 上默认情况下),因此您可以编写一个像 Peter Rincker 提到的 ~/.vim/scripts.vim - Laurence Gonsalves
我在代码示例中进行了编辑(作为vim插件),但你是正确的,这将像帮助文件中所述那样在~/.vim/scripts.vim中起作用。帮助文件中的示例也要简单得多。请随意拒绝/修改此编辑。我只是觉得实际解决方案会更有益。 - Curt Nelson

2

自动命令 可以用于检查文件类型(这就是如何加载 $VIMRUNTIME/scripts.vim 的方法)。

您可以指定在读取或写入文件、进入或离开缓冲区或窗口以及退出 Vim 时自动执行的命令。

...

警告:使用自动命令非常强大,可能会导致意外的副作用。请小心,不要破坏您的文本。

将以下内容添加到您的 .vimrc 文件中 - 它将在打开新文件时被调用:

autocmd BufNewFile,BufRead * if match(getline(1),"node") >= 0 | set filetype=javascript | endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接