Qual é o equivalente do emacs do vi dd? Eu quero excluir a linha atual. Tentei CTRL+ kmas exclui apenas da posição atual.
Qual é o equivalente do emacs do vi dd? Eu quero excluir a linha atual. Tentei CTRL+ kmas exclui apenas da posição atual.
Respostas:
C-a # Go to beginning of line
C-k # Kill line from current point
Há também
C-S-backspace # Ctrl-Shift-Backspace
que invoca M-x kill-whole-line
.
Se você deseja definir uma ligação de chave global diferente, coloque isso em ~ / .emacs:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Se você deseja excluir um número de linhas inteiras, é possível prefixar o comando com um 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
Às vezes também acho 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
, isso é muito legal. E resposta agradável e precisa entre.
C-k C-k
tipo que funciona como um d$ S-j
no vim, mas isso pode excluir linhas para a frente bastante bem.
C-cd
?
Caso você não queira eliminar a linha (o que a colocaria na área de transferência do sistema operacional e mataria o anel), basta excluí-la:
(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)))))
Outro método para excluir a linha sem colocá-la no anel de morte:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Isso deixará o ponto no início de uma linha em branco. Para se livrar disso também, você pode adicionar algo como (delete-blank-lines)
ao final da função, como neste exemplo, que é talvez um pouco menos intuitivo:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))
A maneira mais rápida / simples de excluir (matar) uma linha completa, a partir de qualquer ponto da linha, sem selecionar nada, é:
C-w ; kill-region
É versátil na exclusão do que estiver selecionado ou de uma linha por padrão, se nada estiver selecionado.
Dada a pergunta, você provavelmente também está interessado em replicar o "puxão" de Vim yy
(embora no jargão do Emacs um "puxão" seja confuso, o "puxe" de Vim p
). Isto é:
M-w ; kill-ring-save
Agradável e congruente, e muito fácil de lembrar. Mesmo um pouco semelhante ao Vim i_CTRL-W
.
Depois de colocar algo no ringue de matar com qualquer um dos itens acima, você provavelmente desejará "puxá-lo" (colar):
M-y ; yank-pop
(Observe que o CS-backspace pode não funcionar no Emacs terminal.)
Em vez de ter uma chave separada para excluir a linha ou ter que invocar o prefixo-argumento. Você pode usar o crux-smart-kill-line
que "mata até o final da linha e mata a linha inteira na próxima chamada". Mas se você preferir, em delete
vez de kill
, você pode usar o código abaixo.
Para operação ponto a string (kill / delete), recomendo 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))))