Ich C-a
C-k
C-k
töte den gesamten Linienpunkt auf.
Wenn ich die Zeile kopieren möchte, anstatt sie zu töten, kann ich C-/
C-/
direkt nach dem Eingeben der obigen Sequenz drücken.
Alternativ kann ich tun C-a
C-SPC
C-n
M-w
.
Gibt es eine schnellere Möglichkeit, den gesamten Linienpunkt zu töten oder zu kopieren, auf der sich die Option befindet?
copy-paste
editing
itsjeyd
quelle
quelle
kill-whole-line
. :)evil-mode
. Lerne Vim Befehle, du wirst es nicht bereuen!Antworten:
Sie können verwenden
kill-whole-line
, um den gesamten Linienpunkt abzutöten, der eingeschaltet ist. Die Position des Punktes spielt keine Rolle. Dieser Befehl ist C-S-DELstandardmäßig gebunden .Sie können auch anweisen
kill-line
(gebunden an C-k), die gesamte Zeile abzubrechen, indem Sie die Variablekill-whole-line
auf einen Nicht-nil
Wert setzen:Beachten Sie, dass sich der Punkt am Anfang der Zeile befinden muss, damit dies funktioniert.
Dann gibt es diese zwei Edelsteine (via emacs-fu ):
Mit diesen können Sie den Linienpunkt mit einem einzigen Tastendruck beenden oder kopieren :
Beachten Sie, dass, wenn es eine aktive Region gibt, diese
kill-region
wiekill-ring-save
gewohnt weiterarbeitet: Töten oder kopieren Sie sie.Portierung
slick-cut
undslick-copy
neues BeratungssystemEmacs 24.4 führt ein neues Hinweissystem ein . Solange es
defadvice
noch funktioniert , besteht die Möglichkeit, dass es in zukünftigen Versionen von Emacs zugunsten des neuen Systems veraltet ist. Um sich darauf vorzubereiten, sollten Sie aktualisierte Versionen vonslick-cut
und verwendenslick-copy
:quelle
kill-region
undkill-ring-save
noch viel Arbeit , auch wenn die Region nicht „aktiv“ . Dies setzt dieses Verhalten außer Kraft. Ich benutze dieses Verhalten von Zeit zu Zeit, aber wenn Sie es nicht gewohnt sind, sie auf diese Weise zu verwenden, werden Sie den Unterschied wahrscheinlich nicht bemerken.kill-region
etc verwendbar / nützlich , wennmark-active
istnil
.C-SPC
zweimal, um die Markierung zu aktivieren und dann zu deaktivieren. Bewegen Sie den Cursor an eine andere Stelle in der Datei und führenkill-region
Sie ihn aus. Dadurch wird der Bereich zwischen Punkt und Marke gelöscht, obwohl die Marke nicht aktiv ist. Einige Beispiele für Befehle, die die Markierung setzen (aber nicht aktivieren), sindyank
undisearch
. Nachdem ich diese Sortierbefehle ausgeführt habe, weiß ich, wo sich die Marke befindet, auch wenn sie nicht aktiv ist, und bei vielen Befehlen (einschließlichkill-region
) kann ich die Marke verwenden, ohne sie explizit zu aktivieren.Die Lösung, die ich selbst gefunden habe, besteht darin, Präfixargumente zu verwenden.
Das Töten einer halben Linie ist für mich eine nützliche Funktion, aber ich möchte auch eine einfachere Möglichkeit, ganze Linien zu töten. Also habe ich es so gemacht, dass
kill-line
einfach alles in Sichtweite ermordet wird, wenn ein Präfix-Argument angegeben wird.C-k
Tötet mit diesem kleinen Makro immer noch ab Punkt,C-3 C-k
schluckt aber drei ganze Zeilen. Als Bonus bekommen wir daskill-whole-line
Verhalten dadurchC-1 C-k
.quelle
kill-ring-save
akzeptiert keine Präfix-Argumente ...kill-visual-line
ist gebunden anC-k
. Ich werde es reparieren. Danke noch einmal.Es gibt ein Paket mit dem Namen,
whole-line-or-region
das verschiedene integrierte Befehle anweist, damit sie auf die aktuelle Zeile angewendet werden, wenn keine Region aktiv ist. DadurchM-w
wird beispielsweise die aktuelle Zeile kopiert und beendetC-w
. Ich benutze das Paket seit Jahren und finde es unverzichtbar.Darüber hinaus bewirkt dieses Paket, dass ein numerisches Präfix die Anzahl der zu verarbeitenden Zeilen angibt und
M-2 M-w
zwei Zeilen kopiert. Die anderen Antworten bieten diese praktische Funktionalität nicht.Ich habe die Wartung des Pakets auf meinem Github-Konto übernommen, als der Autor die Wartung eingestellt hat und nicht mehr reagiert hat.
whole-line-or-region
bietet auch die Möglichkeit, dieses Verhalten zu weiteren Befehlen hinzuzufügen, falls Sie dies benötigen.quelle
Dies ist keine Antwort für orthodoxe Emacs. Wenn Sie jedoch bereit sind, die
evil
modale Bearbeitung zu lästern , haben Sie folgende Möglichkeiten:dd
für kill linecc
für KopierzeileBeiden kann die Anzahl der zu tötenden / zu kopierenden Zeilen vorangestellt werden (z. B.
4cc
werden die nächsten 4 Zeilen kopiert).quelle
Darf ich neben @itsjeyd answer diese beiden Funktionen vorschlagen?
Dann die Schlüsseldefinitionen (Sie werden sie wahrscheinlich anpassen wollen):
(global-set-key (kbd "<f2>") 'xah-cut-line-or-region) ; cut
(global-set-key (kbd "<f3>") 'xah-copy-line-or-region) ; copy
(global-set-key (kbd "<f4>") 'yank) ; paste
Mit freundlicher Genehmigung von ErgoEmacs
quelle
Als Erweiterung zu @ itsjeyds Antwort oben habe ich Folgendes. (Die Logik könnte wahrscheinlich leicht aufgeräumt werden, und ich werde sie, wenn ich auf das neue Ratgebersystem portiere, wahrscheinlich auch auf
sexp
/ erweitern,paragraph
wenn sie erneut wiederholt wird.)Ein initiales
C-w
/M-w
fasst nur das Wort an der Stelle zusammen, während ein zweiter Aufruf die gesamte Zeile erfasst.quelle
Da Sie es mit minimalen Tastenanschlägen tun möchten, können Sie das exzellente Key-Chord- Paket von David Andersson verwenden . Ein "Tastenakkord" besteht aus zwei gleichzeitig gedrückten Tasten oder einer einzigen Taste, die zweimal gedrückt wird.
Sie können beliebige Tastenakkorde an diese Funktionen binden.
quelle
Weniger ad-hoc ist es zu definieren
mark-whole-line
, für welche Emacs eigentlich einen Standardbefehl haben soll.Dann
C-2 C-w
mache ich den Job.Es erleichtert auch das Kommentieren der aktuellen Zeile.
quelle
Dies ist eine Modifikation der Antwort von itsjeyd - derzeit die Antwort mit der höchsten Stimmenzahl und eine, die ich seit Jahren verwende. Es gibt jedoch einige Probleme: Die empfohlene Version von schlägt
kill-ring-save
manchmal fehl, weil die Marke nicht gesetzt ist (normalerweise in einem neuen Puffer), und selbst wenn sie funktioniert hat, hat der Cursor nach Verwendung der Funktion zum Kopieren einer einzelnen Zeile einen seltsamen Tanz ausgeführt . Nach einigem Graben wurde mir klar, dass dies passiert, weilkill-ring-save
Anrufe,indicate-copied-region
nachdem sie ihre Arbeit erledigt haben, aber da Punkt und Markierung nicht mit dem kopierten Bereich übereinstimmen,indicate-copied-region
den falschen Bereich markiert haben.Genug gesagt. Hier ist eine Lösung, die dies behebt:
An itsjeyds Ratschlägen ist nichts auszusetzen
kill-region
. Hier ist eine Variante davon, die stilistisch mehr mit dem oben Gesagten übereinstimmt:Beachten Sie, dass
transient-mark-mode
diese Hinweise nichts bewirken , wenn sie nicht aktiviert sind.quelle
whole-line-or-region
stattdessen das Paket verwenden. Siehe die Antwort von @sanityinc.Ich benutze ein Paket namens composable.el . Das Schöne an dem Paket ist, dass es Mw und Cw (copy and kill -Befehle) modifiziert, um Vim-ähnlicher zu sein, mit dem Unterschied, dass es stattdessen traditionelle Emacs-Befehle akzeptiert. So
C-w l
tötet eine ganze Reihe. Sie können aber auch Dinge tunC-w M->
, um das Dateiende zu beenden. Beide Befehle verhalten sich beim Markieren einer Region normal.quelle