设置新文件的默认语言

时间:2014-07-09 18:39:47

标签: atom-editor

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

5 个答案:

答案 0 :(得分: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. 创建编辑器的语法
    3. 当且仅当它是默认(“null”)语法时,它会在加载后将编辑器的语法设置为Shell语法
    4. 在完成语法加载后检测语法加载的处理

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

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

答案 1 :(得分:5)

如果有这个问题,还有一个名为default-language的插件会为你做这件事。

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

看一下这段代码:(然后你可以根据需要更改&text;。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')

供参考,请参阅:范围描述符@ https://atom.io/docs/latest/advanced/scopes-and-scope-descriptors

答案 4 :(得分:1)

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

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

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