终于有人闲的从零开始折腾Emacs配置了
我想要不要引入一些工具,比如use-package
来简化这个配置
配置文件要不要切分成
- 编程语言相关
- 代码补全相关
- 一些插件
- 图形界面
- 自定义设置custom
- 其他杂项
终于有人闲的从零开始折腾Emacs配置了
我想要不要引入一些工具,比如use-package
来简化这个配置
配置文件要不要切分成
其实不需要 use-package,就用 define-key, with-eval-after-load, require, autoload 之类的就可以。
我有个视频讲到这个,下面是一个实例:
开启counsel-mode后,类似find-file和counsel-find-file功能上应该差不多了吧,不需要用counsel-find-file来替换find-file?
是直接remap
掉了一大部分
(defvar counsel-mode-map
(let ((map (make-sparse-keymap)))
(dolist (binding
'((execute-extended-command . counsel-M-x)
(describe-bindings . counsel-descbinds)
(describe-function . counsel-describe-function)
(describe-variable . counsel-describe-variable)
(describe-symbol . counsel-describe-symbol)
(apropos-command . counsel-apropos)
(describe-face . counsel-describe-face)
(list-faces-display . counsel-faces)
(find-file . counsel-find-file)
(find-library . counsel-find-library)
(imenu . counsel-imenu)
(load-library . counsel-load-library)
(load-theme . counsel-load-theme)
(yank-pop . counsel-yank-pop)
(info-lookup-symbol . counsel-info-lookup-symbol)
(pop-to-mark-command . counsel-mark-ring)
(geiser-doc-look-up-manual . counsel-geiser-doc-look-up-manual)
(bookmark-jump . counsel-bookmark)))
(define-key map (vector 'remap (car binding)) (cdr binding)))
map)
"Map for `counsel-mode'.
Remaps built-in functions to counsel replacements.")
我也有个配置用来测试新package/以及qa提bug用
如果嫌use-package
太重了 可以参考一下purcell的require-package
这个函数
;;; On-demand installation of packages
(require 'cl-lib)
(defun require-package (package &optional min-version no-refresh)
"Install given PACKAGE, optionally requiring MIN-VERSION.
If NO-REFRESH is non-nil, the available package lists will not be
re-downloaded in order to locate PACKAGE."
(or (package-installed-p package min-version)
(let* ((known (cdr (assoc package package-archive-contents)))
(versions (mapcar #'package-desc-version known)))
(if (cl-find-if (lambda (v) (version-list-<= min-version v)) versions)
(package-install package)
(if no-refresh
(error "No version of %s >= %S is available" package min-version)
(package-refresh-contents)
(require-package package min-version t))))))
引用下 redguardtoo 用来测试 package 的最小配置
我觉得,既然是从零配置,每添加一个功能,最好能阐述理由。
在Emacs中,bookmarks是中央控制台,是交通指挥枢纽,是机场的塔台,是Navigation Control Center,是我们随身携带的地图。
应用ZeroEmacs得心应手,如回家一般的熟悉,自己的各种瓶瓶罐罐摆放在何处,应该将bookmarks从doom迁移过来。
(setq bookmark-default-file "~/.doom.d/bookmarks")
load-file 加载之后,无论在哪种配置上,都稳坐指挥台。
ZeroEmacs目前的所有配置:
(setq user-emacs-directory "~/.zeroemacs/")
(add-to-list 'load-path "~/.zeroemacs/elpa/ivy-0.13.1/")
(add-to-list 'load-path "~/.zeroemacs/elpa/counsel-0.13.1/")
(add-to-list 'load-path "~/.zeroemacs/elpa/swiper-0.13.1/")
(require 'ivy)
(require 'swiper)
(require 'counsel)
(ivy-mode 1)
(global-set-key "\C-s" 'swiper-isearch)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key "\C-xb" 'ivy-switch-buffer)
;; Set bookmarks
(setq bookmark-default-file "~/.doom.d/bookmarks")
(provide 'config)
;;; config.el ends here
楼主怎么不用 (package-initialize)
,否则每加一个包都要 add-to-list 'load-path
包路径一次再 require
一次,包少还好,包多了还是有点麻烦的。
是不是用了(package-initialize)
但是没生效,还是有其它目的
谢谢,之前不知道 package-initialize 这个函数。
哈哈,每次配置崩了,就要瞬回一次蛮荒时代,简直没法想自己是怎么调教成功这个小怪兽的
今天也是, doom 因为网络的原因差点没重装好,才体会到有点基本配置做家底真很nice,至少能倒退回青铜和铁器时代。
设置好Emacs最高频的应用bookmarks这个中央控制台和全局地图,同时也要配置好查看每个街区的局部地图工具 dired。
dire默认开启状态,展示文件的全部信息:
这对文件的打开,查找,重命名带来不便,因此按键 ( 调用 dired-hide-details-mode 将详情关掉。
;; Set dired
(add-hook 'dired-mode-hook #'dired-hide-details-mode)
设置好bookmarks和dired,全局的工作告一段落。
顺带手给ZeroEmacs创建快捷启动 alias
# zeroemacs from terminal
alias zemacs="emacs -nw -Q -l ~/.zeroemacs/config.el"
# zeroemacs from GUI
alias zeroemacs="emacs -Q -l ~/.zeroemacs/config.el"
在加载每个文件的时候错误处理一下,
在编辑evil模块相关文件前开个emacs-server
,
或者维护一份vim配置,问题还是挺小的(逃
dired似乎不太好定制,我好久以前发过一贴问 如何定制dired显示的内容 最后也没搞定,我只看 |名称|修改日期|大小| 这三个,并且文件名要显示在第一列,文件名显示在所有文件信息的最后面才看到,这个总感觉不符合直觉(除了dired外,我常用的其它各种文件管理器,任务管理器都是以文件名称为第一列), 现在用org-mode自已整了一个 org-mode超链接文件的打开方式 org-file-apps - #2,来自 wsug
我是自己从零调教的,所以瞬回上古真心往事不堪回首,真是在Emas上浪费太多时间了啊
+1,我通常用daemon+emacsclient,正常app启动仅仅用来调试,不然真是瞬间连开个文件困难(我还Emacs里映射交换了Cmd和Ctrl,崩了真是手指完全打架)
厉害,刚接触的时候从零开始太难了。很早就听说过spaceemacs,但是spaceemacs对键盘毫无逻辑的魔改,屡次劝退了想要学习使用的热情;Spaceemacs用户平常很少用其工作,他们日常用jetbrain和vscode,只是人前炫技的时候用,所以当时对emacs的感觉就是花里胡哨。
之后机缘巧合用了prelude开始上路,直到用了doom切到高速路。
从零开始配置emacs能坚持到现在,真牛人,普通人早就劝退了。
好多人是从知道spaceemacs开始知道了emacs。但是当打开spaceemacs的时候,打开emacs-manual只有两眼一抹黑,键位完全不对应,驴唇马嘴。只能转而去读spaceemacs的手册。
于是,包括我在内的很多人,在没有弄清楚spaceemacs只是emacs的一个畸形配置之前,就怀抱着怎么会有a-emacs,b-eamcs,c-emacs这么多乱七八糟的emacs的疑惑离开了。
doom 的键位还是蛮合理的, 但编辑时时不时卡顿。 所以自定义一份还是必要的。 满足基本需求。