【问题标题】:Vim modeline in a JSON fileJSON 文件中的 Vim 模式行
【发布时间】:2017-01-17 23:55:02
【问题描述】:

我正在尝试将以下 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 模式行?

【问题讨论】:

  • 使用 vim 配置自动设置 .json 文件的文件类型。没有人喜欢看到嵌入文件中的模式行,因为他们不一定使用与您相同的编辑器...
  • .tern-config 没有 .json 扩展名。我愿意接受更好的解决方案,让 vim 将文件识别为 json。

标签: json vim tern


【解决方案1】:

如果放一个这样的对象

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

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

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

【讨论】:

    【解决方案2】:

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

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

    与其猜测哪些解析器是宽容的,哪些不是,您最好使用autocmd 告诉 Vim 如何做到这一点。

    autocmd BufNewFile,BufRead *.tern-config set filetype=json
    

    【讨论】:

    • 这是一个非常好的解决方案 + 解释为什么我的 .eslintrc 正在工作。谢谢!
    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 2011-04-02
    • 2017-11-19
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多