如何在一系列行上运行 emacs 命令



我想对整个文件运行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的经验相当少。

最新更新