![为 PuppetLabs 配置自定义 Emacs Ruby 模式](https://linux22.com/image/22670/%E4%B8%BA%20PuppetLabs%20%E9%85%8D%E7%BD%AE%E8%87%AA%E5%AE%9A%E4%B9%89%20Emacs%20Ruby%20%E6%A8%A1%E5%BC%8F.png)
我主要使用 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
,这似乎只发生在两个地方:
块词的定义位置
(defconst ruby-block-mid-keywords '("then" "else" "elsif" "when" "rescue" "ensure") "Keywords where the indentation gets shallower in middle of block statements.")
保留字的定义如下:
(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))