Doom自力更生
文章目录
【注意】最后更新于 August 31, 2021,文中内容可能已过时,请谨慎使用。
目的
在使命宣言中已经确定使用 emacs 作为唯一官方的时间管理工具,以后在生活中,会遇到其他效率问题,激发出各种提高效能的灵感和想法,如果能掌握 emacs 开发,及时的把灵感变为实用的工具,通过工具(技巧)来改变习惯,掌握了 emacs 开发,这将会是潜在的高效产能。
通过工具来改变习惯的方式,将会特别有效,学习使用 el 语言和 doom 的设计模式
确定了期望,如果想要想掌握一门语言需要实用的开发环境和好用的框架来支撑,才能在灵感窍门时,能够抓住机会,快速转换 emacs 思维,通过开发一套实用的工具,来改造自己的习惯。
环境:mac 环境下,emacs 框架:doom 框架下开发
入门:在 doom 下读文档的习惯
第一步:熟悉在 doom 中实现基本的语法开发环境
第二步:doom 加载 helloworld 方法,并实用
在 org-mode 下编写 el 脚本,并运行:spc c e 或 C-x C-e 或 spc ;
给方法添加注释: 使用双引号实现注释
支持和 M-x 交互:(interactive)
掌握基础语法:变量,数组,函数,循环,正则,字符串查找,清空 buffer
进入文档:spc h d h
package 管理器学习 doom 中 Package 管理器的机制
安装方式的介绍:可以自定义安装库的路径,支持安装本地 Package,支持指定 git 提交版本。
还有 package 配置相关,可以在指定时机设置属性,可以指定加载时机,可以在配置中禁用包。
还有目前重要的:可以在 doom 中联调 el 脚本
Doom 相关配置
Configuring packages
:提供了 package 的下钩子的方法。Reloading your config
:提供了在 doom 下调试 el 表达式的方法。创建自己的模块
Writing your own modules
创建模块(即新建目录):~/.doom.d/modules/abc/xyz激活模块(init.el 配置):(doom! … :abc xyz)
覆盖内置模块:在 modules 下,新建内置模块同名模块即可
模块的目录结构和文件功能介绍
File structure
模块加载的配置:~=config.el=~
模块依赖包关系:~=packages.el=~
实现通用的工具方法:
=autoload/*.el=
OR=autoload.el=
目前测试在两个文件声明的方法:
- helloworld 在文件 boyer/helloworld/config.el
- helloworld_autoload 在文件 boyer/helloworld/autoload.el
添加 autoload 注释
添加方法注释的方法:在 defun 第二行使用双引号在第二行实现注释:双引号""
1 2 3 4 5 6 7 8 9
(defun helloWorld_autoload () "在doom中创建的第一个方法,学习el基础语法,和doom模块的加载机制的学习,实现doom交互" (interactive) (message "我是一个支持交互的方法,请多多关照") (switch-to-buffer-other-window "helloWorld_autoload") (erase-buffer) (insert "加载我的方法") (other-window 1) )
支持 M-x 交互:(interactive)
- helloworld_test 在 boyer/helloworld/autoload.el 主要验证不添加;;;#autoload 注释,也可以加载成功
验证 helloworld 模块是否安装成功
- 重启 emacs
- 查找函数:spc h f helloworld
- 交互函数:M-x:helloworld
加速 doom sync 方法 https://github.com.cnpmjs.org https://hub.fastgit.org
替换阿里代理
1
git config --global url.https://github.com.cnpmjs.org/.insteadof https://github.com/
在 init.el 中添加
1 2 3 4 5 6 7 8 9
'emacs-china镜像 (setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/") ("org" . "http://elpa.emacs-china.org/org/") ("melpa" . "http://elpa.emacs-china.org/melpa/"))) '清华镜像 (setq package-archives '(("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/") ("org" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/") ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))
在 doom 框架下创建自己的 helloword-mode[6/6]
- State “DONE” from
- 在 emacs 读 doom 文档实现加载过程
- 在 helloword 模块中添加方法,doom 加载之后并使用
- 在 doom 中开发模块: boyer/helloworld
编写旅游团小程序,学习 el 基础语法
编写一个欢迎旅游团的小程序,在荧光屏打印欢迎语
组织旅游团数组声明,方法声明,方法调用使用 seq 创建一个观光团:team
1 2 3 4 5 6 7 8 9 10 11 12 13
;;创建团队初始团队三人 (setq teams '("张三" "里斯" "万二")) ;;选一个队长 (setq leader (car teams)) ;;指定其他队友 (setq other (cdr teams)) ;;加入两个新成员 (push "于三" teams) ;;在点名方法 (defun call (name) (insert (format "点名: %s !\n" name)) ) (mapcar 'call teams)
在车上欢迎队友窗口切换,擦除 buffer,切换到当前页面
1 2 3 4 5 6 7 8
(setq car "专121公交台") (defun greet () (switch-to-buffer-other-window car) (erase-buffer) (mapcar 'call teams) (other-window 1) ) (greet)
欢迎语临时变更,更新荧光屏上欢迎语字符串搜索,报错问题
1 2 3 4 5 6 7 8 9 10
(defun replace_call_greet () (switch-to-buffer-other-window car) (goto-char (point-min)) ;; `nil' 参数的意思是 : 查找并不限于某个范围内 ;; `t' 参数的意思是: 当什么都没找到时,不给出错误提示 (while (search-forward "点名" nil t) (replace-match "欢迎")) (other-window 1) ) (replace_call_greet)
在荧屏上加粗队员名称正则的使用方法更新字体的方法
1 2 3 4 5 6 7 8 9 10
(defun bold_name () (switch-to-buffer-other-window car) (goto-char (point-min)) (while (re-search-forward "欢迎:\\(.+\\)!" nil t) (add-text-properties (match-beginning 1) (match-end 1) (list 'face 'bold))) (other-window 1) ) (bold_name)
doom/reload 刷新问题
当遇到方法找不到的问题,先找到 mode 的源码库名,进入~/.emacs.d/.local/straight/repos/mode 库名。重新拉去代码,在执行编译命令 doom sync。
例如:
compilation-buffer-name: Symbol’s function definition is void: projectile-compilation-buffer-name
当遇到环境问题,例如:无法找到 emacs 的提示,此时考虑环境变量,iterm 环境和 doom 环境是不同的,doom 环境配置需要执行 doom env 生成 doom 的环境变量。
1 2 3
"/Users/venkobas/doom-emacs/bin/doom" sync -e Can't find emacs in your PATH Comint exited abnormally with code 1 at Sun Jan 17 00:59:49
文章作者 iTBoyer
上次更新 2021-08-31