如何在Sublime Text 2中为我的Gemfile启用语法高亮显示?

时间:2011-12-22 17:30:46

标签: ruby ruby-on-rails-3 syntax-highlighting sublimetext

我最近开始使用Sublime Text 2.这是一个多么棒的编辑器。它突出显示了Ruby代码,但它没有突出显示我的Gemfile。

有没有办法让它做到这一点?

我找到this Gist,但没有关于如何使用它的说明。

4 个答案:

答案 0 :(得分:34)

至少有三种选择:

  1. 手动切换语法(不是首选,但很简单;无需说明)
  2. "Gemfile"添加到Ruby语法文件列表中
  3. 使用您链接的插件并为其创建包

  4. <强> 1。没有解释,但方便的技巧

    您可以绑定击键来设置语法而无需移动到鼠标。

    我将语法更改为 Ctrl-Opt-Space ,方法是将以下内容添加到我的用户键绑定中:

    [
      { "keys": ["ctrl+alt+space"], 
        "command": "show_overlay", 
        "args": { "overlay": "command_palette", "text": "Set Syntax: " } }
    ]
    

    <强> 2。将"Gemfile"添加到Ruby语法文件列表

    • Linux: ~/.config/sublime-text-2/Packages/Ruby/Ruby.tmLanguage
    • OS X: ~/Library/Application Support/Sublime Text 2/Packages/Ruby/Ruby.tmLanguage
    • Windows: %APPDATA%/Sublime Text 2/Packages/Ruby/Ruby.tmLanguage

    您也可以使用菜单选项Preferences -> Browse Packages进入Ruby包。一旦你进入文件就会很明显:​​它是具有Ruby外观文件名的<array>元素。添加<string>Gemfile</string>即可完成设置。

    升级可能会覆盖设置;我不确定ST2是如何工作的 - 通过代码片段可以更清晰地完成它。

    第3。使用您链接到

    的代码段

    更多工作(以及一个语法错误的更正)。你可以手动完成,在Packages中创建一个目录(参见上面的位置)或创建一个实际的包,并允许ST2安装它。

    我创建了一个名为"Syntax"的测试包,并将片段复制到其中,重新启动ST2,并打开Gemfile按预期工作。修正需要额外的冒号(new gist),简言之:

    elif name[-3] == "erb": # Needed a semi-colon here.
      set_sintax(view, "HTML (Rails)", "Rails")
    

答案 1 :(得分:5)

如果您在这里但正在使用Sublime Text 3,您可能无法找到Ruby语法文件的列表&#39;在包中。

网上发现的大多数其他解决方案让我感到困惑。

我通过在Sublime Text 3中打开文件时手动将Gemfile更改为Ruby右下角文件扩展菜单项来修复此问题(这是我每次打开文件时一直在做的事情) 。

选择ruby后,转到首选项 - &gt;设置 - 更多 - &gt;语法特定用户

{
  "extensions":
  [
    "Gemfile",
    "Gemfile.lock"
  ]
}

当您导航到特定于语法的用户时,它会打开一个特定于该文件具有语法高亮显示功能的语言的文件。您可能需要将文件更改回任何默认值(我的是&#39; Rd(R文档).sublime-settings&#39;)并从该语法突出显示文件中删除Gemfile。

在Ubuntu中,这些文件存储在

~/.config/sublime-text-3/Packages/User

答案 2 :(得分:2)

ST2的DetectSyntax插件为突出显示文件提供了更全面的解决方案 - 它允许基于规则的文件突出显示。它足够聪明,可以理解Rails文件,使用.rb作为扩展名的其他文件和标准ruby文件之间的区别。

标准规则包括GemfileRakefileGuardfile以及其他符合Ruby for Syntax格式的规则。

请参阅DetectSyntax on GitHub

答案 3 :(得分:-1)

您可以通过复制用户/文件夹中的HTML.tmLanguage文件来实现此目的,这样就不会被更新覆盖。