在emacs中移动区域或线

在emacs中移动区域或线,emacs,indentation,text-manipulation,Emacs,Indentation,Text Manipulation,我正在emacs中寻找一种通过n空格将文本向右或向左移动的方法。与vim中类似的功能。它应该在区域上工作,或者如果在当前行上未选择任何区域,则不会将光标从其当前位置移动 来自的解决方案不如M-x严格缩进效果好,因为它在某种程度上记住了最后使用的区域,并将其移动。最接近的似乎是一个,但我没有设法使它工作。我不是lisp开发人员,所以很难修改代码。我将感谢任何帮助 谢谢 为了实现这一点,我通常会做一个技巧: 激活CUA模式 转到行的开头 C-RET,现在如果你移动光标,你会看到一个矩形的红色区域

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

来自的解决方案不如
M-x严格缩进
效果好,因为它在某种程度上记住了最后使用的区域,并将其移动。最接近的似乎是一个,但我没有设法使它工作。我不是lisp开发人员,所以很难修改代码。我将感谢任何帮助


谢谢

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

  • 激活CUA模式
  • 转到行的开头
  • C-RET,现在如果你移动光标,你会看到一个矩形的红色区域
  • 将光标沿直线向下移动并键入空格,直到获得正确的移位
这也可以通过某种方式(以相同的方式)通过编程实现

编辑:
我刚刚在emacs wiki上读过这篇文章,除了CUA模式之外,它是相同的解决方案,它比“公共”矩形选择功能强大得多(因为它是可视化的)。

也许这是您想要的方式

(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))) (定义移位文字(距离) (如果(使用-region-p) (让((标记)(标记))) (省去远足 (严格缩进(区域开始) (完) 距离) (推动标记t) (setq停用标记零) (严格缩进(行起始位置) (线路末端位置) (距离) (取消右移(计数) (交互式“p”) (移位文本计数) (卸载左移(计数) (交互式“p”) (移位文本(-count)))
您可以选择区域,然后
C-u C-x
将移动4个空格。您可以在C-u后键入一个数字,将4改为其他任何数字。

太好了!这正是我要找的!谢谢。你不想把它也放到EmacsWiki上吗?我该怎么做才能让它移位
4
调用该函数4次?你可以使用
(CUA选择模式t)
启用CUA出色的矩形编辑功能,与其他功能分开。如果您没有将
C-RET
绑定到其他内容,您可以将其放入init文件中,它不会与任何内容冲突。有关移动行的基本用法的快速说明:
C-RET
+光标移动以指定矩形,
RET
循环角点,在矩形之前/之后键入insert,
C-RET
以退出。请参阅CUA-base.el中“CUA矩形支持”下的注释,以了解此次要模式提供的全部详细信息,或者阅读“我有一个忏悔”。我使用CUA模式。我喜欢这个提示(emacs用户超过20年)还有一个提示:
C-u
后面的数字可能是负数,在这种情况下,区域将向左移动,而不是向右移动。