Quel est l'équivalent emacs de vi dd? Je veux supprimer la ligne actuelle. A tenté CTRL + k mais il supprime seulement de la position actuelle.
C-a # Go to beginning of line
C-k # Kill line from current point
Il y a aussi
C-S-backspace # Ctrl-Shift-Backspace
qui invoque M-x kill-whole-line
.
Si vous souhaitez définir une liaison de clé globale différente, vous devez la mettre dans ~/.emacs:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Si vous souhaitez supprimer un certain nombre de lignes entières, vous pouvez préfixer la commande avec un nombre:
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
Parfois, je trouve aussi C-x z
utile:
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.
Dans le cas où vous ne voulez pas tuer la ligne (ce qui la mettrait dans le presse-papiers du système d'exploitation et le kill ring), mais supprimez-la simplement:
(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)))))
Plutôt que d'avoir une clé distincte pour supprimer la ligne, ou d'avoir à invoquer un préfixe-argument. Vous pouvez utiliser crux-smart-kill-line qui "tuera jusqu'à la fin de la ligne et tuera toute la ligne au prochain appel". Mais si vous préférez delete
au lieu de kill
, vous pouvez utiliser le code ci-dessous.
Pour une opération point à chaîne (kill/delete), je recommande d'utiliser 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))))
Le moyen le plus rapide/le plus simple de supprimer (tuer) une ligne complète, à partir de n'importe quel point de la ligne, sans rien sélectionner, est:
C-w ; kill-region
Il est polyvalent pour supprimer tout ce qui est sélectionné, ou une ligne par défaut si rien n'est sélectionné.
Compte tenu de la question, vous êtes probablement également intéressé à répliquer le "yank" de Vim, yy
(bien que dans le langage Emacs un "yank" soit confusément le "put" de Vim, p
). C'est:
M-w ; kill-ring-save
Agréable et congruent, et assez facile à retenir. Même légèrement similaire à Vim's i_CTRL-W
.
Une fois que vous avez mis quelque chose dans le kill ring avec l'un des éléments ci-dessus, vous voudrez probablement le "tirer" (coller):
M-y ; yank-pop
(Notez que C-S-backspace peut ne pas fonctionner dans le terminal Emacs.)
Une autre méthode pour supprimer la ligne sans la placer dans le kill ring:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Cela laissera le point au début d'une ligne vierge. Pour vous en débarrasser également, vous pouvez ajouter quelque chose comme (delete-blank-lines)
à la fin de la fonction, comme dans cet exemple, qui est peut-être un peu moins intuitif:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))