我认为只有一个笔记文件更加灵活和兼容。然而,对于稍微大一点的文件来说,它往往会变得缓慢。多个小文件很快,但需要更多的设置工作,并且仅在该设置中起作用。
单文件解决方案
为了加快速度,请考虑将org-startup-with-latex-preview
设置为nil(或将#+STARTUP:nolatexpreview
添加到您的文件中)。
当标签用于关键字时不仅会变得混乱,随着文件的增长,使用它们也会变得相当缓慢。我曾经尝试过一些自定义功能,但现在大部分时间都避免使用标签。相反,我使用平坦层次结构、类别等,并依赖于occur
和org-occur
(例如M-x org-occur begin_proof
)。
多个文件
链接到其他文件的org语法非常简单:[[./this idea.org][this idea]]
。如果这太麻烦了,可以轻松编写一个函数,将活动区域替换为适当的链接。
如果您想将[[this idea]]
链接到文件“this idea.org”,您可以添加一个函数到org-open-at-point-functions
并自行处理它。
至于标签,您不会给文件本身打标签,而是给单个顶级标题打标签。这当然意味着您所有与标签有关的问题都回来了。同样,我建议不要使用标签。只需确保文件在正确的位置包含正确的关键字,并使用occur
和相关功能即可。
编辑:一个`org-open-at-point-function'示例
如果您想在目录中的所有文件中搜索模糊链接,而不仅仅是当前缓冲区,可以使用org-open-at-point-functions
hook来实现这一点。以下是一个示例:
(defvar my-link-search-directory "/my/notes/directory/")
(defun my-open-link-function ()
"Open link, interpreting it a the name of a headline."
(let* ((el (org-element-context))
(type (first el))
(link-type (plist-get (cadr el) :type))
(path (let ((path-1 (plist-get (cadr el) :path)))
(when (stringp path-1)
(org-link-unescape path-1)))))
(when (and (eql type 'link)
path
(string= link-type "fuzzy"))
(let* ((path (regexp-quote path))
(result
(delq nil
(org-map-entries
(lambda ()
(when (string-match
path
(org-get-heading))
(list (buffer-file-name) (point))))
nil
(directory-files
my-link-search-directory
t "[.]org\\'")))))
(when result
(when (> (length result) 1)
(message "Warning: multiple search results for %s" path))
(let ((file (caar result))
(pos (cadar result)))
(find-file file)
(goto-char pos)))))))
(add-hook
'org-open-at-point-functions
'my-open-link-function)
请注意,我没有进行过大量测试。
事实上,我建议您不要使用这个,除非您真的需要它。虽然制作花哨的扩展很诱人,但尽可能保持笔记的简单性是更好的选择。如果您将所有内容放在一个文件中,您可以使用记事本、谷歌文档或其他工具编辑您的笔记,如果您需要的话。
[[./]]
作为[[file:]]
的快捷方式。不过,我想知道是否有一种方法可以将org-mode搜索“[[this idea]]”的范围从当前缓冲区扩大到当前目录? - Adam