¿Cuál es el equivalente emacs de vi dd? Quiero borrar la línea actual. Intenté CTRL+ kpero solo borra de la posición actual.
¿Cuál es el equivalente emacs de vi dd? Quiero borrar la línea actual. Intenté CTRL+ kpero solo borra de la posición actual.
Respuestas:
C-a # Go to beginning of line
C-k # Kill line from current point
También hay
C-S-backspace # Ctrl-Shift-Backspace
que invoca M-x kill-whole-line
.
Si desea establecer un enlace de clave global diferente, lo pondría en ~ / .emacs:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Si desea eliminar varias líneas completas, puede prefijar el comando con un número:
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
A veces también encuentro C-x z
útil:
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
, eso es realmente genial. Y una respuesta agradable y precisa por cierto.
C-k C-k
algo que funciona como un d$ S-j
in vim, pero esto puede eliminar líneas hacia adelante bastante bien.
C-cd
?
En caso de que no desee eliminar la línea (lo que la colocaría en el portapapeles del sistema operativo y el anillo de eliminación), simplemente elimínela:
(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)))))
Otro método para eliminar la línea sin colocarla en el kill ring:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Esto dejará el punto al comienzo de una línea en blanco. Para deshacerse de esto también, es posible que desee agregar algo como (delete-blank-lines)
al final de la función, como en este ejemplo, que quizás sea un poco menos intuitivo:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))
La forma más rápida / sencilla de eliminar (matar) una línea completa, desde cualquier punto de la línea, sin seleccionar nada, es:
C-w ; kill-region
Es versátil para eliminar lo que esté seleccionado, o una línea por defecto si no se selecciona nada.
Dada la pregunta, probablemente también esté interesado en replicar el "tirón" de Vim, yy
(aunque en el lenguaje de Emacs un "tirón" es confusamente el "poner" de Vim p
). Esto es:
M-w ; kill-ring-save
Agradable y congruente, y bastante fácil de recordar. Incluso un poco similar al de Vim i_CTRL-W
.
Una vez que haya puesto algo en el anillo de la muerte con cualquiera de los anteriores, es probable que desee "tirar" (pegar):
M-y ; yank-pop
(Tenga en cuenta que es posible que CS-backspace no funcione en la terminal Emacs).
En lugar de tener una clave separada para eliminar la línea, o tener que invocar prefijo-argumento. Puede usar crux-smart-kill-line
que "matará hasta el final de la línea y matará toda la línea en la próxima llamada". Pero si prefieres en delete
lugar dekill
, puede usar el siguiente código.
Para la operación punto a cadena (matar / eliminar) recomiendo usar 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))))