Riaprire il buffer * scratch *


26

Se ho accidentalmente chiuso il buffer di memoria virtuale in Emacs, come posso creare un nuovo buffer di memoria virtuale?


Per favore non fare domande solo allo scopo di rispondere alle tue domande, specialmente se sono facili da rispondere a quelle.
Edgar Aroutiounian,

8
@EdgarAroutiounian Va bene chiedere e rispondere alla tua domanda ! Tuttavia, fare domande facili dovrebbe essere evitato durante la beta privata: la beta privata dà il tono al sito.
Gilles 'SO- smetti di essere malvagio' il

1
@Gilles Ovviamente rispondere alle tue domande va bene, ma è piuttosto sospetto quando fai 3 domande una dopo l'altra, ognuna con una risposta immediatamente dopo aver fatto la domanda.
Edgar Aroutiounian,

2
@EdgarAroutiounian, Jon Ericson vuole che rispondiamo alle semplici domande di AZ. Benvenuto
Luca,

2
Penso che sia abbastanza giusto - per un nuovo utente spesso non è ovvio che non ci sia nulla di particolarmente speciale nel buffer di memoria virtuale, e la risposta di @ Sigma è abbastanza chiara.
Mark Aufflick,

Risposte:


29

Basta ricreare il buffer passando ad esso: C-x b *scratch* RET. Da Emacs 21.2, se si crea un buffer chiamato *scratch*, viene automaticamente messo in modalità Interazione Lisp .


Perché hai bisogno di una funzione speciale? Per me, se uccido *scratch*e poi torno ad esso, è impostato automaticamente sulla modalità interazione lisp.
Tikhon Jelvis,

@TikhonJelvis Ah, davvero. Ho questa funzione perché non lo ha fatto nelle versioni precedenti (la modifica è dalla 21.2, che non è recente in termini assoluti ma più recente della maggior parte della mia .emacs).
Gilles 'SO- smetti di essere malvagio' il

Si. Emacs 21.2 è stato rilasciato quando ho usato per la prima volta un computer . Questa è una differenza assoluta abbastanza grande;).
Tikhon Jelvis,

7

Probabilmente è meglio ricreare *scratch*automaticamente il buffer ogni volta che viene eliminato ed evitare di dover digitare nuovamente il suo nome.

(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

Collegamenti predefiniti di GNU Emacs:

C-xb*scratch*

o, più verbalmente

  1. M-xswitch-to-buffer
  2. Digitando: *scratch*
  3. E poi premere la RETchiave.

Il *scratch*buffer è il buffer selezionato all'avvio e ha la modalità principale Interazione Lisp . Nota: la modalità per il *scratch*buffer è controllata dalla variabile initial-major-mode.


In generale puoi creare tutti i buffer "scratch" che vuoi e nominarli come preferisci.

C-x bNAME

passa al buffer NAME, creandolo se non esiste. Un nuovo buffer non è associato a un file su disco fino a quando non si utilizza C-xC-w(o M-xwrite-file) per scegliere un file in cui deve essere salvato.


M-xtext-mode cambia la modalità principale del buffer corrente in modalità testo.

Per trovare tutte le modalità disponibili (ovvero senza richiedere nuovi pacchetti), puoi ottenere un elenco digitando:

  1. M-xapropos-command
  2. Quindi digitare: -mode$
  3. E quindi premere RET

2

Mi piace usare i buffer di memoria virtuale per oggetti da buttare via. Avere solo uno è in qualche modo limitante, quindi ho scratchcome comando interattivo per aprire un nuovo buffer di memoria virtuale (indipendentemente da quanti ne esistano già):

(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

adottato da: http://everything2.com/index.pl?node_id=1038451


Lo sto usando da sei settimane. È fantastico, grazie! Ma ... Ieri sera, il mio computer Windows si è riavviato. Ho perso i dati dai miei buffer di memoria virtuale, perché M-x recover-sessionnon li ripristino. Qualcuno ha modificato questo per usare qualcosa del genere make-temp-file?
Daveloyall,

1

Posso suggerire di creare un buffer vuoto? La cosa interessante è che crei prima il buffer e poi lo salvi, se vuoi davvero.

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

Dovrai impostare initial-major-mode su lisp nel tuo file init e dovresti associare my-empty-buffer a un collegamento come C-n.

Per gentile concessione di ergoemacs

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.