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

时间:2012-06-03 07:26:20

标签: emacs

我想在整个文件上运行sort-lines命令。

C-X ħ M-X 排序行 输入

我需要在运行sort-lines命令之前标记该区域。

如何跳过 C-x h 。我可以在%命令中提供参数(如vim中的sort-lines)吗?

2 个答案:

答案 0 :(得分:4)

这似乎是最简单的解决方案 - 如果没有区域处于活动状态,则将缓冲区的范围传递给sort-lines

(defun my-sort-lines (reverse begin end)
  (interactive "P\nr")
  (sort-lines reverse
              (if (region-active-p) begin (point-min))
              (if (region-active-p) end (point-max))))

答案 1 :(得分:2)

我不是专家,但我不相信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的经验相当少,我确信还有一些改进。