求助,org-roam V2 的文件名簡化配置

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)))
1 个赞

默认的命令是 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))
1 个赞

谢谢,用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:

1 个赞

哦!原来是这样啊!
我之前试过这样写

(concat ,my-dir-var "/%<%Y%m%d%H%M%S>-${title}.org")
                  "#+TITLE: ${title}\n")

出错了,还以为不能用backquote呢! :laughing:
现在明白了,非常感谢👍🏻