减少几行的缩进

时间:2012-03-14 20:34:21

标签: emacs indentation

有没有什么方法可以在emacs中标记文本并按空格/制表符粒度向左移动(删除起始空格)?

与使用Shift + Tab的其他编辑器相同。

4 个答案:

答案 0 :(得分:20)

  1. 选择您所在的地区;
  2. 键入 C-u ,后跟要缩进的空格数(如果要减少缩进,则为负数);
  3. 使用 C-x TAB (默认情况下绑定到indent-rigidly)将缩进应用于该区域。
  4. 这比 S-TAB 更麻烦,但是如果Emacs格式化无法解决您的问题,那么恕我直言是某种最后的手段。

    编辑:更好的解决方案:Shift a region or line in emacs(已接受答案)。这就是我目前在Emacs中用于更改缩进的内容。警告:涉及一些Emacs Lisp。

答案 1 :(得分:3)

一般情况下,当您点击<TAB>时,emacs会将当前样式所指示的内容置于其中,所以当然这里有点不同。最让人想到的是M-\,它会在点周围折叠水平空白。如果要在行之前删除空格的“矩形”,则delete-rectangle可能更合适,您可以通过设置标记和移动点来选择矩形然后使用C-x r d来实现。 / p>

答案 2 :(得分:2)

这可能更简单,更直观:首先确保启用cua-modeM-x cua-mode切换它)。然后转到该行的开头并按C-return。出现一个红色矩形。现在向下移动光标并向右移动以根据需要增大矩形。然后按C-d将其删除。就是这样。

当主模式没有规定任何自动缩进(或当它混乱时)时,我经常会遇到这个问题。

使用cua-mode的矩形可以做更多的事情,请参阅http://trey-jackson.blogspot.com/2008/10/emacs-tip-26-cua-mode-specifically.html

答案 3 :(得分:1)

听起来你要解决的问题是当你剪切/粘贴时代码的缩进不正确。您可以通过使用以下内容自动重新缩进文本来解决此问题。

注意:使用前缀参数不会强制重新缩进( C-u C-y ),还有大小阈值变量。

;; automatically indenting yanked text if in programming-modes
(defvar yank-indent-modes '(emacs-lisp-mode
                            c-mode c++-mode
                            tcl-mode sql-mode
                            perl-mode cperl-mode
                            java-mode jde-mode
                            lisp-interaction-mode
                            LaTeX-mode TeX-mode)
  "Modes in which to indent regions that are yanked (or yank-popped)")

(defvar yank-advised-indent-threshold 1000
  "Threshold (# chars) over which indentation does not automatically occur.")

(defun yank-advised-indent-function (beg end)
  "Do indentation, as long as the region isn't too large."
  (if (<= (- end beg) yank-advised-indent-threshold)
      (indent-region beg end nil)))

(defadvice yank (after yank-indent activate)
  "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
  (if (and (not (ad-get-arg 0))
           (member major-mode yank-indent-modes))
      (let ((transient-mark-mode nil))
        (yank-advised-indent-function (region-beginning) (region-end)))))