【问题标题】:How can I random sort lines in a buffer?如何在缓冲区中随机排序行?
【发布时间】:2019-06-13 03:22:53
【问题描述】:

我有一个按排序顺序排列的单词和短语缓冲区,我希望这些行按随机顺序排序。我将如何使用 emacs 内置函数或 elisp 来做到这一点?

例如,给定

酒吧 省略 emacs 富 你好世界 敏捷的棕色狐狸

我想要一些完全随机的结果,例如:

富 敏捷的棕色狐狸 你好世界 省略 emacs 酒吧

或者...

你好世界 省略 酒吧 敏捷的棕色狐狸 富 emacs

【问题讨论】:

    标签: sorting emacs


    【解决方案1】:

    在 GNU/Linux 上使用 Bash:

    类似于肖恩的解决方案,选择区域然后:

    C-u M-| shuf
    

    说明:

    M-|将选定区域的内容通过管道传输到 bash 命令 shuf。 shuf 洗牌。前缀 C-u 获取 shuf 的输出并使用它来覆盖所选区域。

    【讨论】:

    • 您可以在许多系统(Linux、除 NetBSD 之外的所有 BSD)上使用 sort -R 代替 shuf
    • 最快最简单!
    【解决方案2】:

    或者,这里是 sort-lines 适应此要求。

    我已经删除了 reverse 参数(显然与这里无关),并简单地提供了一个“比较”函数,将随机结果返回给 sort-subr

    (defun my-random-sort-lines (beg end)
      "Sort lines in region randomly."
      (interactive "r")
      (save-excursion
        (save-restriction
          (narrow-to-region beg end)
          (goto-char (point-min))
          (let ;; To make `end-of-line' and etc. to ignore fields.
              ((inhibit-field-text-motion t))
            (sort-subr nil 'forward-line 'end-of-line nil nil
                       (lambda (s1 s2) (eq (random 2) 0)))))))
    

    对于原文:
    M-x find-function RET sort-lines RET

    【讨论】:

      【解决方案3】:

      randomize-region.el 似乎在做你想做的事。

      【讨论】:

      • @Geremia:最简单的方法可能就是将代码剪切并粘贴到您的 .emacs 文件中。
      【解决方案4】:

      如果您不介意使用 Perl,您可以选择要随机化的区域,然后键入 C-u M-| perl -MList::Util=shuffle -e 'print shuffle <STDIN>'

      我确信许多其他流行的编程语言也提供类似的功能。

      【讨论】:

        猜你喜欢
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多