为 PuppetLabs 配置自定义 Emacs Ruby 模式

为 PuppetLabs 配置自定义 Emacs Ruby 模式

我主要使用 emacs 来编辑我的傀儡配置文件。我在 .emacs 中使用以下设置来加载 Ruby 模式并将其用于 Puppet 配置文件 ( *.pp):

(autoload 'ruby-mode "ruby-mode" "Major mode for editing ruby scripts." t)
(setq auto-mode-alist  (cons '(".rb$" . ruby-mode) auto-mode-alist))
(setq auto-mode-alist  (cons '(".pp$" . ruby-mode) auto-mode-alist))

除了我的木偶文件中“ensure”指令的缩进之外,这一切都很好。因为ensure是 Ruby 中的保留字,所以它的缩进更加突出:

cron { logrotate:
  command => "/usr/sbin/logrotate",
  user => root,
  hour => 2,
ensure => present
  minute => 0,
}

如何告诉 Emacs 不要ensure对 Puppet 文件进行特殊处理?

答案1

我认为处理这个问题的最简单方法是将 ruby​​-mode.el 复制到 puppet-mode.el 并删除您看到它 ensure特别处理的所有地方。在我的中ruby-mode.el,这似乎只发生在两个地方:

  1. 块词的定义位置

    (defconst ruby-block-mid-keywords
      '("then" "else" "elsif" "when" "rescue" "ensure")
      "Keywords where the indentation gets shallower in middle of block statements.")
    
  2. 保留字的定义如下:

    (defconst ruby-font-lock-keywords
    ...
                 "ensure"
    

我敢打赌ensure从这两个地方删除,另存为puppet-mode.el然后将其更改.emacs为这样就可以了:

(autoload 'puppet-mode "puppet-mode" "Major mode for editing Puppet config" t)
(setq auto-mode-alist  (cons '(".pp$" . puppet-mode) auto-mode-alist))

相关内容