gpt4 book ai didi

ruby - Emacs ruby​​ 模式缩进行为

转载 作者:bug小助手 更新时间:2023-10-28 10:47:03 25 4
gpt4 key购买 nike

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

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

最佳答案

这个技巧应该在大多数情况下都有效。

(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

关于ruby - Emacs ruby​​ 模式缩进行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com