Select multiply lines, then type C-u 8 C-x Tab , it will indent the region by 8 spaces.
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.
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 indentationYou can also C-x r y (yank-rectangle), but that's only rarely useful.
indent-region mapped to C-M-\ should do the trick.
I've been using this function to handle my indenting and unindenting:
(defun unindent-dwim (&optional count-arg)
"Keeps relative spacing in the region. Unindents to the next multiple of the current tab-width"
(interactive)
(let ((deactivate-mark nil)
(beg (or (and mark-active (region-beginning)) (line-beginning-position)))
(end (or (and mark-active (region-end)) (line-end-position)))
(min-indentation)
(count (or count-arg 1)))
(save-excursion
(goto-char beg)
(while (< (point) end)
(add-to-list 'min-indentation (current-indentation))
(forward-line)))
(if (< 0 count)
(if (not (< 0 (apply 'min min-indentation)))
(error "Can't indent any more. Try `indent-rigidly` with a negative arg.")))
(if (> 0 count)
(indent-rigidly beg end (* (- 0 tab-width) count))
(let (
(indent-amount
(apply 'min (mapcar (lambda (x) (- 0 (mod x tab-width))) min-indentation))))
(indent-rigidly beg end (or
(and (< indent-amount 0) indent-amount)
(* (or count 1) (- 0 tab-width))))))))
And then I assign it to a keyboard shortcut:
(global-set-key (kbd "s-[") 'unindent-dwim)
(global-set-key (kbd "s-]") (lambda () (interactive) (unindent-dwim -1)))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With