2017-09-02 1 views
1

je ne souhaite C-w et M-w pour modifier le kill-ring, avec le presse-papier système [C-c (copie), C-x (coupe)].Emacs - Comment changer kill pour supprimer?

J'utilise M-d et M-DEL souvent, mais je ne veux pas Yank puis défiler M-y chaque fois. Je regardais the emacs manual mais il ne répond pas à ma question.

Exemple: Je souhaite lier M-d "kill-word" à "delete-word", mais "delete-word" n'existe pas. Comment est-ce que je le fais? Toute aide serait appréciée.

+1

Voir Emacs Wiki, page [BackwardDeleteWord] (https://www.emacswiki.org/emacs/BackwardDeleteWord). – Drew

Répondre

1

De EmacsWiki https://www.emacswiki.org/emacs/BackwardDeleteWord

(defun delete-word (arg) 
    "Delete characters forward until encountering the end of a word. 
With argument, do this that many times." 
    (interactive "p") 
    (if (use-region-p) 
     (delete-region (region-beginning) (region-end)) 
    (delete-region (point) (progn (forward-word arg) (point))))) 

(defun backward-delete-word (arg) 
    "Delete characters backward until encountering the end of a word. 
With argument, do this that many times." 
    (interactive "p") 
    (delete-word (- arg))) 

(global-set-key (read-kbd-macro "<M-DEL>") 'backward-delete-word) 
1

Je pense que vous voulez utiliser delete-region au lieu de kill-region de sorte que le texte ne soit pas enregistré dans le kill-ring, par exemple. quelque chose le long de la ligne de

(defun my-delete-word (start) 
    (interactive "d") 
    (backward-word) 
    (delete-region (point) start)) 
0

J'ai créé une macro pour modifier une commande kill en une commande delete.

(defmacro delete-instead-of-kill (&rest body) 
    "Replaces `kill-region' with `delete-region' in BODY." 
    `(cl-letf (((symbol-function 'kill-region) 
       (lambda (beg end &optional region) 
       ;; FIXME: account for region arg 
       (delete-region beg end)))) 
    ,@body)) 

(defun delete-word (&optional arg) 
    "Like `kill-word', but deletes instead of killing." 
    (interactive "p") 
    (delete-instead-of-kill (kill-word arg))) 

J'utilise une macro similaire pour la copie.

(defmacro copy-instead-of-kill (&rest body) 
    "Replaces `kill-region' with `kill-ring-save' in BODY." 
    `(cl-letf (((symbol-function 'kill-region) 
       (lambda (beg end &optional region) 
       (kill-ring-save beg end region) 
       (setq this-command 'kill-region)))) 
    ,@body))