4

Atom 中新创建的文件总是“纯文本”。如何更改此设置以使新文件自动使用另一种语言,例如“Shell Script (Bash)”?我想这样做是因为自动缩进不适用于纯文本文件。

4

5 回答 5

7

也有这个问题,有一个名为default-language的插件可以为你解决这个问题。

在 atom 中搜索默认语言,安装并打开其设置。在 Default Language 字段中输入您希望 Atom 默认使用的语言名称,例如 Shell Script(如果有疑问,请从语言选择菜单中复制)。下次您打开没有扩展名(或 shebang)的脚本时,它将默认为您设置的语言。

于 2016-01-27T11:05:52.137 回答
5

添加到您的以下代码init.coffee将执行您的要求:

atom.workspace.observeTextEditors (editor) ->
  default_scope = 'source.shell'
  original = editor.getGrammar()

  # If the editor has "null" grammar (aka unset)
  if original? and original is atom.grammars.grammarForScopeName('text.plain.null-grammar')
    default_grammar = atom.grammars.grammarForScopeName(default_scope)
    if default_grammar? # check if desired grammar is already loaded
      editor.setGrammar(default_grammar)
    else
      # grammar was not loaded yet, so add a callback as grammars load
      callback = atom.grammars.onDidAddGrammar (grammar) ->
        if grammar.id is default_scope
          # once we've loaded the grammar, set it and dispose of the callback
          editor.setGrammar(grammar)
          callback.dispose()

注意事项:

  • init.coffee文件是您无需编写包即可自定义 Atom 的地方
  • observeTextEditors方法设置一个回调,在每次TextEditor创建时为当前打开和未来的编辑器调用
  • 上面的代码:
    1. 检查创建编辑器的语法
    2. 当且仅当它是默认(“null”)语法时,它会在加载后将编辑器的语法设置为 Shell 语法
    3. 处理完回调以检查语法加载

这应该解决TypeError: Cannot call method 'getScore' of undefined在新窗口中打开的第一个文件发生的问题。

要默认使用不同的语法,只需更改该default_scope = 'source.shell'行以使用您想要的任何语法的范围。

于 2014-07-14T00:23:49.197 回答
2

首先,CTRL+SHIFT+L 是你的朋友。不幸的是,这不是一个永久的解决方案,但很高兴知道。

当然,我们更喜欢更永久的解决方案。由于 Atom 中的 API 更改,其他几个答案现在已过时。下面是更新的版本。灵感最初来自这个讨论,但这里的其他答案似乎也遵循相同的概念。

把它放在你的 init.coffee 文件 ( File -> Open Your Init Script) 中:

extname = require("path").extname
fileTypes =
  ".wxs": "text.xml"
  ".wxi": "text.xml"
  ".wixobj": "text.xml"

nullGrammar = atom.grammars.selectGrammar("text.plain.null-grammar")
atom.workspace.observeTextEditors (editor) ->
  grammar = atom.grammars.selectGrammar(fileTypes[extname(editor.getPath())])
  editor.setGrammar grammar  if editor.getGrammar() is nullGrammar and grammar isnt nullGrammar

基本上,您定义了一个文件类型数组,以及您想要将它们关联的语法(AKA 语法突出显示)。找到每个编辑器,看看它是否已经有一个选定的语法,如果没有,如果我们找到一个,试着给它一个。

我遇到的一个问题是,语法高亮仅在您已经启动 Atom后打开文件时才有效。如果您打开一个导致 Atom 启动的文件(例如通过在您最喜欢的操作系统中双击它的图标),则在您重新打开它之前不会对该文件进行语法高亮显示。

于 2015-01-26T15:11:16.830 回答
2

您需要在config.cson文件中创建映射。

"*":
  core:
    customFileTypes:
      "source.shell": [
         "sh"
         "shell"
      ]

用于将 .sh 和 .shell 文件映射到 shell 脚本语法。

于 2016-11-18T07:08:32.143 回答
1

看看这段代码:(然后您可以将“text.html.basic”更改为您需要的任何语法)

editor = atom.workspace.getActiveTextEditor()
cursor = editor.getLastCursor()
valueAtCursor = atom.config.get(cursor.getScopeDescriptor(), 'my-package.my-setting')
valueForLanguage = atom.config.get(editor.getRootScopeDescriptor('text.html.basic'), 'my-package.my-setting')

如需参考,请参阅:Scope Descriptors @ https://atom.io/docs/latest/advanced/scopes-and-scope-descriptors

于 2014-12-18T09:51:40.570 回答