我如何使用sort-regexp-fields
来模拟排序数字字段。我试过这样:
123
345
90
80
1999
M-x
sort-regexp-fields
Regexp specifying records to sort:
\([0-9] + \)
Regexp specifying key within record:
\,\#1
但它不起作用。 我真正想要排序的是这样的:
foo index: 123
index: 345 boo
…
问题是:我想按“索引”一词后面的数字对行进行排序,但数字不在同一个字段中,它们之前只有一个单词“index”。我该怎么做才能完成这个?有人可以帮帮我吗?
答案 0 :(得分:3)
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)))
答案 1 :(得分:0)
如果我理解你的情况,这将做你想要的:
的Mx sort-regexp-fields
RET index: \([0-9]+\)
RET \1
RET