【问题标题】:Sorting buffer lines by a field按字段对缓冲区行排序
【发布时间】:2010-01-24 00:55:59
【问题描述】:

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

汤姆索亚|马克吐温|1876 哈利波特与魔法石|JK罗琳|1997 哈利波特与混血王子|JK罗琳|2009 达芬奇密码|丹布朗|2003 几乎所有事物的简史|比尔布赖森|2003

【问题讨论】:

    标签: elisp


    【解决方案1】:

    这个函数使用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)))
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这确实有效。我希望得到实际的 elisp 代码。我可以“C-h f org-sort”并查看链接中提供的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 2013-05-10
      • 2017-11-13
      • 2015-03-11
      • 1970-01-01
      相关资源
      最近更新 更多