Was ist das Emacs-Äquivalent von vi dd? Ich möchte die aktuelle Zeile löschen. Versucht CTRL+, kaber es wird nur von der aktuellen Position gelöscht .
Was ist das Emacs-Äquivalent von vi dd? Ich möchte die aktuelle Zeile löschen. Versucht CTRL+, kaber es wird nur von der aktuellen Position gelöscht .
Antworten:
C-a # Go to beginning of line
C-k # Kill line from current point
Es gibt auch
C-S-backspace # Ctrl-Shift-Backspace
was aufruft M-x kill-whole-line
.
Wenn Sie eine andere globale Schlüsselbindung festlegen möchten, fügen Sie diese in ~ / .emacs ein:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Wenn Sie mehrere ganze Zeilen löschen möchten, können Sie dem Befehl eine Nummer voranstellen:
C-u 5 C-S-backspace # deletes 5 whole lines
M-5 C-S-backspace # deletes 5 whole lines
C-u C-S-backspace # delete 4 whole lines. C-u without a number defaults to 4
C-u -5 C-S-backspace # deletes previous 5 whole lines
M--5 C-S-backspace # deletes previous 5 whole lines
Manchmal finde ich auch C-x z
hilfreich:
C-S-backspace # delete 1 whole line
C-x z # repeat last command
z # repeat last command again.
# Press z as many times as you wish.
# Any other key acts normally, and ends the repeat command.
C-x z
, das ist echt cool. Und übrigens eine nette und präzise Antwort.
C-k C-k
was irgendwie wie ein d$ S-j
in vim funktioniert , aber dies kann Zeilen vorwärts ziemlich gut löschen.
C-cd
?
Für den Fall, dass Sie die Zeile nicht beenden möchten (wodurch sie in die Zwischenablage des Betriebssystems eingefügt und der Ring beendet wird), sondern einfach löschen:
(defun delete-current-line ()
"Delete (not kill) the current line."
(interactive)
(save-excursion
(delete-region
(progn (forward-visible-line 0) (point))
(progn (forward-visible-line 1) (point)))))
Eine andere Methode, um die Zeile zu löschen, ohne sie in den Kill Ring zu legen:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Dadurch bleibt der Punkt am Anfang einer leeren Zeile. Um dies ebenfalls zu beseitigen, möchten Sie möglicherweise etwas wie (delete-blank-lines)
das Ende der Funktion hinzufügen , wie in diesem Beispiel, das möglicherweise etwas weniger intuitiv ist:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))
Der schnellste / einfachste Weg, eine vollständige Linie von einem beliebigen Punkt der Linie aus zu löschen (zu töten), ohne etwas auszuwählen, ist:
C-w ; kill-region
Es ist vielseitig einsetzbar, um ausgewählte Elemente oder standardmäßig eine Zeile zu löschen, wenn nichts ausgewählt ist.
Angesichts der Frage sind Sie wahrscheinlich auch daran interessiert, Vims "Ruck" zu replizieren yy
(obwohl in Emacs Sprache ein "Ruck" verwirrenderweise Vims "Put" ist p
). Das ist:
M-w ; kill-ring-save
Schön und kongruent und ziemlich leicht zu merken. Sogar etwas ähnlich wie bei Vim i_CTRL-W
.
Sobald Sie etwas mit einem der oben genannten Punkte in den Kill-Ring gelegt haben, möchten Sie es wahrscheinlich "ziehen" (einfügen):
M-y ; yank-pop
(Beachten Sie, dass CS-Backspace in Terminal-Emacs möglicherweise nicht funktioniert.)
Anstatt einen separaten Schlüssel zum Löschen der Zeile zu haben oder ein Präfixargument aufzurufen. Sie können die Crux-Smart-Kill-Linie verwenden,
die "bis zum Ende der Linie tötet und beim nächsten Anruf die ganze Linie tötet". Aber wenn Sie es vorziehen , delete
statt kill
, können Sie den Code unten verwenden.
Für Point-to-String-Operationen (Kill / Delete) empfehle ich die Verwendung von Zop-to-Char
(defun aza-delete-line ()
"Delete from current position to end of line without pushing to `kill-ring'."
(interactive)
(delete-region (point) (line-end-position)))
(defun aza-delete-whole-line ()
"Delete whole line without pushing to kill-ring."
(interactive)
(delete-region (line-beginning-position) (line-end-position)))
(defun crux-smart-delete-line ()
"Kill to the end of the line and kill whole line on the next call."
(interactive)
(let ((orig-point (point)))
(move-end-of-line 1)
(if (= orig-point (point))
(aza-delete-whole-line)
(goto-char orig-point)
(aza-delete-line))))