Ich möchte nur einen Text löschen , damit ich einen anderen Text zerren kann anstelle davon. Wie kann ich das machen? Cw schneidet den ausgewählten Text, um den Ring zu töten, und ich lande ohne den Text, den ich ziehen wollte.
Ist es auch möglich, Text direkt anstelle von Text zu ziehen, ohne die Tasten zu drücken, um ihn zu beenden ?
Antworten:
Ich tippe
M-x delete-region
ziemlich oft, aber Sie können es an einen Schlüssel binden.Mit dem Auswahlmodus Löschen in neueren Versionen von Emacs müssen Sie keinen Befehl eingeben, sondern müssen nur Folgendes eingeben:
quelle
delete-region
an einen Schlüssel binden , da Backspace dies jetzt tut. Die Rücktaste löscht die ausgewählte Region, anstatt sie zu beenden. Mit anderen Worten, die Rücktaste löscht den ausgewählten Text, ohne ihn zu speichern / in den Tötungsring zu verschieben. Dies liegt daran, dass der Wert vondelete-active-region
ist,t
es sei denn, Sie passen ihn an einen anderen Wert an.Sie können
M-y
after verwendenC-y
, um das vorherige Element aus dem Kill Ring einzufügen, oder das Browse-Kill-Ring- Paket verwenden.Die zweite Frage finden Sie unter DeleteSelectionMode .
quelle
Ich hatte das gleiche Problem. Das Nächste, was ich bisher habe, ist, nur eine kleine Funktion zu erstellen, die im Wesentlichen:
(defun ruthlessly-kill-line () "Deletes a line, but does not put it in the kill-ring. (kinda)" (interactive) (move-beginning-of-line 1) (kill-line 1) (setq kill-ring (cdr kill-ring)))
quelle
Entnommen aus dem EmacsWiki :
quelle
Mx eval-expression (setq kill-ring (cdr kill-ring)) - Entfernt den letzten Gegenstand aus dem Kill-Ring
quelle
Für Ihre zweite Frage können Sie alternativ zu DeleteSelectionMode den CUA-Modus aktivieren, der Ihnen zusätzlich einen schönen Rechteckauswahlmodus bietet, der durch C-Return aktiviert wird. Der CUA-Modus ist seit 22.1 Teil von Emacs.
quelle
Ich habe eine Antwort darauf gefunden.
Hat es zuerst hier gepostet .
;; Ctrl-K with no kill (defun delete-line-no-kill () (interactive) (delete-region (point) (save-excursion (move-end-of-line 1) (point))) (delete-char 1) ) (global-set-key (kbd "C-k") 'delete-line-no-kill)
quelle
Die meisten Kill-Funktionen verwenden
kill-region
die eigentliche Arbeit zum Töten von Text. Ich benutze ein Lisp-Makro, um Löschfunktionen aus Kill-Funktionen zu erstellen.(defmacro jpk/delete-instead-of-kill (&rest body) "Replaces `kill-region' with `delete-region' in BODY." `(cl-letf (((symbol-function 'kill-region) (lambda (beg end &optional yank-handler) (delete-region beg end)))) ,@body)) (defun jpk/delete-word (arg) "Like `kill-word', but does not save to the `kill-ring'." (interactive "*p") (jpk/delete-instead-of-kill (kill-word arg)))
quelle
cl-letf
kann eine lokale Bindung einer Funktion mit dynamischem Bereich erstellen. Das heißt, es gilt nur für Code innerhalb voncl-letf
, aber es gilt für den gesamten Aufrufbaum (z. B.kill-region
erscheint nicht direkt inbody
, sondernkill-word
ruft aufkill-region
und das wird durch ersetztdelete-region
).cl-letf
.cl-letf
funktioniert wielet*
in diesem Sinne.Technisch gesehen sind die anderen Antworten im ersten Teil falsch.
Hier ist meine Umsetzung und Motivation:
(defun delete-word (arg) "Delete characters backward until encountering the beginning of a word. With argument ARG, do this that many times." (interactive "p") (delete-region (point) (progn (backward-word arg) (point))))
Ich habe den Code hier von "
kill-word
" insimple.el
. Ich habekill-region
mitdelete-region
undforward-word
für gewechseltbackward-word
. Auf diese Weise wirkt es sich WIRKLICH nicht auf die auskill-ring
, im Gegensatz zu den anderen Situationen, in denen ich außerhalb von Emacs bemerkte, dass daskill-ring
beeinflusst wurde.quelle
(defun copy-to-register-z (p1 p2) "Copy text selection to register named “z”." (interactive "r") (copy-to-register ?z p1 p2)) (defun replace-register-content-z (p1 p2) "Replace register named “z”'s content." (interactive "r") (delete-region p1 p2) (insert-register ?z)) (global-set-key (kbd "C-c c") 'copy-to-register-z) (global-set-key (kbd "C-c v") 'replace-register-content-z)
quelle
Fügen Sie wie folgt ein Löschäquivalent der Kill-Region- und Kill-Line-Schlüssel Cw und Ck hinzu. Gebunden an die Tasten Cv und Cz.
quelle
Meine Antwort auf die erste Frage: Markieren Sie den Text in Emacs (entweder mit der Maus oder mit der Markierung
C-SPC
) und drücken Sie stattdessen die Taste "<- Rücktaste" auf der TastaturC-w
. Auf diese Weise können Sie weiterhin Text in die Zwischenablage des Systems einfügen, ohne befürchten zu müssen, dass die Zwischenablage durch Text überschrieben wurde, der von getötet wurdeC-w
Hintergrund für diese Antwort: Manchmal, wenn ich Text außerhalb von Emacs erhielt, mit dem ich einen Bereich in Emacs ersetzen möchte, habe ich oft einen Fehler gemacht, indem ich diesen Text zuerst in die System-Zwischenablage (dh unter Windows
Ctrl + C
) kopiert und dannC-w
in Emacs nach " lösche "den Textbereich, den ich ersetzen möchte, mit der Hoffnung, dass ein spätererM-w
meinen Text in der Zwischenablage aus dem Kill-Ring wiederherstellen kann. Leider würde die Zwischenablage einfach durch Text überschrieben, der von getötet wurdeC-w
, und die ursprüngliche Nachricht in der Zwischenablage würde niemals im Kill-Ring angezeigt.Bei der zweiten Frage können Sie den Text immer zuerst und dann direkt in Emacs markieren
C-y
quelle
Hier ist eine Version davon
kill-region
, die keine Werte in den Kill-Ring zwingt.(defun kill-or-delete-region (beg end prefix) "Delete the region, storing it in the kill-ring. If a prefix argument is given, don't change the kill-ring." (interactive "r\nP") (if prefix (delete-region beg end) (kill-region beg end))) (global-set-key (kbd "C-w") 'kill-or-delete-region)
Auf diese Weise können Sie
C-w
wie zuvorC-u C-w
vorgehen , aber jetzt Text löschen, ohne den Kill-Ring zu ändern.quelle
Die
delete-region
Funktion löscht die ausgewählte Region, ohne sie dem Kill-Ring hinzuzufügenIch denke, Sie fragen sich, wie Sie den Text in einer ausgewählten Region durch etwas ersetzen können, das Sie bereits auf den Kill Ring gesetzt haben.
Mit der Einstellung
(delete-selection-mode 1)
können Sie über einen ausgewählten Bereich ziehen / einfügen. Sie können damit auch nur eine ausgewählte Region eingeben und ersetzen.In Version 25.1.1 unter OS XI musste außerdem hinzugefügt werden
(setq select-enable-primary nil)
, um zu verhindern, dass die ausgewählte Region in den Kill Ring kopiert wirdquelle