我在 emacs 中选择了一段 python 代码。有什么最有效的方法可以将其中的每一行缩进和取消缩进 4 个空格?
理想情况下,我想要一些不区分上下文的东西(例如,它允许我在文档字符串中缩进与 python 语法无关的段落)。
我的模式行显示(Python)
。在网上搜索后,我发现了很多关于使用python-mode
而不是python
,但我几天前才开始使用 emacs,因此在有机会理解和使用它们之前,我对更改默认值持谨慎态度。如果更改为python-mode
是最好的选择,我很乐意接受它作为答案。
我尝试过的(来自手册):
<TAB>
没有效果C-M-\
没有效果C-x <TAB>
(严格缩进)每行缩进一列(并取消选择该区域)M-i
用制表符 (8 个空格的长度) 缩进第一行C-M-q
- “CMq 未定义”
我发现的唯一方法是使用正则表达式替换,但对于如此简单的任务来说,这需要太多的击键次数。
答案1
假设变量python-indent
为4:
M-x python-shift-right (C-c >)
M-x python-shift-left (C-c <)
答案2
indent-rigidly
采用前缀参数来指示缩进的量,因此C-u 42 C-x TAB
缩进 42 列,并且由于默认前缀参数为 4,C-u C-x TAB
因此缩进 4 列。
如果您想再次选择区域,请C-x C-x
稍后再进行。
答案3
使用带有数字前缀的 indent-rigidly 命令。
C-u 4 M-x indent-rigidly
将该区域缩进四个空格,C-u -4 M-x indent-rigidly
删除四个空格。
答案4
您也可以使用列模式。
以列模式选择行,然后一次向所有行添加四个空格:
- 跳转到您想要缩进的第一行的第 1 列。
C-<space>
留下痕迹- 将点移至最后一行(留在第一列)
C-x r t
进入列模式(或者C-<RET>
如果你有 CUA 模式)<space><space><space><space><RET>
您可以执行类似的操作来删除四个空格 - 只需在标记区域内包含 4 列(步骤 2-3)并点击<DEL>