Wenn ich mit Python in Emacs arbeite, wenn ich einem Codeblock einen Versuch / außer hinzufügen möchte, stelle ich häufig fest, dass ich den gesamten Block Zeile für Zeile einrücken muss. Wie rücken Sie in Emacs den gesamten Block auf einmal ein?
Ich bin kein erfahrener Emacs-Benutzer, finde aber, dass es das beste Werkzeug für die Bearbeitung von ssh ist. Ich benutze Emacs in der Kommandozeile (Ubuntu), nicht als GUI, wenn das einen Unterschied macht.
C-c >
für richtig.C-c <
für linksAntworten:
Wenn Sie Python mit Emacs programmieren, sollten Sie wahrscheinlich den Python-Modus verwenden. Im Python-Modus wird nach dem Markieren des Codeblocks
C-c >
oderC-c C-l
verschiebt den Bereich um 4 Felder nach rechtsC-c <
oderC-c C-r
verschiebt den Bereich um 4 Felder nach linksWenn Sie den Code um zwei Einrückungsstufen oder einen beliebigen Betrag verschieben müssen, können Sie dem Befehl ein Argument voranstellen:
C-u 8 C-c >
verschiebt die Region um 8 Felder nach rechtsC-u 8 C-c <
verschiebt den Bereich um 8 Felder nach linksEine andere Alternative ist die Verwendung,
M-x indent-rigidly
die gebunden ist anC-x TAB
:C-u 8 C-x TAB
verschiebt die Region um 8 Felder nach rechtsC-u -8 C-x TAB
verschiebt den Bereich um 8 Felder nach linksEbenfalls nützlich sind die Rechteckbefehle , die Textrechtecke anstelle von Textzeilen bearbeiten.
Zum Beispiel nach dem Markieren eines rechteckigen Bereichs,
C-x r o
Fügt eine Leerstelle ein, um den rechteckigen Bereich zu füllen (Code wird effektiv nach rechts verschoben).C-x r k
tötet den rechteckigen Bereich (verschiebt den Code effektiv nach links)C-x r t
fordert zur Eingabe einer Zeichenfolge auf, durch die das Rechteck ersetzt werden soll. Bei der EingabeC-u 8 <space>
werden dann 8 Leerzeichen eingegeben.PS. Um mit Ubuntu den Python-Modus zum Standardmodus für alle .py-Dateien zu machen, installieren Sie einfach das
python-mode
Paket.quelle
C-c >
ist in python-mode.el definiert, daher denke ich, dass Sie daspython-mode
Paket irgendwo auf dem Weg installiert haben müssen . Ich bin froh, dass es für dich funktioniert.C-c C-l
undC-c C-r
müssen benutzerdefinierte Bindungen sein, die Sie selbst eingerichtet haben. Wenn Sie ausführenemacs -q
(um Emacs auszuführen, ohne eine Init-Datei zu laden), sehen Sie, dass fürC-c C-l
oderC-c C-r
im Python-Modus keine Bindung besteht .Zusätzlich
indent-region
, dieC-M-\
standardmäßig zugeordnet sind, sind die Rechteckbearbeitungsbefehle für Python sehr nützlich. Markieren Sie eine Region als normal und dann:C-x r t
(string-rectangle
): fordert Sie zur Eingabe von Zeichen auf, die Sie in jede Zeile einfügen möchten; ideal zum Einfügen einer bestimmten Anzahl von LeerzeichenC-x r k
(kill-rectangle
): Entfernen Sie einen Rechteckbereich. ideal zum Entfernen von EinkerbungenSie können auch
C-x r y
(yank-rectangle
), aber das ist nur selten nützlich.quelle
indent-region
zugeordnet zuC-M-\
sollte sollte den Trick tun.quelle
Ich habe diese Funktion verwendet, um das Ein- und Einrücken zu behandeln:
Und dann ordne ich es einer Tastenkombination zu:
quelle
Ich bin ein Emacs-Neuling, daher grenzt diese Antwort wahrscheinlich an nutzlos.
Keine der bisher genannten Antworten bezieht sich auf das erneute Einrücken von Literalen wie
dict
oderlist
. ZBM-x indent-region
oderM-x python-indent-shift-right
und Unternehmen helfen nicht weiter, wenn Sie das folgende Literal ausgeschnitten und eingefügt haben und es sinnvoll neu eingerückt werden müssen:Es fühlt sich an, als
M-x indent-region
sollte man etwas Vernünftiges tunpython-mode
, aber das ist (noch) nicht der Fall.Für den speziellen Fall, in dem Ihre Literale in Klammern stehen, wird durch die Verwendung von TAB in den betreffenden Zeilen das erreicht, was Sie möchten (da Leerzeichen keine Rolle spielen).
In solchen Fällen habe ich also schnell ein Tastaturmakro wie
<f3> C-n TAB <f4>
F3, Strg-n (oder Abwärtspfeil), TAB, F4 aufgenommen und dann F4 wiederholt zum Anwenden des Makros verwendet, um einige Tastenanschläge zu sparen. Oder Sie könnenC-u 10 C-x e
es 10 Mal anwenden.(Ich weiß, dass es nicht nach viel klingt, aber versuchen Sie, 100 Zeilen Müllliteral erneut einzurücken, ohne den Abwärtspfeil zu verpassen, und dann 5 Zeilen nach oben zu gehen und Dinge zu wiederholen;)).
quelle
Ich benutze das folgende Snippet. Wenn die Auswahl auf der Registerkarte inaktiv ist, wird die aktuelle Zeile eingerückt (wie normalerweise). Wenn die Auswahl inaktiv ist, wird die gesamte Region nach rechts eingerückt.
quelle
Machen Sie die Einrückung interaktiv.
Von meinem Beitrag in kopiert : Mehrere Zeilen in Emacs einrücken
quelle
Ich mache so etwas universell
quelle