I am writing python code so shifting/moving blocks of lines is important to avoid going through each line individually. How can I do this without an add-on? Is there a type of operation keystroke command to do this?
5 Answers
Use command indent-rigidly, which is bound to C-x TAB by default.
You can specify the number of spaces to indent by using a prefix argument, such as C-5 C-x TAB.
Or you can invoke the command and then use the left/right arrows to interactively adjust the indent level.
- how do you add a prefix argument?Vass– Vass2015-02-21 18:46:52 +00:00Commented Feb 21, 2015 at 18:46
- 2Try for example
C-5 C-x TABto indent the current region 5 spaces.glucas– glucas2015-02-21 18:51:08 +00:00Commented Feb 21, 2015 at 18:51 - great, but why does the first line not move as well? I have to grab the last part of the line above the selection to make the set of lines I want move.Vass– Vass2015-02-21 18:52:31 +00:00Commented Feb 21, 2015 at 18:52
- 1You shouldn't need to select anything from the previous line, but you do want to select from the beginning of the first line you want to indent. For example,
C-ato move to the beginning of the line,C-SPCto start marking the region,C-n C-nto move down a couple lines,C-5 C-x TABto indent those two lines.glucas– glucas2015-02-21 18:56:57 +00:00Commented Feb 21, 2015 at 18:56 - 1"use the left/right arrows to interactively adjust the indent level" Really? Great! I didn't know this, and sometimes I had to guess how much spaces I need to add or remove. I hope this can help.imz -- Ivan Zakharyaschev– imz -- Ivan Zakharyaschev2015-02-21 19:02:45 +00:00Commented Feb 21, 2015 at 19:02
If you are used python-mode.el C-c > or C-c < to shift blocks left or right
- how come the first line of the selection remains unmoved if I don't select the last part of the line above it?Vass– Vass2015-02-21 18:50:15 +00:00Commented Feb 21, 2015 at 18:50
- I cannot reproduce this behaviour. all line of a selections are moved. Emacs 24.4Lompik– Lompik2015-02-21 18:54:27 +00:00Commented Feb 21, 2015 at 18:54
- glucas' comment says that this will happen if you don't select from the start of the lineVass– Vass2015-02-21 21:39:09 +00:00Commented Feb 21, 2015 at 21:39
The string-rectangle command ( C-x r t) can be used to insert any arbitrary text (spaces included) in a selected region.
Let's say you have this block of text and you want to insert 5 spaces in front of all lines.
abc def ghi First select a "0 column" region as shown below (the point is on the character 'a' and the mark is in the same column in the row containing 'ghi':
▮bc def ▯ ghi Now using string-rectangle, insert the text you want to insert in the selected region. In this example, we will be inserting 5 spaces on all the rows including and inbetween the point and the mark.
C-x r t M-5 SPC RET That will give the below force indented text.
abc def ghi There is C-x TAB (bound to indent-rigidly). Give it a prefix argument to indicate how many spaces you wish to indent by, negative removes that many spaces.
I found that by pressing Alt-4 and then SPC, I get the desired result. Not sure if this is the best way, but it works as well.