我想对整个文件运行sort-lines
命令。
C-x h M-x 分拣行 输入
我需要在运行sort-lines
命令之前标记区域。
如何跳过 C-xh。我可以提供一个参数(如 vim 中的%
)来sort-lines
命令吗?
这是最简单的解决方案 - 如果没有区域处于活动状态,则将缓冲区的范围传递给sort-lines
:
(defun my-sort-lines (reverse begin end)
(interactive "Pnr")
(sort-lines reverse
(if (region-active-p) begin (point-min))
(if (region-active-p) end (point-max))))
我不是专家,但我不相信sort-lines
可以接受行号作为参数。也就是说,编写一个函数来做到这一点应该不难。这是我刚刚破解的一个快速版本:
(defun my-sort-lines (start end)
(interactive "nStart: nnEnd: ")
(save-excursion
(save-restriction
(goto-line start)
(mark)
(goto-line (1+ end))
(narrow-to-region (mark) (point))
(sort-lines nil (point-min) (point-max))
(widen))))
从我所做的有限数量的测试来看,它似乎有效。我确信还有改进的地方,因为我对emacs Lisp的经验相当少。