在emacs中移动区域或行

时间:2010-07-01 09:17:00

标签: emacs indentation text-manipulation

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

来自EmacsWiki的解决方案与M-x indent-rigidly的效果不是很好,因为它会稍微记住最后使用的区域并将其移位。最接近的似乎是那个here,但我没有设法让它工作。我不是一个lisp开发人员,因此修改代码很困难。我将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:6)

为了达到这个目的,我通常会做一个技巧:

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

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

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

答案 2 :(得分:6)

也许这会以你想要的方式运作。

(defun shift-text (distance)
  (if (use-region-p)
      (let ((mark (mark)))
        (save-excursion
          (indent-rigidly (region-beginning)
                          (region-end)
                          distance)
          (push-mark mark t t)
          (setq deactivate-mark nil)))
    (indent-rigidly (line-beginning-position)
                    (line-end-position)
                    distance)))

(defun shift-right (count)
  (interactive "p")
  (shift-text count))

(defun shift-left (count)
  (interactive "p")
  (shift-text (- count)))