【问题标题】:How do I make a default syntax by filetype in Atom text editor?如何在 Atom 文本编辑器中按文件类型创建默认语法?
【发布时间】:2014-04-17 06:27:45
【问题描述】:

我希望我的 .ejs 文件具有 html 语法,但是,它总是以纯文本形式打开文件。

在 sublime 中,您可以选择“使用当前扩展名打开所有...”,然后选择您的语法。

我看到你可以在左下角更改语法

如何使用特定语法打开特定类型的文件?

【问题讨论】:

    标签: atom-editor


    【解决方案1】:

    现在是in Atom core,你不再需要那个文件类型包了。

    在我工作的地方,我们将 .phl 用于某种 PHP 文件。要告诉 Atom,首先是 find the language's Scope Name(例如 text.html.php ),然后像这样编辑 config.cson

    core:
        customFileTypes:
          "text.html.php": [
            "phl"
          ]
        themes: [
    // snip
    

    您可以在~/.atom/config.cson 找到此文件,或从“设置”窗口单击“打开配置文件夹”按钮。

    很容易出错,人们在GitHub issue 上为该功能犯的许多错误就是明证。

    【讨论】:

    • 这应该是最佳答案。
    • text.html.php 标识符从何而来?是否有一些参考或方法来确定其他文件类型的这些?
    • text.html.php的作用域名称来自Atom的语法列表。您可以在 Grammar List 包源中查看它是如何提取的:github.com/atom/grammar-selector/blob/master/lib/… 您可以从 Atom 控制台(cmd+shift+i 或 ctrl+shift+i)获取新的语法列表,然后粘贴:atom.grammars.getGrammars().map(function (grammar) { console.log(grammar.scopeName); });
    • Atom 控制台的快捷键是 cmd+alt+i
    【解决方案2】:

    编辑:自从我写下这个答案后,这个功能就被添加到了 Atom 核心中,详情参见this answer

    文件类型 Atom 包

    (https://atom.io/packages/file-types)

    它完全符合标题问题的要求:您可以通过简单编辑 config.cson 文件为现有语言定义新的文件扩展名。

    【讨论】:

      【解决方案3】:

      对于单个文件,您可以使用语法选择器; Ctrl+Shift+L 设置您在该文件上使用的语言。与自动检测不同,但在您使用不想为其设置默认值的文件时很有用。

      【讨论】:

      • 谢谢!这在菜单中是不可能找到的,非常荒谬。它永远不会让我觉得 Edit -> Select Grammer
      • 您也可以通过单击右下角(编码方案旁边)的当前语法高亮方案来更改它。
      【解决方案4】:

      简单模式:包括

      如果你的语言真的只是 HTML,你可以设置一个简单的包来处理这个。

      创建一个名为 langugage-ejs 的包,在 grammars/ejs.cson 中,您可以将 HTML 包含为您关心的模式:

      'fileTypes': [
        'ejs'
      ]
      
      'name': 'Embedded JavaScript'
      
      'patterns': [
        {
          'include': 'source.html'
        }
      ]
      
      'scopeName': 'source.ejs'
      

      language-ipynb 当然是通过扩展 JSON 来做到这一点的。

      我的模板标签呢?

      但实际上,您希望在 HTML 之上拥有模板标签,以便让编辑器识别。我能找到的最好的例子是erb (Embedded Ruby templates)。它来自 HTML,但也添加了其他标签,如以下 sn-p 所示:

      ...
      'patterns': [
        {
          'begin': '<%+#'
          'captures':
            '0':
              'name': 'punctuation.definition.comment.erb'
          'end': '%>'
          'name': 'comment.block.erb'
        }
        {
          'begin': '<%+(?!>)[-=]?'
          'captures':
            '0':
              'name': 'punctuation.section.embedded.ruby'
          'end': '-?%>'
          'name': 'source.ruby.rails.embedded.html'
          'patterns': [
            {
              'captures':
                '1':
                  'name': 'punctuation.definition.comment.ruby'
              'match': '(#).*?(?=-?%>)'
              'name': 'comment.line.number-sign.ruby'
            }
            {
              'include': 'source.ruby.rails'
            }
          ]
        }
        {
          'include': 'text.html.basic'
        }
      ]
      ...
      

      【讨论】:

      • package-generator:generate-language-package 生成语言包骨架,然后可以轻松扩展。
      【解决方案5】:

      例如,如果您想使用 javascript 语法打开所有 .jsx 文件,则需要将其添加到您的 config.cson

      "*":
        core:
          customFileTypes:
            "source.js": [
               "jsx"
            ]
      

      这会将所有 .jsx 文件映射为使用 js 语法打开。

      【讨论】:

        【解决方案6】:

        看起来已经为此发布了一个全新的软件包。 https://atom.io/packages/language-ejs.

        【讨论】:

        • 谢谢丹!那是以前不存在的。看起来他们正在添加像 gangbusters 这样的包。如果我有另一个奇怪的文件类型还没有包怎么办?
        • “他们”在这种情况下是外部开发人员。您只需要创建自己的语言包。 langugage-ejs 看起来像 TextMate Bundle 的直接端口,您也可以创建和发布它。有时它就像including another language pack 一样简单。查看Creating a Package 了解更多信息。
        • 我正在使用版本 0.120.0 (0.120.0),我无法再搜索此包。
        【解决方案7】:

        正如 Dave Andersen 在隐藏评论中提到的那样,现在可以在没有任何额外包的情况下执行此操作,并且记录在 here

        【讨论】:

        • +1 具有精确链接的简单解决方案 - 参考查找语言的范围名称 here
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2020-06-25
        相关资源
        最近更新 更多