Как убить буфер в emacs без ответа на подтверждение? - PullRequest
24 голосов
/ 24 июня 2011

Как убить буфер в emacs, не задавая вопросов.

Ответы [ 5 ]

28 голосов
/ 24 июня 2011

Это уничтожит текущий видимый буфер без подтверждения, если буфер не был изменен.В этом последнем случае вы должны ответить y / n.

(global-set-key [(control x) (k)] 'kill-this-buffer)
5 голосов
/ 24 июня 2011

Я использую это

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

Это убьет буфер, если он не будет изменен.

4 голосов
/ 23 мая 2012

ОК, я немного покопался в руководстве по 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/KillBufferUnconditionally (изменена в 2007 году), но код является просто копией Нуфаля.

2 голосов
/ 24 июня 2011

Я использую следующий фрагмент кода - в отличие от решения 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))))
0 голосов
/ 28 января 2019

Используйте (kill-current-buffer) вместо (kill-this-buffer), если вы хотите привязать его к некоторой клавише.См. Документы для (kill-this-buffer)

...

Эта команда может быть надежно вызвана только из строки меню, в противном случае она может решить молча ничего не делать.

и (kill-current-buffer)

...

Это похоже на 'kill-this-buffer', но его не нужно вызывать через менюи не обращает внимания на фрейм панели меню.

Поэтому я бы добавил следующее в мой init.el:

(global-set-key (kbd "C-x k") 'kill-current-buffer)

Это работает, по крайней мере, в emacs 26.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...