Quel est l'équivalent emacs de vi dd? Je souhaite supprimer la ligne actuelle. Essayé CTRL+ kmais il ne supprime que de la position actuelle.
Quel est l'équivalent emacs de vi dd? Je souhaite supprimer la ligne actuelle. Essayé CTRL+ kmais il ne supprime que de la position actuelle.
Réponses:
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 placer 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 également 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.
C-x z
, c'est vraiment cool. Et réponse agréable et précise btw.
C-k C-k
qui fonctionne un peu comme d$ S-j
dans vim, mais cela peut assez bien supprimer les lignes en avant.
C-cd
?
Au cas où vous ne voudriez 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)))))
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 vide. 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))
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é par la réplication du "yank" de Vim, yy
(bien que dans le langage d'Emacs un "yank" soit déroutant "put" de Vim, p
). C'est:
M-w ; kill-ring-save
Sympa et cohérent, et assez facile à retenir. Même légèrement similaire à Vim i_CTRL-W
.
Une fois que vous avez mis quelque chose dans l'anneau de destruction avec l'un ou l'autre des éléments ci-dessus, vous voudrez probablement le «copier» (coller):
M-y ; yank-pop
(Notez que CS-backspace peut ne pas fonctionner dans le terminal Emacs.)
Plutôt que d'avoir une clé séparée pour supprimer la ligne, ou d'avoir à appeler l'argument préfixe. 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))))