Ngăn chặn bộ đệm không mong muốn mở


18

Tôi đang sử dụng emacs để chỉnh sửa javascript hàng ngày, để chuyển đổi giữa các bộ đệm Tôi sử dụng Cx LEFT và Cx RIGHT và tôi vẫn ổn với điều này (ngay cả khi tôi cảm thấy khó khăn khi biết đường dẫn của tệp tôi đang sửa đổi).

Vấn đề của tôi:

  1. lúc khởi nghiệp tôi luôn có *scratch**Messages*mở, tôi nghĩ rằng việc đưa (kill-buffer "*scratch*")vào .emacs của tôi sẽ giải quyết được vấn đề, nhưng không phải vậy, bạn có gợi ý gì không?

  2. Khi tôi mở tệp, tôi luôn tự động hoàn tất TAB, vì vậy mỗi lần tôi tạo một *Messages*bộ đệm mới chứa các tùy chọn để hoàn thành, làm cách nào để ngăn chặn việc này tạo hoặc tốt hơn là làm cách nào để tạo emacs giết nó, sau khi tôi lựa chọn của tôi?

Hãy nói ý kiến ​​của bạn nếu bạn nghĩ rằng tôi đang làm một cái gì đó không phải là "cách nó nên" với tôi điều hướng như tôi đã nói ở trên.


1
Bạn có thể muốn khám phá những cách khác để chuyển đổi bộ đệm như Trey đề xuất. Nếu bạn chọn một phương thức khác không tuần tự thì bạn có thể chuyển sang bộ đệm mong muốn ngay lập tức, do đó, không có vấn đề gì nếu bộ đệm không mong muốn nằm trong danh sách bộ đệm. Tôi sử dụng iswitchb mình.
Tom

Câu trả lời:


23

Điều này làm tôi phát điên .. cho đến khi tôi sửa nó.

Bây giờ không có vết trầy xước , tin nhắn hoặc bộ đệm hoàn thành để bắt nhịp với luồng của bạn. Thưởng thức!

Đặt cái này trong .emacs của bạn:

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

Tiền thưởng:

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

1
Cảm ơn bạn rất nhiều vì điều này, tôi ước tôi có thể cung cấp cho bạn nhiều đại diện hơn.
Alberto Zaccagni

Bạn được chào đón nhất! : D
Ole

2
Sẽ không có nghĩa gì nếu bạn (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))tải lại cấu hình? Hoàn toàn lấy cảm hứng từ vĩ mô khác của bạn.
Simon 'Tái tạo lại sự tỏa sáng của Monica'

2
Tôi đã không nhận ra những bộ đệm này đã làm phiền tôi đến mức nào cho đến khi tôi thoát khỏi chúng.
máy tự động

Nó bị rơi emacs
alper

6

Chà ... đó là một phần cách Emacs hoạt động, nhưng có những điều bạn có thể làm để giúp chuyển đổi nói chung.

Đầu tiên, Emacs phải có ít nhất một bộ đệm. Vì vậy, ngay cả khi bạn muốn thoát khỏi *scratch**Messages*, bạn sẽ bị bỏ lại một bộ đệm khác mà bạn không muốn (hoặc bạn sẽ nhận ra rằng Emacs đã bỏ qua kill-bufferyêu cầu cuối cùng của bạn vì nó đang tạo lại bộ đệm đó ( b / c nó cần một bộ đệm).

Vì vậy, cách tốt nhất để đi đến điểm chuyển đổi bộ đệm có ý nghĩa hơn là thực sự có bộ đệm bạn muốn chuyển sang.

Và, khi bạn đã thực hiện điều đó, bạn có thể xem tất cả các tùy chọn / gói có sẵn cho bạn để chuyển đổi bộ đệm - nhiều trong số đó được liệt kê trên Wiki Emacs trong SwitchingBuffers . idolà khá phổ biến, như là iciclesanything .


1
Tôi đang lưu các phiên của mình với (desktop-save-mode 1), vì vậy hầu như luôn luôn tôi sẽ có một cái gì đó mở khi khởi động, tôi sẽ xem xét các gói đó, cảm ơn.
Alberto Zaccagni

1

Nếu bất cứ ai quan tâm đến việc chỉ xóa bộ đệm * Scratch * và bị bỏ lại với bộ đệm * Tin nhắn *, mã này đã hoạt động với tôi:

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

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

Một điều bạn nên nhớ là, nếu bất cứ lúc nào Emacs không còn bộ đệm để hiển thị (ví dụ: bạn đã giết tất cả bộ đệm), nó sẽ tạo ra bộ đệm * cào * hoặc * Tin nhắn *, vì vậy hãy chắc chắn rằng bạn đã thắng ' Không được xóa tất cả các bộ đệm trong quy trình làm việc của bạn hoặc * cào * có thể hoạt động trở lại.

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.