在ORG文件中排序标题


10

我在一个具有以下结构的大型组织模式文件中做笔记:

* Toto, A
Notes about Toto.
* Titi, C
Notes about Titi.
* Tutu, A
Notes about Tutu.

我想对文件进行排序,以使所有带有A的标题都以开头,带有B,而所有标题都以之前依次开头C,依此类推。有没有一种自动的方式来执行组织模式?


4
你尝试了org-sort吗?
abo-abo 2015年

C-c ^从内存中(可能是类似的结尾^,例如,C-x C-c ^等等)
wvxvw 2015年

Answers:


13

有一个org-sort命令,但是您可能需要调整文件结构以获得所需的结果(如果我正确理解了这个问题)。

使用org-sortC-c ^)对大纲中的条目,表中的行或列表中的项目进行排序。例如,您可以从标题中调用org-sort以对所有子项进行排序。

在您的示例中,您希望对大纲中的顶级条目进行排序,因此请首先选择所有条目。打电话时org-sort,系统会提示您如何排序:按字母顺序,按优先级等等。

我从您的示例中猜测,您期望的最终结果是:

* Toto, A
Notes about Toto.
* Tutu, A
Notes about Tutu.
* Titi, C
Notes about Titi.

也就是说,您希望按字母顺序排序,但是该结尾字母优先吗?没有内置的排序方法。如果您更改了条目以将排序字母放在首位(例如A, Toto),则可以使用常规的字母排序。另一个选择是将信息移到每个项目的属性,然后可以按属性排序。

正如@nanny在评论中建议的那样,org-sort还可以调用自定义排序功能。这样,您可以使用现有文件,而不必更改所有条目。这是一个排序函数,用于查找当前的标题文本并将最后一个字符追加到开头,以便优先。如果您的头条新闻不都遵循确切的模式,那么您将需要更强大的功能。

(defun my-sort-last-letter ()
  (let ((text
         (plist-get
          (cadr (org-element-headline-parser (line-end-position)))
          :raw-value)))
    (concat (string (aref text (- (string-width text) 1))) text)))

1
更改文件的另一种方法是在其中使用[f]unc排序类型,org-sort然后编写一个函数以根据现有结构进行排序。
保姆2015年

快速query-replace-regexp编辑了一些严格遵循正确格式的标题后,这很好地解决了我的问题。比将我所有的数据转换为属性要容易得多。
2015年

...或者您可以将其移至标签,即“ * Toto:A:”,然后对Cc ^ r标签进行排序
jtgd

1
只是想让您知道,我每年都会遇到这个问题,并且昨天我再次使用了您的解决方案。
jch 2016年

0

我将标题具有不同优先级的标题放在文件中的任何位置,我不关心顺序。稍后,我将按照议程视图对它们进行排序。通过使用标签,可以使用自定义议程视图查看具体类别中已排序的标题。

我知道这不是如何对文件中的标题进行排序的答案,但是使用议程视图查看标题始终是最好的方法。您可以快速插入优先的标题,而不必担心顺序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.