Emacs: Apagando uma linha sem enviá-la para o anel kill

6

Gostaria de usar C-k para excluir uma linha sem enviá-la para o kill-ring .

Eu tenho o seguinte no meu arquivo .emacs

(delete-selection-mode 1)

mas isso parece funcionar apenas para C-d ( delete-char )

Eu também li as soluções descritas neste tópico: Emacs: como deletar texto sem kill ring? , mas não vi nada que resolvesse esse problema.

    
por Amelio Vazquez-Reina 08.12.2011 / 21:06

3 respostas

4
(defun delete-line (&optional arg)
  (interactive "P")
  (flet ((kill-region (begin end)
                      (delete-region begin end)))
    (kill-line arg)))

Talvez essa não seja a melhor solução, mas parece funcionar. Você pode precisar vincular 'delete-line' a alguma chave global, como

(global-set-key [(control shift ?k)] 'delete-line)
    
por 09.12.2011 / 02:29
3

resposta cinsk não funcionou para mim no emacs 24.

Mas isso aconteceu:

;; Ctrl-K with no kill
(defun delete-line-no-kill ()
  (interactive)
  (delete-region
   (point)
   (save-excursion (move-end-of-line 1) (point)))
  (delete-char 1)
)
(global-set-key (kbd "C-k") 'delete-line-no-kill)
    
por 11.06.2014 / 14:13
0

A abordagem que eu sigo é apenas reescrever kill-line para usar delete-region em vez de kill-region . As funções kill-region e delete-region são quase iguais. O grande diferencial é que o primeiro salva o que é deletado no kill ring. Este último não. Reescrevendo a função com essa substituição mantém o comportamento exato de kill-line sem nenhum efeito colateral.

(defun my/kill-line (&optional arg)
  "Delete the rest of the current line; if no nonblanks there, delete thru newline.
With prefix argument ARG, delete that many lines from point.
Negative arguments delete lines backward.
With zero argument, delete the text before point on the current line.

When calling from a program, nil means \"no arg\",
a number counts as a prefix arg.

If 'show-trailing-whitespace' is non-nil, this command will just
delete the rest of the current line, even if there are no nonblanks
there.

If option 'kill-whole-line' is non-nil, then this command deletes the whole line
including its terminating newline, when used at the beginning of a line
with no argument.

If the buffer is read-only, Emacs will beep and refrain from deleting
the line."
  (interactive "P")
  (delete-region
   (point)
   (progn
     (if arg
         (forward-visible-line (prefix-numeric-value arg))
       (if (eobp)
           (signal 'end-of-buffer nil))
       (let ((end
              (save-excursion
                (end-of-visible-line) (point))))
         (if (or (save-excursion
                   ;; If trailing whitespace is visible,
                   ;; don't treat it as nothing.
                   (unless show-trailing-whitespace
                     (skip-chars-forward " \t" end))
                   (= (point) end))
                 (and kill-whole-line (bolp)))
             (forward-visible-line 1)
           (goto-char end))))
     (point))))

(global-set-key (kbd "C-k") 'my/kill-line)
    
por 08.06.2018 / 17:02

Tags