it-swarm.com.de

Emacs: Wie kann man einen Python-Code-Bereich um 4 Leerzeichen einrücken / rückgängig machen?

Ich habe eine Region mit Python-Code in Emacs ausgewählt. Was sind die effizientesten Möglichkeiten, um jede Zeile in ihr um 4 Leerzeichen einzuziehen und die Einrückung aufzuheben?

Idealerweise möchte ich etwas, das nicht kontextsensitiv ist (z. B. das Einrücken von Passagen in Dokumentzeichenfolgen, bei denen sich der Einzug nicht auf die Python-Syntax bezieht).

Meine Moduszeile zeigt (Python). Beim Durchsuchen des Webs habe ich viele Diskussionen über die Verwendung von python-mode anstelle von python geführt, aber ich habe erst vor ein paar Tagen angefangen, Emacs zu verwenden, also bin ich vorsichtig Standardeinstellungen ändern, bevor ich die Gelegenheit hatte, sie zu verstehen. Wenn der Wechsel zu python-mode die beste Option ist, akzeptiere ich das gerne als Antwort.

Was ich versucht habe (aus dem Handbuch):

  • <TAB> no effect
  • C-M-\ no effect
  • C-x <TAB> (starr einrücken) jede Zeile um eine Spalte einrücken (und die Auswahl der Region aufheben)
  • M-i rückt eine erste Zeile um einen Tabulator ein (Länge 8 Leerzeichen)
  • C-M-q - "C-M-q ist undefiniert"

Der einzige Weg, den ich gefunden habe, ist die Verwendung von regex-replace, aber das ist eine schreckliche Anzahl von Tastenanschlägen für eine so einfache Aufgabe.

58
Ian Mackinnon

Angenommen, die Variable python-indent ist 4:

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)
69
Chen Levy

indent-rigidly verwendet ein Präfixargument, das angibt, um wie viel eingerückt werden soll. C-u 42 C-x TAB wird also um 42 Spalten eingerückt. Da das Standardpräfixargument 4 ist, wird C-u C-x TAB um 4 Spalten eingerückt.

Wenn Sie die Region erneut auswählen möchten, führen Sie anschließend C-x C-x aus.

16
Gilles

Verwenden Sie den Befehl indent-rigidly mit einem numerischen Präfix.

C-u 4 M-x indent-rigidly zum Einrücken der Region um vier Leerzeichen, C-u -4 M-x indent-rigidly zum Entfernen von vier Leerzeichen.

8
KeithB

C-x C-x Markiere den Code und dann M-x Einrückung für Tab-Modus

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

4
Nestor A. Diaz

Sie können auch den Spaltenmodus verwenden.

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

  1. Wechseln Sie zu Spalte 1 der ersten Zeile, die Sie einrücken möchten.
  2. C-<space> zum Setzen der Marke
  3. verschiebe den Punkt nach unten bis zur letzten Zeile (bleib in Spalte eins)
  4. C-x r t zum Aufrufen des Spaltenmodus (oder C-<RET>, wenn Sie über einen CUA-Modus verfügen)
  5. <space><space><space><space><RET>

Sie können auf ähnliche Weise vier Leerzeichen löschen - fügen Sie einfach 4 Spalten in Ihre markierte Region ein (Schritte 2-3) und drücken Sie <DEL>

3
Steve Lianoglou

Bei der Aktualisierung der obigen Lösung von Chen (getestet unter Emacs 24.4.1) wurden die Befehle umbenannt. Angenommen, Sie möchten gemäß der Variablen python-indent einrücken, lauten die Befehle python-indent-shift-left und python-indent-shift-right. Sie können:

  1. gib sie ein, indem du M-x python-indent-shift-right oder M-x python-indent-shift-left eingibst

  2. verwenden Sie die Standard-Python-Modus-Verknüpfungen C-c > und C-c <

  3. binde sie neu. Zum Beispiel auf einer Tastatur mit einer Windows-Schaltfläche, die ich verwende:

    (global-set-key (kbd "s-s") 'python-indent-shift-left) 
    (global-set-key (kbd "s-d") 'python-indent-shift-right)
    
3
Amnon Harel

Beide S-<LEFT> UND S-<RIGHT> funktionieren einwandfrei im Modus Python major. Dies ist besonders praktisch im Cua-Modus , in dem sich das Verhalten von C-c und C-x beim Kopieren/Ausschneiden ändert, wenn eine Region ausgewählt wird.

0
Vincent

Composability ist der König bei Emacs. Kombinieren Sie einfach M-i mit https://github.com/magnars/multiple-cursors.el und Sie haben Ihren Einrückungsblock Befehl. Das machst du:

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