我是emacs的新手,它的缩进让我不知所措。它对自己的好处太聪明了;它(错误地)认为它知道我想如何格式化我的源代码,但是我没有时间为我编写代码的每种不同语言追逐每种模式的每个设置;其中许多语言都没有启用任何模式。
这是我想要的行为:
setq
。这将使我在所有语言中获得逻辑和一致的行为。它会把代码格式化的工作留给我,但是没关系,我已经这样做了20年了,而且我知道如何制作其他宏来使它变得高效。更重要的是,它使我免于摆弄配置设置,试图让自动行为符合我的喜好。我的宏可以依赖于一致的行为,因此它们可以在所有模式下正常工作。
以上可能吗?当然其他人以前做过这个吗?那里有一些小模式吗?
答案 0 :(得分:6)
以下是代码:
(setq tab-width 4)
(defun plain-tab ()
(interactive)
(insert (make-string tab-width ?\ )))
(defun plain-ret ()
(interactive)
(looking-back "^\\( +\\).*")
(newline)
(insert (match-string 1)))
(defun plain-del ()
(interactive)
(backward-delete-char
(if (looking-back (format " \\{%d\\}" tab-width)) tab-width 1)))
(defvar all-the-mode-maps
'(c-mode-map c++-mode-map java-mode-map
js-mode-map emacs-lisp-mode-map
clojure-mode-map))
(require 'cc-mode)
(require 'js)
(require 'clojure-mode)
(eval `(mapc
(lambda(map)
(define-key map [tab] 'plain-tab)
(define-key map [return] 'plain-ret)
(define-key map [backspace] 'plain-del)
(define-key map "{" (lambda()(interactive)(insert "{")))
(define-key map "}" (lambda()(interactive)(insert "}"))))
(list ,@all-the-mode-maps)))