Angenommen, die Variable python-indent
ist 4:
M-x python-shift-right (C-c >) M-x python-shift-left (C-c <)
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-mode
statt 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-mode
die beste Option ist, akzeptiere ich dies gerne als Antwort.
Was ich aus dem Handbuch probiert habe:
<TAB>
keine WirkungC-M-\
keine WirkungC-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.
Angenommen, die Variable python-indent
ist 4:
M-x python-shift-right (C-c >) M-x python-shift-left (C-c <)
indent-rigidly
nimmt ein Präfixargument, das angibt, um wie viel eingerückt werden soll, also C-u 42 C-x TAB
Einrückungen um 42 Spalten, und da das Standardpräfixargument 4 ist, C-u C-x TAB
Einrückungen um 4 Spalten.
Wenn Sie die Region erneut auswählen möchten, tun Sie dies C-x C-x
anschließend.
Verwenden Sie den Befehl einrückungssteif mit einem numerischen Präfix.
C-u 4 M-x indent-rigidly
die Region um vier Leerzeichen einrücken, vier Leerzeichen C-u -4 M-x indent-rigidly
entfernen.
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.
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:
C-<space>
Markierung setzenC-x r t
um in den Spaltenmodus zu gelangen (oder C-<RET>
wenn Sie den CUA-Modus haben)<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>
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:
Geben Sie sie durch Eingabe von M-x python-indent-shift-right
oder einM-x python-indent-shift-left
Verwenden Sie die Standard-Kurzbefehle für den Python-Modus C-c >
undC-c <
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)
Composability ist der König mit Emacs. Kombinieren Sie es einfach M-i
mit https://github.com/magnars/multiple-cursors.el, und Sie haben den Befehl zum Einrücken des Blocks. Das machst du:
M->
N mal (wobei N die Anzahl der Zeilen im Block ist)M-i
Sowohl S-<LEFT>
undS-<RIGHT>
funktionieren in Python
Dur. Es ist besonders praktisch in Cua - Modus, wo C-c
und C-x
Verhaltensänderungen / Schnitt zu kopieren, wenn eine Region ausgewählt ist.