Emacs ruby​​-mode缩进行为

 Foo级
   attr_accessor:a,
                 :时间,#ms自纪元以来
                 :B,
                 :C
结束

在文本模式中,’a’之后列出的变量将如上所述缩进,但在ruby模式下,它们将与’attr_accessor’齐平。 在这种情况下,如何让ruby模式像文本模式一样缩进? 请注意,除了所有其他ruby-mode.el缩进规则之外,我还希望能够选择整个文件并点击cm- \以获得上述缩进。

这种黑客行为应该适用于大多数情况。

(defadvice ruby-indent-line (after line-up-args activate) (let (indent prev-indent arg-indent) (save-excursion (back-to-indentation) (when (zerop (car (syntax-ppss))) (setq indent (current-column)) (skip-chars-backward " \t\n") (when (eq ?, (char-before)) (ruby-backward-sexp) (back-to-indentation) (setq prev-indent (current-column)) (skip-syntax-forward "w_.") (skip-chars-forward " ") (setq arg-indent (current-column))))) (when prev-indent (let ((offset (- (current-column) indent))) (cond ((< indent prev-indent) (indent-line-to prev-indent)) ((= indent prev-indent) (indent-line-to arg-indent))) (when (> offset 0) (forward-char offset)))))) 

例:

 class Comment < ActiveRecord::Base after_create :send_email_to_author, :if => :author_wants_emails?, :unless => Proc.new { |comment| comment.post.ignore_comments? } end 

来自Remi(评论中):请注意,Emacs将正确缩进类Foo attr_accessor(:a,:time,#ms from epoch:b,:c)end – Rémi2010年12月11日8:50

你可以添加parens并正确地缩进 – 我在这里添加它是因为我正在寻找未回答的问题,而且这个问题出现了(错误,因为它已在评论中得到回答)。

使用Emacs 24.4或更高版本时,默认情况下,您的示例将以此方式缩进。