2011-10-08 28 views
7

Hi Tôi đã bật đệm xe đạp đặt lệnh sau trong emacs tôiBuffer đi xe đạp trong Emacs: tránh trầy xước và Messages đệm

(global-set-key (kbd "<C-tab>") 'bury-buffer) 

Nhưng trong khi đi xe đạp làm cách nào để tránh đi xe đạp qua tin nhắn và các bộ đệm scrratch mà luôn có mặt trong bất kỳ danh sách bộ đệm emacs nào. Tôi không bao giờ sử dụng những bộ đệm và trở thành một mắt đau khi đi xe đạp qua tôi đệm-list

Trả lời

7

Nếu bạn không bao giờ sử dụng bộ đệm đầu, chỉ cần thêm này để emacs của bạn để tự động đóng nó:

(kill-đệm "* đầu *")

tôi cũng thấy this code trên Emacs wiki mà nên làm những gì bạn muốn:

; necessary support function for buffer burial 
(defun crs-delete-these (delete-these from-this-list) 
    "Delete DELETE-THESE FROM-THIS-LIST." 
    (cond 
    ((car delete-these) 
    (if (member (car delete-these) from-this-list) 
     (crs-delete-these (cdr delete-these) (delete (car delete-these) 
               from-this-list)) 
     (crs-delete-these (cdr delete-these) from-this-list))) 
    (t from-this-list))) 
; this is the list of buffers I never want to see 
(defvar crs-hated-buffers 
    '("KILL" "*Compile-Log*")) 
; might as well use this for both 
(setq iswitchb-buffer-ignore (append '("^ " "*Buffer") crs-hated-buffers)) 
(defun crs-hated-buffers() 
    "List of buffers I never want to see, converted from names to buffers." 
    (delete nil 
      (append 
      (mapcar 'get-buffer crs-hated-buffers) 
      (mapcar (lambda (this-buffer) 
        (if (string-match "^ " (buffer-name this-buffer)) 
         this-buffer)) 
        (buffer-list))))) 
; I'm sick of switching buffers only to find KILL right in front of me 
(defun crs-bury-buffer (&optional n) 
    (interactive) 
    (unless n 
    (setq n 1)) 
    (let ((my-buffer-list (crs-delete-these (crs-hated-buffers) 
              (buffer-list (selected-frame))))) 
    (switch-to-buffer 
    (if (< n 0) 
     (nth (+ (length my-buffer-list) n) 
       my-buffer-list) 
     (bury-buffer) 
     (nth n my-buffer-list))))) 
(global-set-key [(control tab)] 'crs-bury-buffer) 
(global-set-key [(control meta tab)] (lambda() 
             (interactive) 
             (crs-bury-buffer -1))) 

Bạn sẽ cần phải thêm đầu và thông điệp của bộ đệm vào biến crs-hated-buffers, ví dụ .:

(add-to-list 'crs-hated-buffers "*Messages*") 
(add-to-list 'crs-hated-buffers "*scratch*") 
5

đã trả lời câu hỏi cụ thể của bạn Luca. Trong bộ đệm đi xe đạp kinh nghiệm cá nhân của tôi là hữu ích hơn như là một ngăn xếp gần đây nhất được sử dụng thay vì các chức năng đi xe đạp mặc định Emacs. Nghĩa là, các vùng đệm mà bạn sử dụng gần đây nhất sẽ bị bong bóng lên đầu ngăn xếp, tương tự như cách tab alt hoạt động trong Windows.

Có một số gói thực hiện điều này trên wiki. buffer-stack là trang tôi khuyên dùng. Nó có một danh sách các bộ đệm bị loại trừ theo mặc định, tôi đã bao gồm cấu hình buffer-stack-suppl của mình, cùng một chế độ lọc chính. Nếu bạn đặt câu hỏi về buffer-stack, tôi sẽ cố gắng hết sức để trợ giúp.

+0

Làm thế nào để xác định một ký tự đại diện khi tôi yêu cầu đệm-stack để luôn luôn bỏ qua/bộ đệm nhất định untrack? ví dụ. nếu tôi muốn yêu cầu nó thêm vào danh sách không đúng * .html thì làm cách nào để làm điều đó? – incandescentman

1

Vâng, nếu bạn sử dụng ido-mode để chuyển đổi giữa các bộ đệm, bạn có thể đặt ido-ignore-buffers để khớp với bộ đệm bạn muốn bỏ qua. Từ tài liệu:

Danh sách regexps hoặc chức năng khớp với tên đệm để bỏ qua. Ví dụ, hành vi truyền thống không liệt kê các bộ đệm có tên bắt đầu với một khoảng trắng, mà regexp là "` ". Xem tệp nguồn cho các hàm mẫu lọc tên đệm.

Để biết thêm về ido-mode see: Introduction to ido-mode

3

Tất cả các bộ đệm Tôi không sử dụng, chẳng hạn như cào, tin nhắn và hoàn tất, điều sai lầm với công việc của tôi.

Tôi đã quản lý để loại bỏ hoàn toàn chúng, mà không phá vỡ các emac theo bất kỳ cách nào.

Đã đăng đầu tiên here và dán dưới đây:

Đặt mã này vào của bạn.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) 

Bonus:

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

CÓ CÓ CÓ THANKS !!!! –

Các vấn đề liên quan