在Emacs中缩进多行

51
在我的Emacs中,space键可以正确缩进1行。如果我选择多行并按下space键,则无法缩进。
通过参考这个link,我尝试使用C-M-\C-M-q,但C-M会直接删除整个所选块。
这是我的.emacs,有人能帮忙吗?

缩进多行 - Sebastián Palma
5个回答

124

选择多行文本,然后键入C-u 8 C-x Tab,它会将所选区域缩进8个空格。

C-u -4 C-x Tab会将缩进取消并向左移动4个空格。


4
这是唯一对我有效的方法,而且找不到 GNU Emacs Indent Multiple Lines。非常出色的贡献。 - benjaminmgross
2
甚至在你使用邪恶模式时,它也能正常工作!主要超级终极赢了! - John Curry
这也是唯一一个对我有效的。不知道为什么 C-M-\ 不起作用。 - zhihuifan
在 OSC 中,Emacs 的 C-M\ 不起作用。无论如何,您如何选择代码块(不使用鼠标)? - Stryker
1
非常简短易懂的命令 :) 在我的 MacOS 上有效 C-h C-a C-u 8 C-x Tab - prayagupa
显示剩余2条评论

39
如果你希望Emacs正确缩进多行代码,那么命令是C-META \,也称为C-M-\。换句话说,它不是Control - M,而是Control - Meta - Backslash(在大多数键盘上是Control + Alt + \)。

1
特别是涉及到indent-region命令。如果没有column参数,它将不起作用。为了提供这个参数,必须使用通用参数前缀C-u,后跟要缩进到的列数。例如,如果您希望缩进到第三列,则键序列为C-u 3 C-M-\。对我来说,虽然这确实缩进了区域,但它也破坏了当前的缩进方案。它强制区域中的每一行具有相同的缩进级别。 - Lorem Ipsum

28

[警告:如评论中所述,这种方法可能会导致错误。欢迎提出建议以修复它。]

交互式进行缩进的步骤:

  1. 选择要缩进的区域。
  2. C-x TAB
  3. 使用箭头(←和→)进行交互式缩进。
  4. 完成所需的缩进后,按下Esc键三次。

3
如果使用CUA模式,这将产生意想不到的结果。 - scruss
你的意思是制表符和空格会混乱吗? - vineeshvs
1
C-x TAB 在我的缓冲区中调用“indent-rigidly”函数,所以如果 C-x TAB 不起作用,您可以调用 M-x:indent-rigidly。而且,按下箭头也可以结束,不一定要按 Esc 键。 - AlbusMPiroglu
C-x 是 CUA 模式下的文本剪切;indent-rigidly 需要重新映射到另一个按键组合,就像 @nephewtom 在这里的回答中所述:https://emacs.stackexchange.com/questions/31564/emacs-bulk-indent-for-python-while-cua-mode-is-enabled - Erik Knowles

4

除了Kev的方法,其他方法对我都没有用-而且那个方法对于我这种手指慢的人来说太冗长了。

对我来说,我可以选择高亮区域并按下Alt+左箭头。奇怪的是,即使在emacs中Alt被注册为meta键,Esc+左箭头也不起作用。


1
这对我来说在任何我使用的emacs上都有效。我已经在许多不同的操作系统上尝试过它,安装了各种emacs版本。比所有那些多次按键命令要快得多。 - T.C. Proctor
2
“C-u 4 C-x Tab” 的解决方案对我很有用,但你刚提供的这个是我发现的最好的快速重组代码的方法。谢谢! - Naoy

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接