Как убить буфер в emacs без допроса.
Как убить буфер в emacs без ответа?
Ответ 1
Это приведет к удалению текущего видимого буфера без подтверждения, если буфер не был изменен. В этом последнем случае вам нужно ответить y/n.
(global-set-key [(control x) (k)] 'kill-this-buffer)
Ответ 2
Я использую этот
(defun volatile-kill-buffer ()
"Kill current buffer unconditionally."
(interactive)
(let ((buffer-modified-p nil))
(kill-buffer (current-buffer))))
(global-set-key (kbd "C-x k") 'volatile-kill-buffer) ;; Unconditionally kill unmodified buffers.
Он уничтожит буфер, если он не будет изменен.
Ответ 3
Хорошо, я немного покопался в руководстве по Emacs и нашел рабочее решение (по состоянию на Emacs 23.4.1). Это почти идентично решению Noufal:
(defun kill-this-buffer-volatile ()
"Kill current buffer, even if it has been modified."
(interactive)
(set-buffer-modified-p nil)
(kill-this-buffer))
Я немного переименовал функцию, чтобы сделать ее более близкой родственницей к kill-this-buffer
.
По-видимому, в EmacsWiki есть страница по этой теме по адресу http://www.emacswiki.org/emacs/KillBufferUnconditional (изменена в 2007 году), но код является лишь копией Noufal's.
Ответ 4
Я использую следующий фрагмент кода - в отличие от решения Noufal о игнорировании модифицируемого буфера, это сохранит буфер и затем убьет его. Он также удаляет окно, которое имеет значение, когда вы показываете несколько дополнительных окон - по умолчанию оно будет удалять окно вместо перехода на другой буфер. (Чтобы использовать это удобно, вам нужно, конечно, привязать к нему какой-то ключ).
;; Kill the current buffer immediatly, saving it if needed.
(defvar kill-save-buffer-delete-windows t
"*Delete windows when `kill-save-buffer' is used.
If this is non-nil, then `kill-save-buffer' will also delete the corresponding
windows. This is inverted by `kill-save-buffer' when called with a prefix.")
(defun kill-save-buffer (arg)
"Save the current buffer (if needed) and then kill it.
Also, delete its windows according to `kill-save-buffer-delete-windows'.
A prefix argument ARG reverses this behavior."
(interactive "P")
(let ((del kill-save-buffer-delete-windows))
(when arg (setq del (not del)))
(when (and (buffer-file-name) (not (file-directory-p (buffer-file-name))))
(save-buffer))
(let ((buf (current-buffer)))
(when del (delete-windows-on buf))
(kill-buffer buf))))
Ответ 5
Используйте (kill-current-buffer)
вместо (kill-this-buffer)
если вы хотите связать его с каким-то ключом. Смотрите документы для (kill-this-buffer)
...
Эта команда может быть надежно вызвана только из строки меню, в противном случае она может решить молча ничего не делать.
и (kill-current-buffer)
...
Это похоже на "kill-this-buffer", но его не нужно вызывать через строку меню, и оно не обращает внимания на рамку строки меню.
Поэтому я бы init.el
следующее в мой init.el
:
(global-set-key (kbd "C-x k") 'kill-current-buffer)
Это работает по крайней мере в Emacs 26.1.