【发布时间】:2014-04-17 06:27:45
【问题描述】:
我希望我的 .ejs 文件具有 html 语法,但是,它总是以纯文本形式打开文件。
在 sublime 中,您可以选择“使用当前扩展名打开所有...”,然后选择您的语法。
我看到你可以在左下角更改语法
如何使用特定语法打开特定类型的文件?
【问题讨论】:
标签: atom-editor
我希望我的 .ejs 文件具有 html 语法,但是,它总是以纯文本形式打开文件。
在 sublime 中,您可以选择“使用当前扩展名打开所有...”,然后选择您的语法。
我看到你可以在左下角更改语法
如何使用特定语法打开特定类型的文件?
【问题讨论】:
标签: atom-editor
现在是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 核心中,详情参见this answer。
(https://atom.io/packages/file-types)
它完全符合标题问题的要求:您可以通过简单编辑 config.cson 文件为现有语言定义新的文件扩展名。
【讨论】:
对于单个文件,您可以使用语法选择器; Ctrl+Shift+L 设置您在该文件上使用的语言。与自动检测不同,但在您使用不想为其设置默认值的文件时很有用。
【讨论】:
如果你的语言真的只是 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 生成语言包骨架,然后可以轻松扩展。
例如,如果您想使用 javascript 语法打开所有 .jsx 文件,则需要将其添加到您的 config.cson
"*":
core:
customFileTypes:
"source.js": [
"jsx"
]
这会将所有 .jsx 文件映射为使用 js 语法打开。
【讨论】:
看起来已经为此发布了一个全新的软件包。 https://atom.io/packages/language-ejs.
【讨论】: