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