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)

関連情報