sorting - emacs 使用 sort-regexp-fields 对行进行排序

标签 sorting emacs

我如何使用sort-regexp-fields来模拟排序数字字段。我尝试过这样的:

123
345
90
80
1999

M-x 排序正则表达式字段

正则表达式指定要排序的记录:\([0-9]+\)

正则表达式指定记录中的键:\,\#1

但是这行不通。 我真正想要排序的是这样的:

foo index: 123
index: 345 boo
…

问题是:我想按“index”一词后面的数字对行进行排序,但该数字不在同一字段中,它们前面只有一个“index”一词。我应该做什么来完成这个?有人可以帮助我吗?

最佳答案

sort-regexp-fields 不进行字典比较,并且没有简单的方法可以让它做到这一点。也就是说,我们可以使用一个技巧来定义我们自己的命令,并使用该命令向字典比较中的鞋拔子发出一些建议。

只要您标记要比较的行周围的区域,以下命令就会执行您想要的操作:

(defun my-line-sort (begin end)
  (interactive "r")
  (sort-regexp-fields nil "^.*: +\\([0-9]+\\).*$" "\\1" begin end))

(defun compare-buffer-substrings-lexigraphically (b1 b2)
  (< (string-to-number (buffer-substring-no-properties (car b1) (cdr b1)))
     (string-to-number (buffer-substring-no-properties (car b2) (cdr b2)))))

(defadvice sort-subr (before sort-subr-lexical-compare activate)
  "In special case, force predicate to be a lexical compare"
  (when (eq this-command 'my-line-sort)
    (ad-set-arg 5 'compare-buffer-substrings-lexigraphically)))

关于sorting - emacs 使用 sort-regexp-fields 对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13945056/

相关文章:

emacs - 如何在保存文件时使Emacs创建中间目录?

python - 如何在没有 Pandas 的情况下读取、格式化、排序和保存 csv 文件

python - 如何对字母数字 pandas 索引进行降序排序。

algorithm - 选择排序顺序

algorithm - 选择数组中的 10 个最大值

macos - 如何在 Mac 的 emacs 中绑定(bind) ESC 以退出 (C-g)

emacs - 您最喜欢 emacs 中的哪些全局键绑定(bind)?

javascript - 初始设置要排序的 HTML 列

emacs - 在 Emacs 中哪里输入一段代码?

emacs - 您如何使用 Paredit 注释掉全部或部分 Lisp s-exp?