ป้องกันไม่ให้บัฟเฟอร์ที่ไม่ต้องการเปิด


18

ฉันใช้ emacs สำหรับการแก้ไขจาวาสคริปต์ทุกวันเพื่อสลับไปมาระหว่างบัฟเฟอร์ที่ฉันใช้ Cx LEFT และ Cx RIGHT และฉันก็โอเคกับเรื่องนี้ (แม้ว่าฉันจะพบว่ามันยากที่จะรู้เส้นทางของไฟล์ที่ฉันแก้ไข)

ปัญหาของฉัน:

  1. เมื่อเริ่มต้นฉันมักจะมี*scratch*และ*Messages*เปิดฉันคิดว่าการใส่(kill-buffer "*scratch*"). ems ของฉันจะช่วยแก้ปัญหาได้ แต่ก็ไม่มีคุณมีข้อเสนอแนะหรือไม่

  2. เมื่อฉันเปิดไฟล์ฉันจะเติมข้อความอัตโนมัติ TAB เสมอดังนั้นทุกครั้งที่ฉันสร้าง*Messages*บัฟเฟอร์ใหม่ที่มีตัวเลือกสำหรับการเติมให้สมบูรณ์ฉันจะป้องกันไม่ให้เกิดการสร้างหรือดีกว่าฉันจะทำให้ emacs ฆ่ามันได้อย่างไรหลังจากฉัน ทำให้ฉันเลือก?

พูดความคิดเห็นของคุณถ้าคุณคิดว่าฉันกำลังทำสิ่งที่ไม่ใช่ "วิธีที่ควรเป็น" กับฉันการนำทางตามที่ฉันพูดไว้ด้านบน


1
คุณอาจต้องการสำรวจวิธีอื่นในการสลับบัฟเฟอร์ตามที่ Trey แนะนำ หากคุณเลือกวิธีอื่นที่ไม่ได้เรียงตามลำดับคุณสามารถข้ามไปยังบัฟเฟอร์ที่ต้องการได้ทันทีดังนั้นจึงไม่สำคัญว่าบัฟเฟอร์ที่ไม่ต้องการอยู่ในรายการบัฟเฟอร์หรือไม่ ฉันใช้iswitchb ด้วยตัวเอง
Tom

คำตอบ:


23

สิ่งนี้ทำให้ฉันโกรธ .. จนกว่าฉันจะแก้ไข

ตอนนี้ไม่มีรอยขีดข่วน , ข้อความหรือความสำเร็จบัฟเฟอร์ที่จะสกรูที่มีการไหลของคุณ สนุก!

วางลงใน. emacs ของคุณ:

;; Makes *scratch* empty.
(setq initial-scratch-message "")

;; Removes *scratch* from buffer after the mode has been set.
(defun remove-scratch-buffer ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*")))
(add-hook 'after-change-major-mode-hook 'remove-scratch-buffer)

;; Removes *messages* from the buffer.
(setq-default message-log-max nil)
(kill-buffer "*Messages*")

;; Removes *Completions* from buffer after you've opened a file.
(add-hook 'minibuffer-exit-hook
      '(lambda ()
         (let ((buffer "*Completions*"))
           (and (get-buffer buffer)
                (kill-buffer buffer)))))

;; Don't show *Buffer list* when opening multiple files at the same time.
(setq inhibit-startup-buffer-menu t)

;; Show only one active window when opening multiple files at the same time.
(add-hook 'window-setup-hook 'delete-other-windows)

โบนัส:

;; No more typing the whole yes or no. Just y or n will do.
(fset 'yes-or-no-p 'y-or-n-p)

1
ขอบคุณมากสำหรับสิ่งนี้ฉันหวังว่าฉันจะให้ตัวแทนคุณมากขึ้น
Alberto Zaccagni

คุณยินดีมากที่สุด! : D
Ole

2
มันจะไม่เหมาะสมที่จะทำ(if (get-buffer "*Messages*") (kill-buffer "*Messages*"))ในกรณีที่คนโหลดการตั้งค่า? ได้รับแรงบันดาลใจมาจากแมโครอื่นของคุณ
Simon 'Reinstate Monica' Shine

2
ฉันไม่ได้ตระหนักว่าบัฟเฟอร์เหล่านี้รบกวนฉันมากแค่ไหนจนกว่าฉันจะกำจัดมันออกไป
หุ่นยนต์

มันชน emacs
alper

6

ดี ... มันเป็นเพียงบางส่วนของวิธีการทำงานของ Emacs แต่มีบางสิ่งที่คุณสามารถทำได้เพื่อช่วยในการเปลี่ยนโดยทั่วไป

อย่างแรก Emacs ต้องมีบัฟเฟอร์อย่างน้อยหนึ่งตัว ดังนั้นแม้ว่าคุณจะต้องการกำจัด*scratch*และ*Messages*คุณก็จะเหลือบัฟเฟอร์อีกตัวที่คุณไม่ต้องการ (หรือคุณได้รับจุดที่ Emacs เพิกเฉยต่อkill-bufferคำขอล่าสุดของคุณเพราะมันกำลังสร้างบัฟเฟอร์นั้นขึ้นใหม่ ( b / c ต้องการหนึ่งบัฟเฟอร์)

ดังนั้นวิธีที่ดีที่สุดในการไปยังจุดที่การเปลี่ยนบัฟเฟอร์มีเหตุผลมากกว่าคือมีบัฟเฟอร์ที่คุณต้องการเปลี่ยน

และเมื่อคุณทำที่คุณสามารถดูตัวเลือกทั้งหมด / แพคเกจที่คุณสามารถใช้ได้สำหรับบัฟเฟอร์เปลี่ยน - หลายแห่งซึ่งมีการระบุไว้ในวิกิพีเดียภายใต้ Emacs SwitchingBuffers idoเป็นที่นิยมสวยเช่นเดียวกับและiciclesanything


1
ฉันบันทึกเซสชันของฉันด้วย(desktop-save-mode 1)ดังนั้นเกือบตลอดเวลาฉันจะมีบางอย่างที่เปิดตอนเริ่มต้นฉันจะดูแพ็คเกจเหล่านั้นขอบคุณ
Alberto Zaccagni

1

หากใครสนใจที่จะลบเฉพาะบัฟเฟอร์ * scratch *และถูกทิ้งไว้กับบัฟเฟอร์ * Messages * รหัสนี้ใช้ได้กับฉัน:

(defun acg-initial-buffer-choice ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*"))
  (get-buffer "*Messages*"))

(setq initial-buffer-choice 'acg-initial-buffer-choice)

สิ่งหนึ่งที่คุณควรจำไว้คือถ้า Emacs ถูกทิ้งไว้โดยไม่มีบัฟเฟอร์ที่จะแสดง (เช่นเมื่อคุณฆ่าบัฟเฟอร์ทั้งหมด) เมื่อใดก็ตามมันจะสร้างบัฟเฟอร์ * scratch * หรือ * Messages * ดังนั้นคุณจะชนะ ' ไม่ต้องลบบัฟเฟอร์ทั้งหมดในระหว่างกระบวนการทำงานของคุณหรือ * scratch * สามารถกลับมามีชีวิตอีกครั้ง

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