emacs: Wie wird der Python-Code um 4 Leerzeichen eingerückt?

32832
Ian Mackinnon

Ich habe eine Region von Python-Code in Emacs ausgewählt. Was sind die effizientesten Möglichkeiten, um jede Zeile um 4 Leerzeichen einzurücken und einzugrenzen?

Im Idealfall möchte ich etwas, das nicht kontextsensitiv ist (z. B. kann ich Passagen in Docstrings einrücken, bei denen sich die Einrückung nicht auf die Python-Syntax bezieht).

Meine Moduszeile zeigt (Python). Bei der Suche im Internet fand ich eine Menge Diskussionen über die Verwendung von python-modestatt python, aber ich habe erst vor ein paar Tagen mit Emacs angefangen, also bin ich vorsichtig, die Standardeinstellungen zu ändern, bevor ich die Chance hatte, sie zu verstehen. Wenn das Wechseln zu python-modedie beste Option ist, akzeptiere ich dies gerne als Antwort.

Was ich aus dem Handbuch probiert habe:

  • <TAB> keine Wirkung
  • C-M-\ keine Wirkung
  • C-x <TAB> (Einrückung starr) jede Zeile um eine Spalte einrücken (und die Auswahl der Region aufheben)
  • M-i zieht eine erste Zeile um einen Tabulator ein (Länge von 8 Feldern)
  • C-M-q - "CMq ist undefiniert"

Die einzige Möglichkeit, die ich gefunden habe, ist die Verwendung von Regex-Replace, aber das ist eine schreckliche Anzahl von Tastenanschlägen für eine so einfache Aufgabe.

54

8 Antworten auf die Frage

66
Chen Levy

Angenommen, die Variable python-indentist 4:

M-x python-shift-right (C-c >) M-x python-shift-left (C-c <) 
Ich musste "Python-Indent-Shift-Left" machen. nnyby vor 8 Jahren 4
15
Gilles

indent-rigidlynimmt ein Präfixargument, das angibt, um wie viel eingerückt werden soll, also C-u 42 C-x TABEinrückungen um 42 Spalten, und da das Standardpräfixargument 4 ist, C-u C-x TABEinrückungen um 4 Spalten.

Wenn Sie die Region erneut auswählen möchten, tun Sie dies C-x C-xanschließend.

7
KeithB

Verwenden Sie den Befehl einrückungssteif mit einem numerischen Präfix.

C-u 4 M-x indent-rigidlydie Region um vier Leerzeichen einrücken, vier Leerzeichen C-u -4 M-x indent-rigidlyentfernen.

4
Nestor A. Diaz

Cx Cx markieren Sie den Code und dann den Mx-Einzug für Tab-Modus

Das ist das Speichern, wenn Sie für jede Zeile die Tabulatortaste gedrückt haben.

3
Steve Lianoglou

Sie können auch den Spaltenmodus verwenden.

Wählen Sie die Zeilen im Spaltenmodus aus und fügen Sie dann allen Zeilen auf einmal vier Leerzeichen hinzu:

  1. Springen Sie in Spalte 1 der ersten Zeile, die Sie einrücken möchten.
  2. C-<space> Markierung setzen
  3. verschiebe den Punkt bis zu den letzten Zeilen (bleib in der ersten Spalte)
  4. C-x r tum in den Spaltenmodus zu gelangen (oder C-<RET>wenn Sie den CUA-Modus haben)
  5. <space><space><space><space><RET>

Sie können ein ähnliches Manöver ausführen, um vier Leerzeichen zu löschen. Fügen Sie einfach 4 Spalten in Ihre markierte Region ein (Schritte 2-3) und drücken Sie <DEL>

3
Amnon Harel

Nach der Aktualisierung der Lösung von Chen (derzeit getestet auf Emacs 24.4.1) wurden die Befehle umbenannt. Vorausgesetzt, Sie möchten entsprechend der Variablen python-indent einrücken, sind die Befehle python-indent-shift-left und python-indent-shift-right. Sie können:

  1. Geben Sie sie durch Eingabe von M-x python-indent-shift-rightoder einM-x python-indent-shift-left

  2. Verwenden Sie die Standard-Kurzbefehle für den Python-Modus C-c >undC-c <

  3. binden sie wieder. Auf einer Tastatur mit einem Windows-Button verwende ich beispielsweise:

    (global-set-key (kbd "s-s") 'python-indent-shift-left)  (global-set-key (kbd "s-d") 'python-indent-shift-right) 
0
Evgeniy Dolzhenko

Composability ist der König mit Emacs. Kombinieren Sie es einfach M-imit https://github.com/magnars/multiple-cursors.el, und Sie haben den Befehl zum Einrücken des Blocks. Das machst du:

  1. M-> N mal (wobei N die Anzahl der Zeilen im Block ist)
  2. M-i
0
Vincent

Sowohl S-<LEFT>undS-<RIGHT> funktionieren in PythonDur. Es ist besonders praktisch in Cua - Modus, wo C-cund C-xVerhaltensänderungen / Schnitt zu kopieren, wenn eine Region ausgewählt ist.