我有一个带有许多类定义的.py源代码,如下所示:
class C:
# code c
class A:
# code a
class B:
# code b
我想把它变成:
class A:
# code a
class B:
# code b
class C:
# code c
有这个工具吗?用emacs做什么呢?
答案 0 :(得分:4)
我为你编写了代码,但这只是因为我有兴趣了解sort-subr
的工作原理。我不宽恕原始问题的意图。 :)
另外,如果你赞成这个答案,也请提出@ db48x的教学答案。
使用python-sort-defs与使用sort-paragraph
的方式相同。
(defun python-sort-defs (reverse beg end)
(interactive "P\nr")
(save-excursion
(save-restriction
(narrow-to-region beg end)
(goto-char (point-min))
(sort-subr reverse
(function
(lambda ()
(while (and (not (eobp)) (looking-at paragraph-separate))
(forward-line 1))))
'python-end-of-block-must-move))))
(defun python-end-of-block-must-move ()
(when (eq (point) (progn
(python-end-of-block)
(point)))
(forward-line 1)))
答案 1 :(得分:3)
我同意bobince的说法,字母顺序不是排序函数或其他代码的有用方法,但你可以给sort-paragraphs
一个。它甚至可能有效。
如果没有,那么我可以通过查看sort-paragraphs
的实现来看到它是这样做的:
(sort-subr reverse
(function
(lambda ()
(while (and (not (eobp)) (looking-at paragraph-separate))
(forward-line 1))))
'forward-paragraph))))
我打赌你可以提出一些功能来插入那些可以使它工作的功能。第一个将点移动到下一个记录的开头,第二个将点移动到当前记录的末尾。函数有一些可选的参数,告诉它在记录中哪个排序键也可以派上用场。
这些函数在sort.el中;您可以使用C-h f sort-paragraphs
和C-h f sort-subr
为他们提取文档;这将包括指向源的链接。
玩得开心:)
答案 2 :(得分:0)
在测试代码中按字母顺序排序是有意义的。对于包含许多特定测试的测试用例,一些测试(或者可能只是测试名称)将被复制。在重复数据删除之前按字母顺序对测试进行排序是一个好主意。