16

我正在寻找一种在emacs中将文本向右或向左移动n空格的方法。它在 vim<<>>. 它应该在一个区域上工作,或者如果在当前行上没有选择任何区域,并且不会将光标从其当前位置移动。

EmacsWiki的解决方案效果不佳,M-x indent-rigidly因为它在某种程度上记住了最后使用的区域并转移了那个区域。最接近的似乎是这里的,但我没有设法让它工作。我不是 lisp 开发人员,因此很难修改代码。我将不胜感激。

谢谢!

4

3 回答 3

37

您可以选择区域,然后C-u C-x <tab>将移动 4 个空格。您可以在 Cu 之后键入一个数字,将 4 更改为其他任何值。

于 2012-10-30T14:09:59.987 回答
9

也许这可以按照您想要的方式工作。

(defun shift-text (距离)
  (如果(使用区域-p)
      (让((标记(标记)))
        (保存游览
          (缩进严格(区域开始)
                          (区域端)
                          距离)
          (按标记标记 tt)
          (setq deactivate-mark nil)))
    (缩进刚性(行起始位置)
                    (行结束位置)
                    距离)))

(defun shift-right (count)
  (交互式“p”)
  (移位文本计数))

(defun shift-left (count)
  (交互式“p”)
  (移位文本(-计数)))
于 2010-07-01T09:48:13.707 回答
6

为了实现这一点,我通常会做一个技巧:

  • 激活CUA模式
  • 转到行首
  • C-RET,现在如果您移动光标,您应该会看到一个矩形红色区域
  • 将光标向下移动并键入空格,直到获得正确的移位。

这也可以通过某种方式(以相同的方式)以编程方式完成。

编辑:我刚刚阅读了 emacs wiki 中的文章,除了 CUA 模式之外,它是相同的解决方案,它比“普通”矩形选择(因为它是视觉的)强大得多。

于 2010-07-01T09:22:42.990 回答