如何在Atom文本编辑器中按文件类型设置默认语法?

60
我希望我的.ejs文件可以使用html语法,但它总是以纯文本形式打开。
在sublime中,您可以选择“Open all with current extension as...”,然后选择所需的语法。
我发现您可以在左下角更改语法。
如何使用特定的语法打开具有特定类型的文件?
7个回答

136
这是现在 Atom核心中的内容, 您不再需要那个 file-types 包。
在我的工作中,我们使用 .phl 作为某种类型的 PHP 文件。要告诉 Atom 关于这一点,首先 找到该语言的范围名称(例如 text.html.php),然后像这样编辑 config.cson:
core:
    customFileTypes:
      "text.html.php": [
        "phl"
      ]
    themes: [
// snip

你可以在 ~/.atom/config.cson 找到此文件,或者从设置窗口点击“打开配置文件夹”按钮。 由于在GitHub issue上出现的众多错误,很容易出错。

13
这应该是最佳答案。 - Arel
13
text.html.php 这个标识符是从哪里来的?是否有一些参考资料或方法可以确定其他文件类型的标识符? - Luke
23
text.html.php 的作用域名称来自于 Atom 的语法列表。您可以查看语法列表包源代码中的引入方式:https://github.com/atom/grammar-selector/blob/master/lib/grammar-list-view.coffee#L57您可以从 Atom 控制台(cmd+shift+i 或 ctrl+shift+i)获取最新的语法列表,然后粘贴以下内容:atom.grammars.getGrammars().map(function (grammar) { console.log(grammar.scopeName); }); - spawnedc
5
Atom控制台的快捷键是__cmd+alt+i__。 - BenRoe
7
文档链接:自定义语言识别查找语言的作用域名称非常有用。 - Dave Andersen
显示剩余4条评论

6
例如,如果您想使用JavaScript语法打开所有.jsx文件,则需要将以下内容添加到您的config.cson中。
"*":
  core:
    customFileTypes:
      "source.js": [
         "jsx"
      ]

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

6

编辑:自从我写下这个答案的时候,这个功能已经被添加到Atom核心中了,请查看此答案以获取详细信息。

file-types Atom包

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

该包正好实现了标题问题所要求的功能:您可以通过简单编辑config.cson文件来为现有语言定义新的文件扩展名。


5
对于单个文件,您可以使用语法选择器;Ctrl+Shift+L设置您正在使用的文件的语言。这不同于自动检测,但在您使用不希望设置默认语言的文件时非常有用。

谢谢!在菜单中找到这个选项真的太难了,令人感到荒谬。我永远不会想到它会在“编辑” -> “选择语法”中。 - Fractalf
您可以通过单击右下角的当前语法高亮方案(旁边是编码方案)来更改它。 - Sachin

4

简单模式:包含

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

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

'fileTypes': [
  'ejs'
]

'name': 'Embedded JavaScript'

'patterns': [
  {
    'include': 'source.html'
  }
]

'scopeName': 'source.ejs'

language-ipynb 通过扩展JSON来实现这一点。

我的模板标签怎么办?

但事实上,您的模板标签位于HTML之上,您希望编辑器能够识别它们。我能找到的最好的例子是erb(嵌入式Ruby模板)。它源自HTML,但还添加了其他标签,如此片段所示:

...
'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 生成一个语言包框架,可以轻松地进行扩展。 - Dmitry Zotikov

3

1
谢谢丹!以前没有这个。看起来他们正在像疯子一样添加软件包。如果我有另一种还没有软件包的奇怪文件类型怎么办? - NathanBrakk
1
在这种情况下,“他们”是一个外部开发人员。你只需要创建自己的语言包。langugage-ejs 看起来像是一个 TextMate Bundle 的直接移植,你也可以创建和发布。有时候,它就像是 包含另一个语言包 那么简单。查看 Creating a Package 了解更多信息。 - Kyle Kelley
我正在使用版本0.120.0(0.120.0),但我无法再搜索到这个软件包了。 - Jason Kim

2
正如Dave Andersen在一条被埋没的评论中提到的那样,现在可以在不使用任何额外软件包的情况下完成此操作,并且已经在这里文档中进行了说明。

1
+1个简单的解决方案,附带精确链接 - 参考查找语言范围名称此处 - fidev

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