Поведение отступа в Emacs - PullRequest
       6

Поведение отступа в Emacs

14 голосов
/ 10 декабря 2010
class Foo
  attr_accessor :a,
                :time, # ms since epoch
                :b,
                :c
end

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

Ответы [ 3 ]

12 голосов
/ 02 октября 2011

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

(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
4 голосов
/ 01 февраля 2011

от Реми (в комментариях): Обратите внимание, что Emacs будет правильно делать отступ для класса Foo

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

2 голосов
/ 22 декабря 2013

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

...