Was ist der einfachste Weg, um ausgewählte Regionen oder Linien (wenn keine Auswahl vorhanden ist) in Emacs nach oben oder unten zu verschieben? Ich suche nach der gleichen Funktionalität wie in Eclipse (begrenzt auf M-up, M-down).
84
Antworten:
Eine Linie kann mit an gebundenen Transponierlinien verschoben werden
C-x C-t
. Keine Ahnung von Regionen.Ich habe dieses Elisp-Snippet gefunden, das macht, was Sie wollen, außer dass Sie die Bindungen ändern müssen.
quelle
Update: Installieren Sie das
move-text
Paket von Marmalade oder MELPA , um den folgenden Code zu erhalten.Folgendes verwende ich, das sowohl für Regionen als auch für einzelne Linien funktioniert:
quelle
Du solltest es versuchen
drag-stuff
!Es funktioniert genau wie Eclipse Alt+ Up/ Downfür einzelne Linien sowie für ausgewählte Regionslinien!
Darüber hinaus können Sie Wörter mit Alt+ Left/ verschieben. Right
Dies ist genau das, wonach Sie suchen! Und es ist sogar in den ELPA-Repos erhältlich !
Andere Lösungen haben bei mir nie funktioniert. Einige von ihnen waren fehlerhaft (Transponieren von Linien beim Ändern ihrer Reihenfolge, wtf?) Und einige von ihnen bewegten genau ausgewählte Regionen und ließen nicht ausgewählte Teile der Linien an ihren Positionen. Funktioniert aber
drag-stuff
genau wie bei Eclipse!Und noch mehr! Sie können versuchen, eine Region auszuwählen und Alt+ Left/ Right! Dadurch wird der ausgewählte Bereich um ein Zeichen nach links oder rechts transponiert. Tolle!
Um es global zu aktivieren, führen Sie einfach Folgendes aus:
quelle
(drag-stuff-define-keys)
in der Init-Datei benötigt, bevor die Tastenkombinationen funktionieren. Dies wird in diesem Github erklärt: github.com/rejeep/drag-stuff.elIch habe einige interaktive Funktionen zum Verschieben von Linien nach oben / unten geschrieben:
Die Tastenkombinationen sind im IntelliJ IDEA-Stil, Sie können jedoch alles verwenden, was Sie möchten. Ich sollte wahrscheinlich einige Funktionen implementieren, die auch für Regionen funktionieren.
quelle
Hier ist mein Snippet, um die aktuelle Linie oder die von der aktiven Region überspannten Linien zu verschieben. Es berücksichtigt die Cursorposition und den hervorgehobenen Bereich. Und es werden keine Linien unterbrochen, wenn die Region nicht an den Liniengrenzen beginnt / endet. (Es ist von der Sonnenfinsternis inspiriert; ich fand die Sonnenfinsternis bequemer als 'Transponierungslinien'.)
quelle
Dafür gibt es einen Eintrag im Emacs-Wiki:
http://www.emacswiki.org/emacs/MoveLine
Für bewegliche Regionen:
http://www.emacswiki.org/emacs/MoveRegion
quelle
Es ist kein eingebauter. Sie können Transponierungslinien (Cx Ct) verwenden, aber Sie können sie nicht wiederholt verwenden. Schauen Sie sich die Funktionen auf http://www.schuerig.de/michael/blog/index.php/2009/01/16/line-movement-for-emacs/ an. .
Es sollte leicht sein, dies auch an Regionen anzupassen.
quelle
Die
transpose-paragraph
Funktion könnte Ihnen helfen.Vielleicht möchten Sie auch einen Blick auf den Transponierungsabschnitt im Emacs-Handbuch werfen . Im Wesentlichen:
quelle
Ich benutze dafür das Smart-Shift-Paket (in Melpa). Standardmäßig wird erneut gebunden
C-C <arrow>
, um eine Linie oder Region zu verschieben. Es bewegt sich horizontal um einen für den Hauptmodus spezifischen Betrag (z. B. c-basic-offset oder python-indent-offset). Funktioniert auch in Regionen.quelle