Ich benutze Eclipse jetzt schon eine Weile und fand einige Verknüpfungen sehr nützlich, insbesondere die Möglichkeit, eine rechteckige Auswahl von Linien mit Alt + Auf / Ab nach oben und unten zu verschieben. Ich habe mich in Emacs nach dieser Funktionalität umgesehen. Bisher habe ich folgendes Skript gefunden:
(defun move-text-internal (arg)
(cond
((and mark-active transient-mark-mode)
(if (> (point) (mark))
(exchange-point-and-mark))
(let ((column (current-column))
(text (delete-and-extract-region (point) (mark))))
(forward-line arg)
(move-to-column column t)
(set-mark (point))
(insert text)
(exchange-point-and-mark)
(setq deactivate-mark nil)))
(t
(beginning-of-line)
(when (or (> arg 0) (not (bobp)))
(forward-line)
(when (or (< arg 0) (not (eobp)))
(transpose-lines arg))
(forward-line -1)))))
(defun move-text-down (arg)
"Move region (transient-mark-mode active) or current line
arg lines down."
(interactive "*p")
(move-text-internal arg))
(defun move-text-up (arg)
"Move region (transient-mark-mode active) or current line
arg lines up."
(interactive "*p")
(move-text-internal (- arg)))
(global-set-key [\M-up] 'move-text-up)
(global-set-key [\M-down] 'move-text-down)
Dies funktioniert mit Ausnahme der Tatsache, dass dadurch die Auswahl verschoben wird . Ich würde stattdessen lieber alle Zeilen (einschließlich nachfolgender Zeilenumbrüche) verschieben, die in der Auswahl enthalten sind. Gibt es eine Möglichkeit, dies auch zu realisieren?
Antworten:
drag-stuff
Schauen Sie sich das
drag-stuff
Paket an (auch bei Melpa erhältlich).Sie können dann eine Region auswählen und diese Region mit
drag-stuff-up
/drag-stuff-down
nach oben / unten verschieben.Alternatives Verhalten beim Ziehen von Linien
Standardmäßig ziehen die
drag-stuff
Befehle auch die Linie, auf der sie sichpoint
befinden (auch wenn sich der Punkt in der ersten Spalte befindet). Wenn Sie auswählen möchten, sagen wir 2 ganze ZeilenC-a C-SPC C-n C-n
, sieht die Auswahl ungefähr so ausBeachten Sie, dass ich hier nur die Zeilen 2 und 3 verschieben möchte, nicht die Zeile 4 . Aber
drag-stuff
wird diese dritte Zeile bewegen als auch standardmäßig.Das war mein Liebling (und trifft wahrscheinlich auf niemanden zu) und so bat ich den Paketentwickler um eine Lösung . Hier ist ein Hack, den Sie nach Bedarf in Ihre Emacs-Konfiguration einfügen können,
drag-stuff
wenn Sie dieses Standardverhalten nicht möchten. Der Hack verschiebt die aktuelle Linie nicht, wenn sich der Punkt in Spalte 0 (erste Spalte) befindet.Demonstration, wie das Ziehen von Linien vor und nach dem obigen Hack funktioniert
Vor dem Hack
Nach dem Hack
Tastenbelegungen
Um das Eclipse-ähnliche Verhalten zu erreichen, fügen Sie einfach die entsprechenden Tastenkombinationen hinzu:
quelle
C-a C-SPC C-4 C-n
) oder ganze Absätze ( BeispielC-a C-SPC M-}
) auszuwählen . Ich weiß, dass ichM-h
mich noch nicht daran gewöhnt habe. Stellen Sie sich vor, wie nervig es werden könnte, wenn ich jedes Mal meinen ausgewählten Absatz plus die nächste Zeile ziehe! :)Ich habe das vor langer Zeit codiert und benutze es jeden Tag .
quelle
Hier ist eine Möglichkeit, dies mithilfe von Tastaturmakros zu tun:
quelle
transpose-lines
die auf diese Weise funktioniert , aber dies funktioniert nur für einzelne Zeilen, ebenso wie Ihr Vorschlag ...C-p
).