Emacs: 킬 링으로 보내지 않고 줄 삭제

Emacs: 킬 링으로 보내지 않고 줄 삭제

C-k에 보내지 않고 행을 삭제하는 데 사용하고 싶습니다 kill-ring.

.emacs내 파일에 다음 내용이 있습니다

(delete-selection-mode 1)

C-d하지만 이것은 ( delete-char) 에게만 효과가 있는 것 같습니다 .

또한 이 스레드에 설명된 솔루션도 읽었습니다.Emacs: 킬 루프 없이 텍스트를 삭제하는 방법은 무엇입니까?, 그러나 이 정확한 문제를 해결하는 내용은 없습니다.

답변1

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

어쩌면 이것이 최선의 해결책은 아닐 수도 있지만 효과가 있는 것 같습니다. "delete-line"을 일부 전역 키에 바인딩해야 할 수도 있습니다.

(global-set-key [(control shift ?k)] 'delete-line)

답변2

cinsk 답변은 emacs 24에서 작동하지 않습니다.

하지만 이렇게 하면 됩니다:

;; 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)

답변3

내가 따랐던 접근 방식은 대신 kill-line사용하도록 다시 작성하는 것이었습니다 . 기능은 거의 동일 합니다 . 가장 큰 차이점은 전자는 삭제된 콘텐츠를 삭제 링에 저장한다는 점이다. 후자는 그렇지 않습니다. 이 대체품을 사용하여 함수를 다시 작성하면 부작용 없이 정확한 동작이 유지됩니다.delete-regionkill-regionkill-regiondelete-regionkill-line

(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)

관련 정보