Если я случайно закрыл рабочий буфер в Emacs, как мне создать новый рабочий буфер?
Если я случайно закрыл рабочий буфер в Emacs, как мне создать новый рабочий буфер?
Ответы:
Просто заново создать буфер, переключаясь на него: C-x b *scratch* RET
. Начиная с Emacs 21.2, если вы создаете буфер с именем *scratch*
, он автоматически переводится в режим взаимодействия с Lisp .
*scratch*
а затем переключусь обратно, он автоматически переключится в режим lisp-взаимодействия.
.emacs
).
Возможно, лучше *scratch*
автоматически заново создавать буфер всякий раз, когда он удаляется, и избегать повторного ввода его имени.
(defun prepare-scratch-for-kill ()
(save-excursion
(set-buffer (get-buffer-create "*scratch*"))
(add-hook 'kill-buffer-query-functions 'kill-scratch-buffer t)))
(defun kill-scratch-buffer ()
(let (kill-buffer-query-functions)
(kill-buffer (current-buffer)))
;; no way, *scratch* shall live
(prepare-scratch-for-kill)
;; Since we "killed" it, don't let caller try too
nil)
(prepare-scratch-for-kill)
Привязки по умолчанию для GNU Emacs:
C-xb*scratch*
или, более многословно
switch-to-buffer
*scratch*
*scratch*
Буфер представляет собой буфер , выбранный при запуске, и имеет основной режим лисповского взаимодействия . Примечание: режим для *scratch*
буфера управляется переменной initial-major-mode
.
В общем, вы можете создать столько «чистых» буферов, сколько захотите, и называть их по своему выбору.
C-x bNAME
переключается в буфер NAME
, создавая его, если он не существует. Новый буфер не связан с файлом на диске, пока вы не используете C-xC-w(или M-xwrite-file
), чтобы выбрать файл, в котором он должен быть сохранен.
M-xtext-mode
изменяет основной режим текущего буфера на текстовый режим.
Чтобы найти все доступные режимы (то есть, не требуя каких-либо новых пакетов), вы можете получить список, набрав:
apropos-command
-mode$
Мне нравится использовать скретч-буферы для одноразовых вещей. Имея только один, это несколько ограничивает, поэтому у меня есть scratch
интерактивная команда для открытия нового чистого буфера (независимо от того, сколько уже существует):
(defun scratch ()
"create a new scratch buffer to work in. (could be *scratch* - *scratchX*)"
(interactive)
(let ((n 0)
bufname)
(while (progn
(setq bufname (concat "*scratch"
(if (= n 0) "" (int-to-string n))
"*"))
(setq n (1+ n))
(get-buffer bufname)))
(switch-to-buffer (get-buffer-create bufname))
(if (= n 1) initial-major-mode))) ; 1, because n was incremented
M-x recover-session
что не восстанавливает их. Кто-нибудь изменил это, чтобы использовать что-то вроде make-temp-file
?
Могу ли я предложить создать пустой буфер? Интересно то, что вы сначала создаете буфер, а потом сохраняете его, если действительно хотите.
(defun my-empty-buffer ()
"Open a new empty buffer."
(interactive)
(let ((buf (generate-new-buffer "untitled")))
(switch-to-buffer buf)
(funcall (and initial-major-mode))
(setq buffer-offer-save t)))
Вам нужно будет установить initial-major-mode на lisp в вашем файле инициализации, и вы должны привязать my-empty-buffer к ярлыку, подобному C-n
.
Предоставлено ergoemacs