Emacs: comment supprimer du texte sans kill ring?

Je voudrais juste supprimer du texte pour pouvoir en tirer un autre texte. Comment puis je faire ça? Cw coupe le texte sélectionné pour tuer l’anneau et je me retrouve sans le texte que je voulais tirer.

En outre, est-il possible de tirer du texte directement au lieu d’un texte sans même appuyer sur des boutons pour le tuer?

Je tape Mx delete-region assez souvent, mais vous pouvez le lier à une clé.

Avec le mode de sélection de suppression dans les nouvelles versions d’Emacs, vous n’avez pas besoin de taper une commande pour commencer à taper:

Par défaut, l’insertion de texte se produit normalement même si la marque est active. Par exemple, si vous tapez a, vous insérez le caractère «a», puis désactivez la marque. Le mode Supprimer la sélection, un mode mineur, modifie ce comportement: si vous activez ce mode, l’insertion de texte alors que la marque est active entraîne la suppression du texte dans la région. De même, les commandes qui suppriment normalement un seul caractère, tel que Cd ou DEL , suppriment à la place toute la région. Pour activer ou désactiver le mode de sélection de suppression, tapez Mx delete-selection-mode.

Vous pouvez utiliser My after Cy pour insérer un élément précédent du kill ring ou utiliser le package browse-kill-ring .

En ce qui concerne la deuxième question, voir DeleteSelectionMode .

J’ai eu le même problème. La chose la plus proche que j’ai à ce jour est de faire une petite fonction qui est essentiellement:

 (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))) 

Tiré de EmacsWiki :

L’équivalent de 'kill-line' ( 'C-k' ) mais sans effets secondaires de kill-ring:

 (delete-region (point) (line-end-position)) 

Mx eval-expression (setq kill-ring (cdr kill-ring)) – supprime le dernier élément du kill-ring

Pour votre deuxième question, alternativement à DeleteSelectionMode vous pouvez activer le mode CUA qui vous donne en plus un bon mode de sélection de rectangle activé par C-Return. Le mode CUA fait partie d’emacs depuis 22.1.

Trouvé une réponse à cela.

Publié le premier ici .

 ;; 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 "Ck") 'delete-line-no-kill) 

Techniquement, les autres réponses sont fausses sur la première partie.

Voici ma mise en œuvre et ma 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)))) 

J’ai adapté le code ici de ” kill-word ” en simple.el . J’ai commuté kill-region avec delete-region et forward-word pour backward-word . De cette façon, TRUELY n’affecte pas le kill-ring , contrairement aux autres situations où, en dehors d’Emacs, j’ai remarqué que le kill-ring était influencé.

 (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 "Cc c") 'copy-to-register-z) (global-set-key (kbd "Cc v") 'replace-register-content-z) 

Ajoutez un équivalent de suppression des clés kill-region et kill-line Cw et Ck comme suit. Lié aux touches Cv et Cz.

 ;;  Un raccourci clavier pour supprimer-région donne un bon "équivalent Windows CUT Ctrl-x".
 ;;  Ce que la reliure à utiliser est difficile à choisir.
 ;;  utiliser Cv "Windows PASTE Ctrl-v" est une option assez subversive.
 ;;  Cv = défiler dans les emacs pour lesquels je n’ai pas besoin de
 (global-set-key (kbd "Cv") 'delete-region)

 ;;  Pour avoir aussi une alternative "Windows CUT" à Ck (kill-line) cela peut être fait:
 (defun delete-line () "supprimer la ligne, sortez-le de la chaîne. associez cette fonction à Cz"
  (interactif)
  (setq last-command 'delete-line)
  (ligne de mise à mort)
  (setq kill-ring (cdr kill-ring))
  (setq kill-ring-yank-pointer kill-ring)
  (setq last-command 'delete-line)
 )
 (global-set-key (kbd "Cz") 'delete-line)
 ;;  sans réglage de la dernière commande 2+ C-zs gâchent le kill-ring

Ma réponse à la première question: marquez le texte dans emacs (à l’aide de la souris ou de la marque C-SPC ) et appuyez sur le bouton “<- Backspace" du clavier au lieu de Cw . De cette façon, vous pouvez toujours coller du texte dans le presse-papier du système, sans craindre que le presse-papiers soit remplacé par du texte tué par Cw

Contexte de cette réponse: parfois, lorsque je recevais du texte en dehors d’Emacs pour remplacer une région dans emacs, je faisais souvent une erreur en copiant d’abord ce texte dans le presse-papiers du système (sous Windows Ctrl + C ). dans emacs pour “supprimer” la région du texte que je veux remplacer, avec l’espoir qu’un Mw plus tard puisse récupérer mon texte dans le presse-papiers à partir de kill-ring. Malheureusement, le presse-papiers serait simplement remplacé par du texte tué par Cw , et le message original dans le presse-papiers ne serait jamais affiché dans un kill-ring.

Pour la 2ème question, oui, vous pouvez toujours marquer le texte dans emacs d’abord, puis directement Cy

La plupart des fonctions de suppression utilisent kill-region pour effectuer le travail de destruction de texte. J’utilise une macro lisp pour créer des fonctions de suppression à partir des fonctions de suppression.

 (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))) 

Voici une version de kill-region qui ne force pas les valeurs dans le kill-ring.

 (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 "Cw") 'kill-or-delete-region) 

Cela vous permet de faire Cw comme avant, mais Cu Cw supprime maintenant le texte sans changer le kill-ring.

Comment supprimer du texte sans kill ring?

la fonction delete-region supprime la région sélectionnée sans l’append au kill ring

En outre, est-il possible de tirer du texte directement au lieu d’un texte sans même appuyer sur des boutons pour le tuer?

Je pense que vous demandez comment remplacer le texte dans une région sélectionnée par quelque chose que vous avez déjà mis sur le ring.

Le réglage (delete-selection-mode 1) vous permettra de coller / coller sur une région sélectionnée. Il vous permet également de taper et de remplacer une région sélectionnée.

Sur la version 25.1.1 sous OS XI, il fallait également append (setq select-enable-primary nil) pour l’empêcher de copier la région sélectionnée sur le kill ring