是否有人使用Emacs宏来缩进(和隐藏)文本块?
我的意思是在通常理解的意义上“缩进”,而不是在Emacspeak中。换句话说,我想标记一个区域,按C-u 2,运行这个宏,并在该区域的每一行之前添加两个空格。
或者在运行宏之前按C-u -2并从区域中每行的开头删除两个空格。如果线条没有足够的前导空格,则会引发奖励。
答案 0 :(得分:12)
indent-rigidly(绑定到C-x 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!")))
答案 1 :(得分:3)
还可以使用rectangles的世界。 要插入两个空格:
C-x r t SPC SPC RET
删除两个空格
C-x r d
前提是您已定义矩形以覆盖两个空格。在CUA包中还有一个很好的矩形编辑功能。 CUA包不仅仅包含矩形,所以如果您只想要矩形部分,请查看this description(完全披露,链接到我的博客)。
答案 2 :(得分:2)
默认使用indent-rigidly
绑定到C-x TAB