按字段对缓冲行进行排序

时间:2010-01-22 05:53:38

标签: elisp

如何按第二个字段(作者姓名)或第三个字段(发布日期)对以下缓冲区数据进行排序?我想要一个纯粹的elisp解决方案,所以我宁愿没有使用M- |的解决方案。

Tom Sawyer|Mark Twain|1876
Harry Potter and the Philosopher's Stone|JK Rowling|1997
Harry Potter and the Half-Blood Prince|JK Rowling|2009
The Da Vinci Code|Dan Brown|2003
A Short History of Nearly Everything|Bill Bryson|2003

2 个答案:

答案 0 :(得分:2)

此功能使用sort-regexp-fields来完成工作:

(defun my-sort-fields (n)
  "Sort lines by | delimted fields"
  (interactive "nWhich field: ")
  (sort-regexp-fields nil
                      (format "^\\([^|]*|\\)\\{%d\\}\\([^|\n]*\\)\\(|[^|\n]*\\)*$" (- n 1))
                      (format "\\2" )
                      (point-min)
                      (point-max)))

答案 1 :(得分:1)

这看起来非常像org-mode表。你能在每行的开头和结尾添加一个|吗?然后,您可以使用内置的org-sort命令按列进行排序。如果 处于其他主要模式,则可以将orgtbl-mode用作该区域的次要模式。