Buka kembali * scratch * buffer

26

Jika saya secara tidak sengaja menutup buffer awal di Emacs, bagaimana cara membuat buffer awal yang baru?

Luke
sumber
Tolong jangan membuat pertanyaan hanya untuk tujuan menjawab pertanyaan Anda sendiri, terutama jika itu mudah dijawab.
Edgar Aroutiounian
8
@ EdgarAroutiounian Tidak apa-apa untuk bertanya dan menjawab pertanyaan Anda sendiri ! Namun, mengajukan pertanyaan mudah harus dihindari selama beta pribadi: beta pribadi menentukan nada untuk situs.
Gilles 'SO- stop being evil'
1
@Gilles Tentu saja menjawab pertanyaan Anda sendiri baik-baik saja, tetapi agak mencurigakan ketika Anda membuat 3 pertanyaan kembali ke belakang, masing-masing dengan jawaban segera setelah mengajukan pertanyaan.
Edgar Aroutiounian
2
@ EdgarAroutiounian, Jon Ericson ingin kita menjawab pertanyaan AZ sederhana. Selamat datang
Luke
2
Saya pikir itu cukup adil - untuk pengguna ish baru sering tidak jelas bahwa tidak ada yang istimewa tentang buffer awal , dan jawaban @ Sigma cukup rapi.
Mark Aufflick

Jawaban:

29

Hanya kembali membuat buffer dengan beralih ke itu: C-x b *scratch* RET. Karena Emacs 21.2, jika Anda membuat buffer yang disebut *scratch*, buffer otomatis dimasukkan ke dalam mode Interaksi Lisp .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Mengapa Anda memerlukan fungsi khusus? Bagi saya, jika saya membunuh *scratch*dan kemudian kembali ke sana, itu diatur ke mode interaksi lisp secara otomatis.
Tikhon Jelvis
@TikhonJelvis Ah, memang. Saya memiliki fungsi ini karena tidak melakukannya dalam versi yang lebih lama (perubahannya dari 21.2, yang tidak baru-baru ini secara absolut tetapi lebih baru daripada sebagian besar saya .emacs).
Gilles 'SO- stop being evil'
Ya. Emacs 21.2 dirilis sekitar waktu saya pertama kali menggunakan komputer . Itu perbedaan absolut yang cukup besar;).
Tikhon Jelvis
7

Lebih baik membuat kembali *scratch*buffer secara otomatis setiap kali dihapus, dan menghindari mengetik ulang namanya.

(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)
Sigma
sumber
4

Ikatan default GNU Emacs:

C-xb*scratch*

atau, lebih tepatnya

  1. M-xswitch-to-buffer
  2. Mengetik: *scratch*
  3. Dan kemudian menekan RETkunci.

The *scratch*buffer buffer yang dipilih pada startup, dan memiliki besar modus Lisp Interaksi . Catatan: mode untuk *scratch*buffer dikendalikan oleh variabel initial-major-mode.


Secara umum Anda dapat membuat buffer "scratch" sebanyak yang Anda inginkan, dan beri nama sesuka Anda.

C-x bNAME

beralih ke buffer NAME, membuatnya jika tidak ada. Buffer baru tidak dikaitkan dengan file pada disk hingga Anda menggunakan C-xC-w(atau M-xwrite-file) untuk memilih file yang harus disimpan.


M-xtext-mode mengubah mode utama buffer saat ini ke mode Teks.

Untuk menemukan semua mode yang tersedia (yaitu, tanpa memerlukan paket baru), Anda bisa mendapatkan daftar dengan mengetik:

  1. M-xapropos-command
  2. Kemudian ketik: -mode$
  3. Lalu tekan RET
Luke
sumber
2

Saya suka menggunakan buffer awal untuk barang-barang yang dibuang. Memiliki satu saja agak membatasi, oleh karena itu saya punya scratchsebagai perintah interaktif untuk membuka buffer awal baru (tidak peduli berapa banyak sudah ada):

(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

diadopsi dari: http://everything2.com/index.pl?node_id=1038451

paprika
sumber
Saya telah menggunakan ini selama enam minggu. Bagus, terima kasih! Tapi ... Tadi malam, komputer windows saya restart sendiri. Saya kehilangan data dari buffer awal saya, karena M-x recover-sessiontidak memulihkannya. Adakah yang memodifikasi ini untuk menggunakan sesuatu seperti make-temp-file?
daveloyall
1

Bolehkah saya menyarankan untuk membuat buffer kosong? Yang menarik adalah, Anda membuat buffer terlebih dahulu, dan Anda menyimpannya setelahnya, jika Anda benar-benar menginginkannya.

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

Anda harus mengatur mode-mayor-utama ke lisp di file init Anda dan Anda harus mengikat buffer my-empty ke shortcut seperti C-n.

Atas perkenan ergoemacs

Nsukami _
sumber