我的团队使用特殊类型的文件进行配置,我想使用emacs自动缩进(阻止缩进)文件。
我想通过一个左括号的标签大小增加缩进 - {或[,并减少右括号的标签大小 - }或]。
例如,
files = {
file1 = first_file.txt
file2 = second_file.txt
rules = {
skip_header = 1
fast_process = 1
}
}
C样式缩进不起作用,因为一行不以分号结尾。
我今天已经研究了半天的emacs缩进,但仍然不知道如何做到这一点。
答案 0 :(得分:13)
从文本模式或其他东西派生新模式并创建自己的缩进功能。我知道说起来容易做起来难,所以这可能足够接近:
(define-derived-mode foo-mode text-mode "Foo"
"Mode for editing some kind of config files."
(make-local-variable 'foo-indent-offset)
(set (make-local-variable 'indent-line-function) 'foo-indent-line))
(defvar foo-indent-offset 4
"*Indentation offset for `foo-mode'.")
(defun foo-indent-line ()
"Indent current line for `foo-mode'."
(interactive)
(let ((indent-col 0))
(save-excursion
(beginning-of-line)
(condition-case nil
(while t
(backward-up-list 1)
(when (looking-at "[[{]")
(setq indent-col (+ indent-col foo-indent-offset))))
(error nil)))
(save-excursion
(back-to-indentation)
(when (and (looking-at "[]}]") (>= indent-col foo-indent-offset))
(setq indent-col (- indent-col foo-indent-offset))))
(indent-line-to indent-col)))
打开文件并执行M-x foo-mode
答案 1 :(得分:1)
在我看来,好像javascript-mode
会对您的样本做正确的事情。它可能不完美,但比编写自己的缩进模式容易得多。