在Emacs组织中设置个人维基

我想以组织模式设置个人wiki。

到目前为止,我已经尝试了这两种方法。 我第一次尝试使用一个“Scientific Notebook.org”文件。 在这里我记录了所有的笔记 - 每个笔记都有自己的标题,日期和标签(与博客文章格式相同)。 然后我打开org-velocity快速浏览文件。

但是这造成了两个问题:首先,我在笔记中使用了很多数学(LaTeX预览是我希望成为我们组织的原因之一)。 但是这些需要很长时间才能加载,我无法尝试用数千个条目打开一个文件的图像(全部都是数学填充!!)

我遇到的另一个问题是标签。 我喜欢用很多多字标签来交叉引用我的笔记。 但是,组织方式将这些包装在缓冲区中,使我的标题完全无法理解。 另外(也许它只是我)但我发现CamelCase真的很难阅读,尤其是当面对类似的东西时:

:monotonicTransformations:homogeneousFunctions:orderedSets:proofs:

现在我的第二次尝试是与德夫特。 在这里,我已经把每个音符分解成它自己的.org文件,并创建一个专用的〜/ org /文件夹来保存我的wiki。 但是,这是我卡住的地方:

1)你如何设置自动链接,以便在一个音符中键入“foo bar”,创建一个链接到“foo bar.org”? 这可以通过无线电目标完成吗? 如果不是,可以重写此语法[[foo bar]]以在〜/ org /目录中的所有文件中搜索标题? 我试图添加Wiki.el作为一个小模式,但没有骰子...

2)你如何标记单个文件? 那你怎么能拉出所有标签的列表并用它来过滤你的笔记清单? 我已阅读该书签+可让您进行文件标记。 但是我迷失在网上的文档中

我很想听听其他人如何解决这些问题,您正在使用哪些次要模式,工作流程和键盘快捷键或其他模块!

谢谢!

-亚当


在我看来,只有一个音符文件更加灵活和兼容。 然而,它往往会缓慢甚至适度大小的文件。 多个小文件很快,但他们需要更多努力来设置,并且只能在该设置下工作。

单一文件解决方案

为了加快速度,可以考虑将org-startup-with-latex-preview设置为零(或者将#+STARTUP: nolatexpreview添加到文件中)。

标签不仅在用于关键字时变得杂乱,随着文件的增长使用它们也变得相当缓慢。 我玩过一些自定义功能,但现在大多数情况下都避免使用标签。 相反,我使用平面层次结构,类别,并依赖于发生和组织发生(例如, Mx 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挂接来完成此操作。 这里是一个例子:

(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
                        ;; Here we set the scope.
                        ;; 'agenda would search in all agenda files.
                        ;; We want a list of all org files in `my-link-search-directory'.
                        (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)

请注意,我没有测试过这么多。

其实,我会建议不要使用这个,除非你真的需要它。 虽然花哨的扩展是诱人的,但保持你的笔记尽可能简单是最好的。 如果你有一个文件的所有内容,你可以编辑你的笔记与记事本或谷歌文档或任何,如果你需要。


我为维基使用了一个简单的代码。 因为这就是维基对我的意义所在:对事物进行分类的快速方法。 结构如下:

  • 每个主题都有其自己的组织文件
  • 每个主题都有自己的标题
  • 所有组织文件都在单个目录中
  • 你可以跳转到文件,或用helm创建一个新文件
  • 而已。 我发现需要将任何东西链接到任何东西,跳到主题功能已经足够了。 这看起来如何:

    跳到主题

    一旦在一个主题内,我可以通过worf跳过主题。 这看起来如何:

    跳到主题的话题

    链接地址: http://www.djcxy.com/p/30641.html

    上一篇: Setup a personal wiki in Emacs Org

    下一篇: Emacs initialization as org file: how can I get the right version of org