บัฟเฟอร์ * scratch * เปิดอีกครั้ง


25

ถ้าฉันปิดบัฟเฟอร์รอยขีดข่วนใน Emac โดยไม่ตั้งใจฉันจะสร้างบัฟเฟอร์รอยขีดข่วนใหม่ได้อย่างไร


โปรดอย่าตั้งคำถามเพียงเพื่อจุดประสงค์ในการตอบคำถามของคุณเองโดยเฉพาะหากตอบคำถามได้ง่าย
Edgar Aroutiounian

8
@EdgarAroutiounian ไม่ต้องถามและตอบคำถามของคุณเอง ! อย่างไรก็ตามการถามคำถามง่าย ๆ ควรหลีกเลี่ยงในระหว่างเบต้าส่วนตัว: เบต้าส่วนตัวกำหนดเสียงสำหรับไซต์
Gilles 'หยุดชั่วร้าย'

1
@Gilles แน่นอนการตอบคำถามของคุณเองเป็นเรื่องที่ดี แต่มันค่อนข้างน่าสงสัยเมื่อคุณตั้งคำถาม 3 ข้อกลับไปหลังแต่ละคำตอบทันทีหลังจากถามคำถาม
Edgar Aroutiounian

2
@EdgarAroutiounian, Jon Ericson ต้องการให้เราตอบคำถาม AZ ง่ายๆ ยินดีต้อนรับ
Luke

2
ฉันคิดว่ามันยุติธรรมพอ - สำหรับผู้ใช้ที่เป็นคนใหม่มักจะไม่ชัดเจนว่าไม่มีอะไรพิเศษเป็นพิเศษเกี่ยวกับscratch buffer และคำตอบของ @ Sigma นั้นค่อนข้างเรียบร้อย
Mark Aufflick

คำตอบ:


28

C-x b *scratch* RETเพียงแค่สร้างใหม่อีกครั้งบัฟเฟอร์โดยสลับไปที่มัน ตั้งแต่ Emacs 21.2 ถ้าคุณสร้างบัฟเฟอร์ที่เรียกว่า*scratch*ก็ใส่โดยอัตโนมัติในโหมดการโต้ตอบเสียงกระเพื่อม


ทำไมคุณถึงต้องการฟังก์ชั่นพิเศษ? สำหรับฉันถ้าฉันฆ่า*scratch*แล้วสลับกลับไปที่เดิมมันถูกตั้งค่าเป็นโหมดเสียงกระเพื่อมโดยอัตโนมัติ
Tikhon Jelvis

@TikhonJelvis Ah แน่นอน ฉันมีฟังก์ชั่นนี้เพราะมันไม่ได้ทำในเวอร์ชั่นที่เก่ากว่า (การเปลี่ยนแปลงมาจาก 21.2 ซึ่งไม่ได้อยู่ในเงื่อนไขที่แน่นอน แต่ล่าสุดกว่าจำนวนมากของฉัน.emacs)
Gilles 'หยุดชั่วร้าย'

ใช่. Emacs 21.2 ได้รับการปล่อยตัวในช่วงเวลาที่ผมครั้งแรกที่ใช้คอมพิวเตอร์ในทุก นั่นเป็นความแตกต่างที่แน่นอนมากทีเดียว);
Tikhon Jelvis

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)

3

GNU Emacs การผูกค่าเริ่มต้น:

C-xb*scratch*

หรือมากขึ้น verbosely

  1. M-xswitch-to-buffer
  2. พิมพ์ดีด: *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?
daveloyall

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 ในไฟล์ init ของคุณและคุณควรผูก my-empty-buffer เป็นทางลัดเช่น C-nคุณและคุณควรผูกว่างบัฟเฟอร์ของฉันไปทางลัดเช่น

ความอนุเคราะห์จากergoemacs

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.