class Foo attr_accessor :a, :time, # ms since epoch :b, :c end
在文本模式下,'a'之后列出的变量将如上所述缩进,但在ruby模式下,它们将与'attr_accessor'齐平。在这种情况下,如何让ruby模式像文本模式一样缩进?请注意,我希望能够选择整个文件并点击c-m- \以获得除了所有其他ruby-mode.el缩进规则之外的上述缩进。
答案 0 :(得分:12)
这种黑客行为应该适用于大多数情况。
(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
答案 1 :(得分:4)
来自Remi(评论中): 请注意,Emacs将正确缩进类Foo attr_accessor(:a,:time,#ms from epoch:b,:c)end - Rémi2010年12月11日8:50
你可以添加parens并正确缩进 - 我在这里添加它是因为我正在寻找未回答的问题,而且这个问题出现了(错误,因为它已在评论中得到解答)。
答案 2 :(得分:2)
使用Emacs 24.4或更新版本时,默认情况下,您的示例将缩进为此。