4

有没有人有用于缩进(和取消缩进)文本块的 Emacs 宏?

我的意思是通常理解的“缩进”,而不是 Emacspeak。换句话说,我想标记一个区域,按 Cu 2,运行这个宏,并让它在该区域的每一行之前添加两个空格。

或者在运行宏之前按 Cu -2 并让它从区域中每行的开头删除两个空格。如果它抱怨行没有足够的前导空白,则奖励积分。

4

3 回答 3

12

indent-rigidly (绑定到 Cx TAB) 做你想要的。它在 indent.el 中,它应该是标准 emacs 发行版的一部分。

此外,当某个地方没有足够的空白时让它抱怨/中止,你可以做这样的事情:(对原始缩进严格代码的快速丑陋黑客攻击)

(defun enough-whitespace-to-indent-p (start end arg)
  (save-excursion
    (goto-char end)
    (setq end (point-marker))
    (goto-char start)
    (or (bolp) (forward-line 1))
    (while (and (< (point) end)
                (>= (+ (current-indentation) arg) 0))
      (forward-line 1))
    (>= (point) end)))

(defun indent-rigidly-and-be-picky (start end arg)
  (interactive "r\np")
  (if (or (plusp arg) (enough-whitespace-to-indent-p start end arg))
      (indent-rigidly start end arg)
(message "Not enough whitespace to unindent!")))
于 2009-04-24T19:27:31.567 回答
3

也可以使用矩形的世界。要插入两个空格:

C-x r t SPC SPC RET

删除两个空格是

C-x r d

前提是您已将矩形定义为覆盖两个空间。CUA 包中还有一个很好的矩形编辑功能。CUA 包不仅仅包含矩形,所以如果你只想要矩形部分,请查看此描述(完整披露,链接到我的博客)。

于 2009-04-24T20:44:16.047 回答
2

默认使用indent-rigidly绑定到C-x TAB

于 2009-04-24T19:29:05.713 回答