安装
Doom 安装 org-roam
init.el
1
2
3
4
( org
+pandoc
+present
+roam2 )
doom sync
但是在Windows 下(MAC 没问题)这种安装方法由于 Doom 的匹配中有一个hook 有问题 会导致如下错误
错误源
1
2
( use-package! org-roam
:hook ( org-load . +org-init-roam-h )
错误信息
1
( org-load-hook) : Error running hook "+org-init-roam-h" because: ( error Selecting deleted buffer)
独立安装 org-roam
packages.el
1
( use-package! org-roam )
doom sync
配置
config.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
( use-package! org-roam
:init
;; 如果出现 emacsql timeout 的话大概率是 emacsql-sqlite 不能正常工作
;; 进入 ~\.emacs.d\.local\straight\build-28.1\emacsql-sqlite\sqlite 使用MSYS2 进行编译新的 emacsql-sqlite.exe 即可
( setq org-roam-db-location "~/org/roam/org-roam.db" )
:bind (( "C-c n l" . org-roam-buffer-toggle )
( "C-c n f" . org-roam-node-find )
( "C-c n g" . org-roam-graph )
( "C-c n i" . org-roam-node-insert )
( "C-c n c" . org-roam-capture )
;; Dailies
( "C-c n j" . org-roam-dailies-capture-today ))
:config
( if ( file-exists-p "~/emacs-notes/" )
( setq org-roam-directory ( expand-file-name "~/emacs-notes/" ))
( setq org-roam-directory ( expand-file-name "~/emacs_notes/" )))
( use-package! org-roam-graph )
( setq org-id-link-to-org-use-id t )
;; If you're using a vertical completion framework, you might want a more informative completion interface
( setq org-roam-node-display-template ( concat "${title:*} " ( propertize "${tags:10}" 'face 'org-tag )))
( org-roam-db-autosync-mode )
;; If using org-roam-protocol
( require 'org-roam-protocol ))
为以前非org-roam 创建的笔记创建头部ID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
( defun my/add-id-each-org-file-in-dir ()
" 为笔记目录下的所有org 文件加上ID 以便 roam 索引"
( interactive )
( let* (( roam-dir ( expand-file-name "~/emacs_notes/" ))
all-org-files
file-content )
;; (message "roam-dir : %s" roam-dir)
( setq all-org-files ( directory-files-recursively roam-dir ( rx ".org" eos )))
( dolist ( each-file all-org-files )
;; (dolist (each-file (cl-subseq all-org-files 1 4))
;; (message "each-file : %s" each-file)
( setq file-content ( f-read-text each-file ))
;; 跳过org 中的头部的注释 抄自 org-roam-strip-comments
( setq file-content ( with-temp-buffer
( insert file-content )
( goto-char ( point-min ))
( while ( not ( eobp ))
( if ( org-at-comment-p )
( delete-region ( point-at-bol ) ( progn ( forward-line ) ( point )))
( forward-line )))
( buffer-string )))
;; 判断是否有ID 头 如果没有就创建
;; :PROPERTIES:
;; :ID: 6ad2b2ed-6961-4db9-852d-06523d0a5c43
;; :END:
( unless ( or ( string-match "\*.*\n:PROPERTIES:\n:ID:.*\n:END:" ( s-left 400 file-content )) ( string-match ":PROPERTIES:\n:ID:.*\n:END:" ( s-left 200 file-content ))) ;; string-match 不匹配换行符 一定要加上换行符才行
( message "%s insert ID" each-file )
( find-file each-file )
( goto-char ( point-min ))
( org-id-store-link )
( save-buffer )
( kill-buffer )))))
简单使用
创建日记
C-c n j
这个会在 org-roam-directory/daily 下创建一个日记, 日记名字为日期
创建笔记
C-c n c
如果存在 则跳到对应的地方 更新笔记
查找笔记或者创建笔记
C-c n f
如果笔记不存在则创建笔记
如果笔记存在则打开笔记
在笔记中引用别的笔记
C-c n i
org-roam
查看笔记的2D 图
C-c n g
笔记多了就不好看了 有可能会显示失败
org-roam-ui 使用
packages.el
config.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
( use-package! websocket
:after org-roam )
( use-package! org-roam-ui
:after org-roam ;; or :after org
;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
;; a hookable mode anymore, you're advised to pick something yourself
;; if you don't care about startup time, use
;; :hook (after-init . org-roam-ui-mode)
:config
( setq org-roam-ui-sync-theme t
org-roam-ui-follow t
org-roam-ui-update-on-save t
org-roam-ui-open-on-start t ))
doom sync
使用
M-x: org-roam-ui-open
这条命令默认会在浏览器显示笔记的2D 图, 第一次打开的时候, 一般来说浏览器都会拒绝要调整一下浏览器对当前页面的设置
以Chrome 为例:
把不安全内容改为允许
2D效果
3D 效果
默认是2D 显示 在左上角可以设置
利用pyim让 vertico, selectrum 等补全框架,通过 orderless 支持拼音搜索候选项功能
packages.el
1
2
( package! pyim )
( package! pyim-basedict )
config.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
( use-package! pyim
:config
( require 'pyim-basedict )
( require 'pyim-cregexp-utils )
( pyim-basedict-enable )
;; (setq default-input-method "pyim")
;; 如果使用 popup page tooltip, 就需要加载 popup 包。
;; (require 'popup nil t)
;; (setq pyim-page-tooltip 'popup)
;; 如果使用 pyim-dregcache dcache 后端,就需要加载 pyim-dregcache 包。
;; (require 'pyim-dregcache)
;; (setq pyim-dcache-backend 'pyim-dregcache)
;; 显示5个候选词。
( setq pyim-page-length 5 )
;; 金手指设置,可以将光标处的编码,比如:拼音字符串,转换为中文。
;; (global-set-key (kbd "M-j") 'pyim-convert-string-at-point)
;; 按 "C-<return>" 将光标前的 regexp 转换为可以搜索中文的 regexp.
( define-key minibuffer-local-map ( kbd "C-<return>" ) 'pyim-cregexp-convert-at-point )
;; 我使用全拼
( pyim-default-scheme 'quanpin )
;; (pyim-default-scheme 'wubi)
;; (pyim-default-scheme 'cangjie)
;; 我使用云拼音
;; (setq pyim-cloudim 'baidu)
;; pyim 探针设置
;; 设置 pyim 探针设置,这是 pyim 高级功能设置,可以实现 *无痛* 中英文切换 :-)
;; 我自己使用的中英文动态切换规则是:
;; 1. 光标只有在注释里面时,才可以输入中文。
;; 2. 光标前是汉字字符时,才能输入中文。
;; 3. 使用 M-j 快捷键,强制将光标前的拼音字符串转换为中文。
;; (setq-default pyim-english-input-switch-functions
;; '(pyim-probe-dynamic-english
;; pyim-probe-isearch-mode
;; pyim-probe-program-mode
;; pyim-probe-org-structure-template))
;; (setq-default pyim-punctuation-half-width-functions
;; '(pyim-probe-punctuation-line-beginning
;; pyim-probe-punctuation-after-punctuation))
;; 开启代码搜索中文功能(比如拼音,五笔码等)
( pyim-isearch-mode 1 )
;; 让 vertico, selectrum 等补全框架,通过 orderless 支持拼音搜索候选项功能。
( defun my-orderless-regexp ( orig-func component )
( let (( result ( funcall orig-func component )))
( pyim-cregexp-build result )))
;; 以下解决 在vertico 搜索时按 C-n C-p 卡顿的问题
( defun my/pyim-advice-add ()
( advice-add 'orderless-regexp :around #' my-orderless-regexp ))
( defun my/pyim-advice-remove ( &optional n )
( advice-remove 'orderless-regexp #' my-orderless-regexp ))
( advice-add #' vertico-next :before #' my/pyim-advice-remove )
( advice-add #' vertico-previous :before #' my/pyim-advice-remove )
( advice-add 'abort-recursive-edit :before #' my/pyim-advice-add )
( advice-add 'abort-minibuffers :before #' my/pyim-advice-add )
( advice-add 'exit-minibuffer :before #' my/pyim-advice-add )
( my/pyim-advice-add ) ;; 默认开启
)
doom sync
效果