Подтвердить что ты не робот

Emacs рубиновый режим отступов

class Foo
  attr_accessor :a,
                :time, # ms since epoch
                :b,
                :c
end

В текстовом режиме переменные, перечисленные после 'a', будут иметь отступ, как указано выше, но в рубиновом режиме они будут заподлицо с attr_accessor. Как я могу получить рубиновый режим для отступов, как текстовый режим в этой ситуации? Обратите внимание: я хотел бы иметь возможность выбрать весь файл и нажать c-m- \, чтобы получить вышеупомянутый отступ в дополнение ко всем другим правилам отступов ruby-mode.el.

4b9b3361

Ответ 1

Этот хак должен работать в большинстве случаев.

(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

Ответ 2

Из Реми (в комментариях): Обратите внимание, что Emacs будет правильно отступать классом Foo attr_accessor (: a,: time, # ms from epoch: b,: c) end - Rémi Dec 11 '10 at 8:50

Вы можете добавить parens и иметь его отступ правильно - я добавляю это здесь, потому что я ищу ответы на оставшиеся вопросы, и этот вопрос появляется (неправильно, так как в комментариях ответили).

Ответ 3

При использовании Emacs 24.4 или новее ваш пример будет отступен таким образом по умолчанию.