Wie verschiebe ich einen ausgewählten Textbereich in Emacs um eine bestimmte Anzahl von Leerzeichen?

26

Ich schreibe Python-Code, daher ist es wichtig, Zeilenblöcke zu verschieben, um zu vermeiden, dass jede Zeile einzeln durchlaufen wird. Wie kann ich das ohne ein Add-On tun? Gibt es eine Art von Tastenbefehl, um dies zu tun?

Vass
quelle
3
Nicht Python-spezifische Antworten finden Sie unter emacs.stackexchange.com/q/11 und emacs.stackexchange.com/q/18 .
Legoscia

Antworten:

40

Verwenden Sie den Befehl indent-rigidly, an den C-x TABstandardmäßig gebunden ist .

Sie können die Anzahl der einzurückenden Leerzeichen mithilfe eines Präfix-Arguments wie z C-5 C-x TAB.

Oder Sie können den Befehl aufrufen und dann mit den Pfeilen nach links / rechts die Einzugsebene interaktiv anpassen.

Glucas
quelle
Wie fügt man ein Präfix-Argument hinzu?
Vass
1
Versuchen Sie beispielsweise C-5 C-x TAB, die aktuelle Region um 5 Leerzeichen einzurücken.
Glucas
toll, aber warum bewegt sich die erste Zeile nicht so gut? Ich muss den letzten Teil der Linie über der Auswahl greifen, um den Satz von Linien zu machen, den ich verschieben möchte.
Vass
1
Sie sollten nichts aus der vorherigen Zeile auswählen müssen, aber Sie möchten am Anfang der ersten Zeile, die Sie einrücken möchten, auswählen. Zum Beispiel, C-aum an den Anfang der Zeile C-SPCzu springen, um den Bereich zu markieren, C-n C-num ein paar Zeilen C-5 C-x TABnach unten zu springen und um diese beiden Zeilen einzurücken.
Glucas
1
"Verwenden Sie die Pfeile nach links / rechts, um die Einzugsebene interaktiv anzupassen" Wirklich? Groß! Ich wusste das nicht und musste manchmal raten, wie viele Leerzeichen ich hinzufügen oder entfernen muss. Ich hoffe das kann helfen.
imz - Ivan Zakharyaschev
9

Wenn Sie python-mode.el verwenden C-c >oder C-c <um Blöcke nach links oder rechts zu verschieben

Lompik
quelle
Wie kommt es, dass die erste Zeile der Auswahl nicht verschoben wird, wenn ich nicht den letzten Teil der darüber liegenden Zeile anwähle?
Vass
Ich kann dieses Verhalten nicht reproduzieren. Alle Zeilen einer Auswahl werden verschoben. Emacs 24.4
Lompik
Glucas 'Kommentar besagt, dass dies passieren wird, wenn Sie nicht vom Anfang der Zeile auswählen
Vass
6

Mit dem string-rectangleBefehl ( C-x r t) können Sie beliebigen Text (einschließlich Leerzeichen) in einen ausgewählten Bereich einfügen.

Angenommen, Sie haben diesen Textblock und möchten 5 Leerzeichen vor allen Zeilen einfügen.

abc
  def
    ghi

Wählen Sie zuerst eine "0 column" -Region wie unten gezeigt aus (der Punkt befindet sich auf dem Zeichen "a" und die Markierung befindet sich in derselben Spalte in der Zeile mit "ghi":

▮bc
  def
▯   ghi

string-rectangleFügen Sie nun mit den Text ein, den Sie in den ausgewählten Bereich einfügen möchten. In diesem Beispiel fügen wir 5 Leerzeichen in alle Zeilen ein, einschließlich und zwischen dem Punkt und der Marke.

C-x r t M-5 SPC RET

Dies ergibt den unten angegebenen, stark eingerückten Text.

     abc
       def
         ghi
Kaushal Modi
quelle
4

Es gibt C-x TAB(gebunden indent-rigidly). Geben Sie ein Präfix-Argument an, um anzugeben, nach wie vielen Leerzeichen Sie einrücken möchten. Negativ entfernt so viele Leerzeichen.

Harald Hanche-Olsen
quelle
0

Ich habe festgestellt, dass durch Drücken von Alt-4 und dann SPC das gewünschte Ergebnis erzielt wird. Ich bin nicht sicher, ob dies der beste Weg ist, aber es funktioniert auch.

Vass
quelle