Vim 在 JSON 文件中

Vim modeline in a JSON file

我正在尝试将以下 vim modeline 添加到我的全局 .tern-config 文件中:

// vim: set ft=json:
{
    plugins: {
    ...

但是,Tern 服务器启动失败,出现以下错误:

Failed to start server: 
Bad JSON in /Users/XXXXX/.tern-config: Unexpected token / in JSON at position 0

我怀疑这个错误的原因是 JSON's lack of support for comments. 我应该注意到我的 .eslintrc 文件中的相同模式行有效。

如何在我的 .tern-config 文件中包含 vim 模式行?

您将无法在文件本身中执行此操作。 JSON 不支持注释,这是一种非常无情的语法。

这可能适用于某些 JSON 文件,例如 .eslintrc,但在其他文件中,您可能会倒霉。更严格的 JSON 解析器不允许这样做,因此这取决于您目前使用的工具是基于哪个解析器构建的。

与其猜测哪些解析器是宽容的,哪些不是,您最好告诉 Vim 如何使用 autocmd.

来做到这一点
autocmd BufNewFile,BufRead *.tern-config set filetype=json

如果像这样放置一个对象

"_vim_": { "modeline": "/* vim: set ft=json noet ts=4 sw=4: */" }

作为 json 文件顶级对象列表的第一个或最后一个条目,它将被 vim 用作模式行(只要该行在开头或文件末尾,其中 "close enough" 表示:在 vim 根据其 'modelines' 选项(默认为 5)扫描模式行的行数内。

此外,应仔细选择对象的名称(“_vim_”),以便 - 充其量 - 它会被使用该文件作为输入的软件忽略,或者 -至少 -- 可以被软件用户忽略(即,它不会导致任何被视为不良行为的副作用)。