Mở lại * đệm * đệm


25

Nếu tôi vô tình đóng bộ đệm đầu trong Emacs, làm cách nào để tạo bộ đệm đầu mới?


Xin đừng đặt câu hỏi chỉ nhằm mục đích trả lời câu hỏi của riêng bạn, đặc biệt nếu chúng dễ trả lời.
Edgar Aroutiounian

8
@EdgarAroutiounian Bạn có thể hỏi và trả lời câu hỏi của chính mình ! Tuy nhiên, nên tránh những câu hỏi dễ dàng trong phiên bản beta riêng tư: phiên bản beta riêng tư đặt âm báo cho trang web.
Gilles 'SO- ngừng trở thành ác quỷ'

1
@Gilles Tất nhiên trả lời các câu hỏi của riêng bạn là tốt, nhưng nó khá nghi ngờ khi bạn thực hiện 3 câu hỏi trở lại, mỗi câu trả lời ngay sau khi đặt câu hỏi.
Edgar Aroutiounian

2
@EdgarAroutiounian, Jon Ericson muốn chúng tôi trả lời các câu hỏi AZ đơn giản. Chào mừng
Luke

2
Tôi nghĩ rằng nó đủ công bằng - đối với người dùng mới, thường không có gì đặc biệt về bộ đệm đầu và câu trả lời của @ Sigma khá gọn gàng.
Đánh dấu Aufflick

Câu trả lời:


28

Chỉ cần tạo lại bộ đệm bằng cách chuyển sang nó : C-x b *scratch* RET. Kể từ Emacs 21.2, nếu bạn tạo một bộ đệm được gọi *scratch*, nó sẽ tự động được đặt ở chế độ Tương tác Lisp .


Tại sao bạn cần một chức năng đặc biệt? Đối với tôi, nếu tôi giết *scratch*và sau đó quay lại với nó, nó sẽ tự động được đặt thành chế độ tương tác không thể thiếu.
Tikhon Jelvis

@TikhonJelvis Ah, thực sự. Tôi có chức năng này bởi vì nó đã không làm điều đó trong các phiên bản cũ hơn (thay đổi là từ 21.2, không phải là gần đây về mặt tuyệt đối mà là gần đây hơn so với số lượng lớn của tôi .emacs).
Gilles 'SO- ngừng trở nên xấu xa'

Vâng. Emacs 21.2 được phát hành vào khoảng thời gian đầu tiên tôi sử dụng máy tính . Đó là một sự khác biệt khá lớn tuyệt đối;).
Tikhon Jelvis

7

Có thể tốt hơn là *scratch*tự động tạo lại bộ đệm bất cứ khi nào nó bị xóa và tránh phải nhập lại tên của nó.

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

3

Các ràng buộc mặc định của GNU Emacs:

C-xb*scratch*

hoặc, dài dòng hơn

  1. M-xswitch-to-buffer
  2. Đánh máy: *scratch*
  3. Và sau đó nhấn RETphím.

Bộ *scratch*đệm là bộ đệm được chọn khi khởi động và có chế độ tương tác Lisp . Lưu ý: chế độ cho *scratch*bộ đệm được điều khiển bởi biến initial-major-mode.


Nói chung, bạn có thể tạo nhiều bộ đệm "cào" như bạn muốn và đặt tên cho chúng theo cách bạn chọn.

C-x bNAME

chuyển sang bộ đệm NAME, tạo nó nếu nó không tồn tại. Một bộ đệm mới không được liên kết với một tệp trên đĩa cho đến khi bạn sử dụng C-xC-w(hoặc M-xwrite-file) để chọn một tệp mà nó sẽ được lưu.


M-xtext-mode thay đổi chế độ chính của bộ đệm hiện tại thành chế độ Văn bản.

Để tìm tất cả các chế độ có sẵn (nghĩa là không yêu cầu bất kỳ gói mới nào), bạn có thể nhận danh sách bằng cách nhập:

  1. M-xapropos-command
  2. Sau đó gõ: -mode$
  3. Và sau đó nhấn RET

2

Tôi thích sử dụng bộ đệm đầu cho các công cụ vứt đi. Tuy nhiên, chỉ có một phần là hạn chế, do đó tôi có scratchmột lệnh tương tác để mở bộ đệm đầu mới (cho dù có bao nhiêu tồn tại):

(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

được thông qua từ: http://everything2.com/index.pl?node_id=1038451


Tôi đã sử dụng điều này trong sáu tuần. Thật tuyệt, cảm ơn! Nhưng ... Đêm qua, máy tính windows của tôi tự khởi động lại. Tôi đã mất dữ liệu từ bộ đệm đầu của mình, vì M-x recover-sessionkhông khôi phục được chúng. Có ai sửa đổi điều này để sử dụng một cái gì đó như thế make-temp-filenào?
daveloyall

1

Tôi có thể đề nghị tạo một bộ đệm trống không? Điều thú vị là, bạn tạo bộ đệm trước và bạn lưu nó sau, nếu bạn thực sự muốn.

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

Bạn sẽ phải đặt chế độ chính ban đầu thành lisp trong tệp init của mình và bạn nên liên kết bộ đệm trống của tôi với một phím tắt như thế nào C-n.

Phép lịch sự của ergoemacs

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.