Emacs bulk indent for Python
indent-region
mapped to C-M-\
should do the trick.
In addition to indent-region
, which is mapped to C-M-\
by default, the rectangle edit commands are very useful for Python. Mark a region as normal, then:
C-x r t
(string-rectangle
): will prompt you for characters you'd like to insert into each line; great for inserting a certain number of spacesC-x r k
(kill-rectangle
): remove a rectangle region; great for removing indentation
You can also C-x r y
(yank-rectangle
), but that's only rarely useful.
Do indentation interactively.
- Select the region to be indented.
- C-x TAB.
- Use arrows (<- and ->) to indent interactively.
- Press Esc three times when you are done with the required indentation.
Copied from my post in: Indent several lines in Emacs
If you are programming Python using Emacs, then you should probably be using python-mode. With python-mode, after marking the block of code,
C-c >
or C-c C-l
shifts the region 4 spaces to the right
C-c <
or C-c C-r
shifts the region 4 spaces to the left
If you need to shift code by two levels of indention, or some arbitary amount you can prefix the command with an argument:
C-u 8 C-c >
shifts the region 8 spaces to the right
C-u 8 C-c <
shifts the region 8 spaces to the left
Another alternative is to use M-x indent-rigidly
which is bound to C-x TAB
:
C-u 8 C-x TAB
shifts the region 8 spaces to the right
C-u -8 C-x TAB
shifts the region 8 spaces to the left
Also useful are the rectangle commands that operate on rectangles of text instead of lines of text.
For example, after marking a rectangular region,
C-x r o
inserts blank space to fill the rectangular region (effectively shifting code to the right)
C-x r k
kills the rectangular region (effectively shifting code to the left)
C-x r t
prompts for a string to replace the rectangle with. Entering C-u 8 <space>
will then enter 8 spaces.
PS. With Ubuntu, to make python-mode the default mode for all .py files, simply install the python-mode
package.