如何模块化emacs配置?

jul*_*ien 45 emacs configuration elisp

我决定从头开始重写我的.emacs,我想设置一些模块化的东西,以避免一个可怕的1k + LoC init.el文件......

我认为每个配置都需要解决一些基本问题:

  • 全球选择
  • 编辑功能
  • 导航(帧和缓冲区)
  • 键绑定
  • 模式自定义

虽然我仍然想要通过结构,我正在寻找一些如何实现这一点的指针.
我在github等上看了一些.emacs,似乎有不同的方法,没有首选的方法,这有点令人困惑.
我有兴趣阅读有关如何构建这样的设置的一些想法,特别是一些相关的elisp代码.


编辑:已经赶上了事情,并没有太多时间玩这个.将在几天内尝试提出的方法,并看看什么是最好的,同时感谢所有的建议!


edit2:我一直在使用带有org-mode文字初始化文件,这绝对太棒了!
我还没有设置一个特定的加载机制,我一直在使用这个代码,递归加载我的elisp目录,然后要求或任何设置说明说.

  (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
  (let* ((my-lisp-dir "~/.emacs.d/elisp/")
  (default-directory my-lisp-dir))
  (setq load-path (cons my-lisp-dir load-path))
  (normal-top-level-add-subdirs-to-load-path)))
Run Code Online (Sandbox Code Playgroud)

我仍然需要对此进行修改,可能使用自动加载,以及一些字节重新编译,如果修改了技巧; 我很乐意听到有关这方面的建议.

seh*_*seh 44

我的.emacs文件加载〜/ .emacs.d/init.el,它定义了以下函数,首先为XEmacs编写,但这些日子对Emacs运行良好:

(defconst user-init-dir
  (cond ((boundp 'user-emacs-directory)
         user-emacs-directory)
        ((boundp 'user-init-directory)
         user-init-directory)
        (t "~/.emacs.d/")))


(defun load-user-file (file)
  (interactive "f")
  "Load a file in current user's configuration directory"
  (load-file (expand-file-name file user-init-dir)))
Run Code Online (Sandbox Code Playgroud)

然后文件的其余部分将加载大量单个文件,其形式如下:

(load-user-file "personal.el")
Run Code Online (Sandbox Code Playgroud)

我目前的文件集如下:

  • personal.el
  • platform.el
  • cygwin.el
  • variables.el
  • paths.el
  • 邮件news.el
  • MISC-funcs.el
  • bbdb.el
  • calendar.el
  • 角马,funcs.el
  • C-和java.el
  • lisp.el
  • clojure.el
  • go.el
  • markdown.el
  • SGML的xml.el
  • tex.el
  • spelling.el
  • org.el
  • packages.el
  • fonts.el
  • 颜色theme.el
  • frame.el
  • server.el
  • keys.el
  • aquamacs.el

正如名字所暗示的,其中一些在意图上比其他一些更具体.文件越精细,在重新安装软件包或库时,就越容易禁用表单集群.当"移入"新系统时,这会非常有用,您可以在其中拖动配置文件但尚未安装所有支持包.


Jus*_*ith 7

你可以(require 'foo)这样做,这将加载 elisp 在你的加载路径中找到的第一个“foo.el”,或者(require 'foo "/home/user/experimental/foo.el")加载路径之外的东西。如果“foo.el”不包含表达式,则会报告错误(provide 'foo)。在不正常的情况下,你可以这样做(require 'foo "bar.el"),只要“bar.el”有一个(provide 'foo)子句,这就会起作用。


Joe*_*nte 6

要将自定义分割为不同的文件,可以使用initsplit.el.此外,维基还有一个模块化.emacs布局页面.