Переоткрыть * скретч * буфер

26

Если я случайно закрыл рабочий буфер в Emacs, как мне создать новый рабочий буфер?

Люк
источник
Пожалуйста, не задавайте вопросы только для того, чтобы отвечать на свои вопросы, особенно если на них легко ответить.
Эдгар Арутюнян
8
@ EdgarAroutiounian Можно задавать вопросы и отвечать на них ! Однако во время приватной бета-версии следует избегать простых вопросов: частная бета-версия задает тон для сайта.
Жиль "ТАК - перестань быть злым"
1
@ Жиль: Конечно, отвечать на свои вопросы - это нормально, но это довольно подозрительно, когда вы задаете 3 вопроса подряд, каждый с ответом сразу после того, как задаете вопрос.
Эдгар Арутюнян
2
@ EdgarAroutiounian, Джон Эриксон хочет, чтобы мы ответили на простые вопросы AZ. Добро пожаловать
Люк
2
Я думаю , что это достаточно справедливо - для нового пользователя иш это часто не очевидно , что нет ничего особенного о царапанию буфера, и @ ответ Сигмы довольно аккуратно.
Марк Ауффлик,

Ответы:

29

Просто заново создать буфер, переключаясь на него: C-x b *scratch* RET. Начиная с Emacs 21.2, если вы создаете буфер с именем *scratch*, он автоматически переводится в режим взаимодействия с Lisp .

Жиль "ТАК - перестань быть злым"
источник
Зачем вам нужна специальная функция? Для меня, если я убью, *scratch*а затем переключусь обратно, он автоматически переключится в режим lisp-взаимодействия.
Тихон Джелвис
@TikhonJelvis Ах, действительно. У меня есть эта функция, потому что она не делала этого в более старых версиях (изменение от 21.2, которое не является абсолютным в недавнем выражении, но более поздним, чем основная часть моего .emacs).
Жиль "ТАК - перестань быть злым"
Да. Emacs 21.2 был выпущен примерно в то время, когда я впервые использовал компьютер . Это довольно большая абсолютная разница;).
Тихон Джелвис
7

Возможно, лучше *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)
Сигма
источник
4

Привязки по умолчанию для GNU Emacs:

C-xb*scratch*

или, более многословно

  1. M-xswitch-to-buffer
  2. Typing: *scratch*
  3. А затем нажмите RETклавишу.

*scratch*Буфер представляет собой буфер , выбранный при запуске, и имеет основной режим лисповского взаимодействия . Примечание: режим для *scratch*буфера управляется переменной initial-major-mode.


В общем, вы можете создать столько «чистых» буферов, сколько захотите, и называть их по своему выбору.

C-x bNAME

переключается в буфер NAME, создавая его, если он не существует. Новый буфер не связан с файлом на диске, пока вы не используете C-xC-w(или M-xwrite-file), чтобы выбрать файл, в котором он должен быть сохранен.


M-xtext-mode изменяет основной режим текущего буфера на текстовый режим.

Чтобы найти все доступные режимы (то есть, не требуя каких-либо новых пакетов), вы можете получить список, набрав:

  1. M-xapropos-command
  2. Затем введите: -mode$
  3. А затем нажмите RET
Люк
источник
2

Мне нравится использовать скретч-буферы для одноразовых вещей. Имея только один, это несколько ограничивает, поэтому у меня есть 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

паприка
источник
Я использую это в течение шести недель. Это здорово, спасибо! Но ... Прошлой ночью мой компьютер с Windows перезагрузился. Я потерял данные из своих чистых буферов, потому M-x recover-sessionчто не восстанавливает их. Кто-нибудь изменил это, чтобы использовать что-то вроде make-temp-file?
Давелоял
1

Могу ли я предложить создать пустой буфер? Интересно то, что вы сначала создаете буфер, а потом сохраняете его, если действительно хотите.

(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

Нсуками _
источник