emacs:如何通过4个空格缩进/缩进python代码区域?


60

我在emacs中选择了一个python代码区域。缩进和缩进每行4个空格的最有效方法是什么?

理想情况下,我希望对上下文不敏感(例如,它允许我缩进文档字符串中的缩进与python语法无关的段落)。

我的模式行显示(Python)。在网络上搜索时,我发现了很多有关使用python-mode而不是的讨论python,但是几天前我才开始使用emacs,因此在我有机会了解默认值及其默认值之前,我很警惕更改默认值。如果更改为python-mode最佳选择,我很乐意接受它作为答案。

我尝试过的内容(来自手册):

  • <TAB> 没有效果
  • C-M-\ 没有效果
  • C-x <TAB> (严格地)每行缩进一列(并取消选择区域)
  • M-i 用制表符缩进第一行(长度为8个空格)
  • C-M-q -“ CMq未定义”

我发现的唯一方法是使用regex-replace,但这对于如此简单的任务来说是很多击键操作。

Answers:


69

假设变量python-indent为4:

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)

5
我不得不做python-indent-shift-left
nnyby

17

indent-rigidly采用一个前缀参数指示要缩进多少,因此C-u 42 C-x TAB缩进42列,并且由于默认的前缀参数是4,所以C-u C-x TAB缩进4列。

如果要再次选择区域,请C-x C-x随后执行。


8

使用带有数字前缀的indent-rigidly命令。

C-u 4 M-x indent-rigidly将区域缩进四个空格,C-u -4 M-x indent-rigidly以删除四个空格。



3

您也可以使用列模式。

在列模式下选择行,然后一次向所有行添加四个空格:

  1. 跳至要缩进的第一行的第一列。
  2. C-<space> 设置标记
  3. 将点向下移动到最后一行(停留在第一列)
  4. C-x r t进入列模式(或C-<RET>如果您具有CUA模式)
  5. <space><space><space><space><RET>

您可以执行类似的操作来删除四个空格-只需在标记区域中包含4列(第2-3步)并点击 <DEL>


3

更新上述Chen的解决方案,当前(在Emacs 24.4.1上测试)命令已重命名。因此,假设您要根据变量python-indent缩进,则命令为python-indent-shift-left和python-indent-shift-right。您可以:

  1. 通过键入M-x python-indent-shift-right或发出它们M-x python-indent-shift-left

  2. 使用默认的python-mode快捷方式C-c >C-c <

  3. 重新绑定它们。例如,在带有Windows按钮的键盘上,我使用:

    (global-set-key (kbd "s-s") 'python-indent-shift-left) 
    (global-set-key (kbd "s-d") 'python-indent-shift-right)
    


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.