【问题标题】:Set default language for new files为新文件设置默认语言
【发布时间】:2014-07-09 18:39:47
【问题描述】:

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

【问题讨论】:

    标签: atom-editor


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      添加到您的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' 行以使用您想要的任何语法的范围。

      【讨论】:

      • 这会导致错误TypeError: Cannot call method 'getScore' of undefined,请参阅:pastebin.com/yzN2hPUu
      • @shrx 有趣的是,我通过其他代码迭代得到了这一点。这可能是语法尚未加载的时间问题。稍后我将不得不再看一下。
      【解决方案3】:

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

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

      将其放入您的 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 启动的文件(比如在您喜欢的操作系统中双击它的图标),则在您重新打开该文件之前不会突出显示该文件。

      【讨论】:

      • CTRL+SHIFT+L 是我正在寻找的。谢谢@vee
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        看看这段代码:(然后你可以将'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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-21
          • 2012-06-02
          • 1970-01-01
          • 2016-09-07
          • 2013-07-12
          • 2020-10-12
          相关资源
          最近更新 更多