Если я случайно закрыл буфер в Emacs, как создать новый scratch buffer?Повторно открыть * scratch * buffer в Emacs?
ответ
GNU Emacs привязки по умолчанию:
С-хб
*scratch*
RET
или, более пространно
М-х
switch-to-buffer *scratch*
RET
*scratch*
буфер представляет собой буфер, выбранный при запуске, и имеет основной режим Lisp Interaction. Примечание: режим для буфера *scratch*
управляется переменной initial-major-mode
.
В общем, вы можете создать столько «царапин» буферов, сколько хотите, и назовите их, как вы сами выбираете.
С-хб
NAME
RET
переключается в буфер NAME
, создавая его, если он не существует. Новый буфер не связан с файлом на диске, пока вы не используете C-хC-ш (или M-хwrite-file
RET), чтобы выбрать файл, в котором он должен быть сохранен.
М-х
text-mode
RET
изменяет основной режим текущего буфера в текстовом режиме.Для того, чтобы найти все режимы, доступные (то есть, не требуя каких-либо новых пакетов), вы можете получить список, набрав:
Mx
apropos-command -mode$
RET
C-x b *scratch*
RET y RET с включенным режимом iswitchb.
Just C-x b *scratch*
RET в противном случае.
С-хб а затем введите
*scratch*
↩︎
, чтобы создать новый буфер, который находится в режиме LISP взаимодействия также.
Я нашел это много лет назад, когда Я сначала начал использовать emacs; Я понятия не имею, где сейчас, но у него всегда был дом в моих личных файлах .el. Он появляется в поиске Google.
;;; Prevent killing the *scratch* buffer -- source forgotten
;;;----------------------------------------------------------------------
;;; Make the *scratch* buffer behave like "The thing your aunt gave you,
;;; which you don't know what is."
(save-excursion
(set-buffer (get-buffer-create "*scratch*"))
(make-local-variable 'kill-buffer-query-functions)
(add-hook 'kill-buffer-query-functions 'kill-scratch-buffer))
(defun kill-scratch-buffer()
;; The next line is just in case someone calls this manually
(set-buffer (get-buffer-create "*scratch*"))
;; Kill the current (*scratch*) buffer
(remove-hook 'kill-buffer-query-functions 'kill-scratch-buffer)
(kill-buffer (current-buffer))
;; Make a brand new *scratch* buffer
(set-buffer (get-buffer-create "*scratch*"))
(lisp-interaction-mode)
(make-local-variable 'kill-buffer-query-functions)
(add-hook 'kill-buffer-query-functions 'kill-scratch-buffer)
;; Since we killed it, don't let caller do that.
nil)
;;;----------------------------------------------------------------------
я добавить следующее в моем .emacs:
;; bury *scratch* buffer instead of kill it
(defadvice kill-buffer (around kill-buffer-around-advice activate)
(let ((buffer-to-kill (ad-get-arg 0)))
(if (equal buffer-to-kill "*scratch*")
(bury-buffer)
ad-do-it)))
Если я не хочу видеть поцарапать буфер жму Cx Ck, но не убивает его, просто поместите в конец списка буфера, так что тогда мне это нужно в следующий раз, когда мне не нужно создавать новые.
Это то, что я использую - у меня это связано с удобным нажатием клавиши. Он посылает вас в *scratch*
буфер, независимо от того, или нет, уже существует, то он, и устанавливает его, чтобы быть в lisp-interaction-mode
(defun eme-goto-scratch()
"this sends you to the scratch buffer"
(interactive)
(let ((eme-scratch-buffer (get-buffer-create "*scratch*")))
(switch-to-buffer eme-scratch-buffer)
(lisp-interaction-mode)))
Я имел обыкновение использовать решение DWJ, и я был очень рад этому, до дня I понял, что он потерпел неудачу, когда вы на самом деле переименовали буфер нуля (например, сохраните его).
Тогда я принял это, который хорошо работает для меня:
(run-with-idle-timer 1 t
'(lambda() (get-buffer-create "*scratch*")))
Как и говорит строка документации, эта функция будет:
Переключение в буфер нуля. Если буфер не существует создать и записать первоначальное сообщение в него.»
Это принесет новое царапание буфера вверх, который выглядит как начальный буфер нуля.
(defun switch-buffer-scratch()
"Switch to the scratch buffer. If the buffer doesn't exist,
create it and write the initial message into it."
(interactive)
(let* ((scratch-buffer-name "*scratch*")
(scratch-buffer (get-buffer scratch-buffer-name)))
(unless scratch-buffer
(setq scratch-buffer (get-buffer-create scratch-buffer-name))
(with-current-buffer scratch-buffer
(lisp-interaction-mode)
(insert initial-scratch-message)))
(switch-to-buffer scratch-buffer)))
(global-set-key "\C-cbs" 'switch-buffer-scratch)
Есть целые . целая куча советов по this EmacsWiki page
Вот первый:
очень простая функция, чтобы воссоздать царапину Буфер:
(defun create-scratch-buffer nil
"create a scratch buffer"
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(lisp-interaction-mode))
Я объединил решения размещены так далеко в одну функцию:
(defun --scratch-buffer(&optional reset)
"Get the *scratch* buffer object.
Make new scratch buffer unless it exists.
If RESET is non-nil arrange it that it can't be killed."
(let ((R (get-buffer "*scratch*")))
(unless R
(message "Creating new *scratch* buffer")
(setq R (get-buffer-create "*scratch*") reset t))
(when reset
(save-excursion
(set-buffer R)
(lisp-interaction-mode)
(make-local-variable 'kill-buffer-query-functions)
(add-hook 'kill-buffer-query-functions '(lambda()(bury-buffer) nil)
)))
R))
Чтобы применить эту функцию в своих .emacs использование:
(--scratch-buffer t)
(run-with-idle-timer 3 t '--scratch-buffer)
Это сделает буфер нуля незаменимым в первом место, и если сохранено, оно будет воссоздано.Кроме того, мы можем использовать функцию быстрого scratch
, чтобы открыть буфер быстро:
(defun scratch()
"Switch to *scratch*. With prefix-arg delete its contents."
(interactive)
(switch-to-buffer (--scratch-buffer))
(if current-prefix-arg
(delete-region (point-min) (point-max))
(goto-char (point-max))))
В прошлом это оказалось полезным знать исходный загрузочный-каталог, из которого была запущена Emacs. Это либо значение desktop-dirname
или default-directory
локальная переменная скретч-буфер:
(defvar --scratch-directory
(save-excursion (set-buffer "*scratch*") default-directory)
"The `default-directory' local variable of the *scratch* buffer.")
(defconst --no-desktop (member "--no-desktop" command-line-args)
"True when no desktop file is loaded (--no-desktop command-line switch set).")
(defun --startup-directory()
"Return directory from which Emacs was started: `desktop-dirname' or the `--scratch-directory'.
Note also `default-minibuffer-frame'."
(if (and (not --no-desktop) desktop-dirname)
desktop-dirname
--scratch-directory))
Так --startup-каталог будет всегда возвращать базовый каталог вашего Makefile, TODO-файла и т.д. В случае нет рабочего стола (--no-desktop commandline-switch или no desktop-file) переменная --scratch-directory
будет содержать директорию Emacs, которая была когда-то запущена.
У меня есть 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
заимствован из: http://everything2.com/index.pl?node_id=1038451
Я предпочитаю, чтобы мой царапанию буфер являются фактическим файл, который автоматически сохраняется, и его повторное открытие так же просто, как открытие файла. При запуске я убиваю дефолт и нахожу свое собственное.
(add-hook 'emacs-startup-hook
(lambda()
(kill-buffer "*scratch*")
(find-file "/Users/HOME/Desktop/.scratch")))
У меня есть пользовательская функция убить-буфер, который делает по существу то же самым, - вновь открывает мой личного царапанию сохраненного файл и убивает по умолчанию царапанию в случае я убил последний видимый буфер.
я доработал несколько desktop.el
функций для загрузки после(kill-buffer "*scratch*")
и (find-file "/Users/HOME/Desktop/.scratch")
так, что файл последнего виден при выходе из Emacs не делает похоронят на пустом месте по умолчанию или закапывает мой пользовательский нуль при запуске Emacs.
Я люблю использовать auto-save-buffers-enhanced
, которая автоматически сохраняет любое расширение файла, не исключены:
https://github.com/kentaro/auto-save-buffers-enhanced/blob/master/auto-save-buffers-enhanced.el
(require 'auto-save-buffers-enhanced)
(auto-save-buffers-enhanced t)
(setq auto-save-buffers-enhanced-save-scratch-buffer-to-file-p 1)
(setq auto-save-buffers-enhanced-exclude-regexps '("\\.txt" "\\.el" "\\.tex"))
я использую небольшое изменение функции по @paprika, когда я хочу, чтобы создать нет-файл посещения буфера:
(defun lawlist-new-buffer()
"Create a new buffer -- \*lawlist\*"
(interactive)
(let* (
(n 0)
bufname)
(catch 'done
(while t
(setq bufname (concat "*lawlist"
(if (= n 0) "" (int-to-string n))
"*"))
(setq n (1+ n))
(if (not (get-buffer bufname))
(throw 'done nil))))
(switch-to-buffer (get-buffer-create bufname))
(text-mode)))
находят ответ в EmacsWiki: http://www.emacswiki.org/emacs/RecreateScratchBuffer
(defun create-scratch-buffer nil
"create a scratch buffer"
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(lisp-interaction-mode))
(global-set-key (kbd "C-x M-z")
'(lambda()
(interactive)
(switch-to-buffer "*scratch*")))
Это не только быстро переключиться на *scratch*
буфер (поскольку я делаю это часто), но воссоздать *scratch*
буфер и включить lisp-interaction-mode
автоматически, если вы убьете его случайно. Измените привязку по своему усмотрению.
Просто отметить пакет emacs unkillable-scratch
в MELPA сделают это. Существует также scratch-persist
, который автоматически сохранит и восстановит буфер между сеансами.
- 1. * scratch * buffer using SLIME
- 2. emacs scratch неинтерактивный режим
- 3. Emacs Save Buffer Keybinding?
- 4. Очистить emacs REPL buffer
- 5. Emacs disable * Messages * buffer
- 6. Emacs erlang buffer
- 7. add-hook to emacs scratch при запуске
- 8. emacs 24.5 Args вне диапазона: # <buffer * scratch *>, 9017, 10107
- 9. emacs make frame switch buffer
- 10. emacs cider clear REPL buffer
- 11. emacs compiler buffer auto close?
- 12. Как просто повторно открыть все файлы в Emacs?
- 13. Emacs Lisp Buffer не в фокусе функции?
- 14. Повторно открыть буфер в режиме разделения
- 15. «Открыть последние» в Emacs
- 16. Emacs auto-save on switch buffer
- 17. Почему мой буфер * scratch * сохраняет данные в aquamacs emacs?
- 18. Dired - открыть файлы в другом окне Emacs
- 19. Повторно открыть книгу
- 20. Argparse Повторно открыть файл.
- 21. Emacs режим оболочки открыть файл в буфер
- 22. открыть последние файлы в emacs
- 23. команда emacs, чтобы открыть новый экземпляр emacs
- 24. Оценить пространство имен Clojure в * nrepl * buffer в emacs
- 25. Открыть оболочку в emacs с данным рабочим каталогом
- 26. Горизонтальное разделение на pop-to-buffer в Emacs 23?
- 27. Как исправить поврежденный текст в * Backtrace * buffer (emacs)
- 28. Написание kill-or-bury-other-buffer в emacs lisp
- 29. Сортировка emacs dired buffer в соответствии с пользовательским компаратором
- 30. Scratch диски в Python?
С привязками по умолчанию «y RET» не требуется и просто вставляет «y» и новую строку во вновь созданный буфер * scratch *. – 2008-10-24 20:02:06
Ooops, может быть, это из режима iswitchb. Извини за это. На другой теме, попробуйте iswitchb-mode;) – 2008-10-24 20:14:44
Не следует также, чтобы в названии * scratch * ничего особенного не было. Можно использовать C-x b для создания любого количества «царапающих» буферов с произвольными именами. – 2008-10-24 20:46:00