使用Emacs缩进(移位4)代码

时间:2009-02-27 09:55:17

标签: emacs elisp

我使用ViewSourceWith编辑StackOverflow的答案和问题 和Emacs。通常,我包含代码和StackOverflow formatting rules 说它必须缩进四个空格才能被识别为 这样。手工或甚至使用宏来做这件事很痛苦。

我在之前的帖子中搜索过,但一无所获。

从Python模式开始,我写道:

(defun text-shift-region (start end count)
  "Indent lines from START to END by COUNT spaces."
  (save-excursion
(goto-char end)
(beginning-of-line)
(setq end (point))
(goto-char start)
(beginning-of-line)
(setq start (point))
(indent-rigidly start end count)))

(defun text-shift-region-right (start end &optional count)
  "Shift region of code to the right
   Stolen from python-mode.
   The lines from the line containing the start of the current region up
   to (but not including) the line containing the end of the region are
   shifted to the right, by `text-indent-offset' columns.

   If a prefix argument is given, the region is instead shifted by that
   many columns.  With no active region, indent only the current line."
  (interactive
   (let ((p (point))
     (m (mark))
     (arg current-prefix-arg))
 (if m
     (list (min p m) (max p m) arg)
   (list p (save-excursion (forward-line 1) (point)) arg))))
  (text-shift-region start end (prefix-numeric-value
              (or count text-indent-offset)))
  )

;; Code in StackOverflow must be marked by four spaces at the
;; beginning of the line
(setq text-indent-offset 4)
(global-set-key "\C-c>" 'text-shift-region-right)

它似乎有效,但我欢迎建议,替代方案,错误报告, 等

5 个答案:

答案 0 :(得分:14)

C-x TAB运行indent-rigidly。给出四个数字参数,它会做你想要的。或者,使用< pre>< code>介绍你的代码(见Markdown Editing Help的第一段)。

编辑:最好写下您的互动声明:

(interactive "r
p")

答案 1 :(得分:12)

另一个简单的方法是使用emacs强大的矩形编辑功能:从第一行的开头开始设置你的区域,并在你要缩进的最后一行的开头结束(注意:它位于该行的开头,因为您不想替换现有的文本!),然后执行

C-x r t (string-rectangle)

然后根据提示输入4个空格。瞧!不需要额外的lisp黑客攻击。此外,您还可以灵活地将空格旁边的其他内容插入到一堆行的开头或中间的任何位置。

答案 2 :(得分:8)

使用C-x TAB严格缩进(如另一个答案中所述)是最简单的方法。只需标记要缩进的区域,然后按C-u C-x TAB。由于C-u的默认前缀是4,这应该完全符合您的要求。

答案 3 :(得分:1)

您的代码对我来说很好。我认为endtext-shift-region的重新设置不是必要的,但除此之外,它看起来还不错。

答案 4 :(得分:1)

python-mode中,您可以标记区域(C-space,移动光标)并点击C-c >以缩进4个空格。