org-roam V1,是用文件名当作节点名,文件名易读。
等到V2版时,用了时间戳加节点名当作文件名,导致文件名很长。
最近看到
才发现,文件名也可以不用时间戳,可以用节点名。
但查阅了 mannul文档,没有找到如何设置文件名的地方,寻请指教,谢谢
org-roam V1,是用文件名当作节点名,文件名易读。
等到V2版时,用了时间戳加节点名当作文件名,导致文件名很长。
最近看到
才发现,文件名也可以不用时间戳,可以用节点名。
但查阅了 mannul文档,没有找到如何设置文件名的地方,寻请指教,谢谢
设置 org-roam-capture-templates
,不用时间戳把 %<%Y%m%d%H%M%S>
删掉就可以了,下面是我的例子:
(setq org-roam-capture-templates
'(("m" "main" plain "%?"
:target (file+head "main/%<%Y%m%d%H%M%S>-${title}.org"
"#+TITLE: ${title}\n")
:unnarrowed t)
("b" "bibliography reference" plain
(file "~/.emacs.d/private/orb-capture-template.org")
:target (file+head "references/${citekey}.org" "#+title: ${title}\n")
)
("r" "reference" plain "%? \n %(v-i-or-nothing) \n\n%(v-a-or-nothing)"
:target
(file+head "references/%<%Y%m%d%H%M%S>-${title}.org" "#+title: ${title}\n")
:unnarrowed t)))
默认的命令是 org-roam-insert 和 org-roam-find-file,这两个没有设置,只设置capture应该不行吧。
这两个在创建的时候都会调用 org-roam-capture-
@VagrantJoker 提供的思路是正确的;
最简单的设置可以是这样
(setq org-roam-capture-templates
'(("d" "default" entry "\n* %?"
:target (file+head
"notes/${slug}.org" ;; 这里设置了存放路径 notes/ 并且删除了默认的 %<%Y%m%d%H%M%S>
"#+TITLE: ${title}\n\n")
:empty-lines 1
:immediate-finish t
:kill-buffer t)))
谢谢,原来如此,这句总出错,试著去掉*,去掉\n,仍然出错。
'((“d” “default” entry “\n* %?”
试试这样:
(setq org-roam-capture-templates
'(("d" "default" plain "%?"
:target (file+head "${slug}.org"
"#+title: ${title}\n")
:unnarrowed t))
谢谢,用org-roam-find-file一个新文件时,messages里有这些错误提示:
Deprecated date/weektree capture templates changed to ‘file+olp+datetree’. org-capture-set-target-location: Invalid capture target specification: “%?”
Wrong type argument: commandp, org-roam-buffer-visit-thing [6 times]
我的配置是:
(setq org-roam-capture-templates
'(("d" "default" plain "%?"
:if-new (file+head "${slug}.org" "#+TITLE: ${title}\n")
:empty-lines 1
:unnarrowed t)))
需要注意的一点是,去掉时间戳会有重名的问题。个人觉得slug都可以不要,但时间戳可以确保文件名的唯一性。
例子:想为两个同名张三的人创建不同的笔记?文件少的时候完全没问题,文件累积到以百计,以千计的时候,就要天天考虑怎么命名文件了。调动完org-roam-node-find, org-roam-node-insert,标题都写好了,结果无法创建同文件名笔记,又一时不知道应该用什么名好,不得不放弃本次输入,多绝望啊。
补充一:后起之秀 denote 的文件名设计也包含了一个确保文件名唯一性的时间戳开头。
补充二:一直活动在org-roam discourse 的 nobiot 的文件名设计:去掉了slug, 但保留了一个 uuid 确保文件名唯一性。
類似維基百科,通常不會重名。如果是兩個領域、範疇,可能會出現重名,這時建議建兩個目錄,分別管理兩個org-roam。也如同logseq的數據倉庫概念。同一個數據倉庫,文件名(節點名)是唯一的。
是啊,手冊上的配置方法也用了,谷歌也搜不到問題所在。
提示:
org-roam-capture: Invalid capture target specification: “%?”. Please adjust ‘org-roam-capture-templates’
Wrong type argument: commandp, org-roam-buffer-visit-thing
環境是mac 的doom
(setq org-roam-directory "~/Documents/org/roam/zilin/pages/")
(use-package! org-roam
:after org
:commands
(org-roam-buffer
org-roam-setup
org-roam-capture
org-roam-node-find)
;; ===== 快捷键设置=====
:init
(map!
:leader
:prefix ("v" . "org-roam")
"f" #'org-roam-node-find
"i" #'org-roam-node-insert
"b" #'org-roam-buffer-toggle
"t" #'org-roam-tag-add
"T" #'org-roam-tag-remove)
;; ===== END HERE ====
:config
(org-roam-completion-everywhere t)
(org-roam-setup))
;; (setq org-roam-node-display-template
;; (concat "${title:*} "
;; (propertize "${tags:10}" 'face 'org-tag)))
(setq org-roam-database-connector 'sqlite3)
(setq org-roam-db-gc-threshold most-positive-fixnum)
(setq org-roam-capture-templates
'(("d" "default" plain "%?"
:if-new (file+head "${slug}.org" "#+TITLE: ${title}\n")
:empty-lines 1
:unnarrowed t)))
请问一下 @VagrantJoker
"main/%<%Y%m%d%H%M%S>-${title}.org"
中的 main 可以替换成变量吗?
想通过
(advice-add 'org-roam-capture :before #'blove/org-roam-dir-sub)
这样的方式在 capture 时选择指定的子目录,然后存放到变量 my-dir-var 中,再
:target (file+head
(concat my-dir-var "/%<%Y%m%d%H%M%S>-${title}.org")
"#+TITLE: ${title}\n")
不成立。
那么请问 ~ 如果可以将 main 的位置写成变量
my-dir-var,正确的写法应该是…?
这儿需要使用backquote
(setq org-roam-capture-templates
`(("m" "main" plain "%?"
:target (file+head
,(concat my-dir-var "/%<%Y%m%d%H%M%S>-${title}.org")
"#+TITLE: ${title}\n")
:unnarrowed t)
;; extras
))
References:
哦!原来是这样啊!
我之前试过这样写
(concat ,my-dir-var "/%<%Y%m%d%H%M%S>-${title}.org")
"#+TITLE: ${title}\n")
出错了,还以为不能用backquote呢!
现在明白了,非常感谢👍🏻