2011-01-28 36 views
5

Tôi đã tự hỏi nếu có ai có thể cung cấp cho tôi một số trợ giúp về việc giảm thiểu tệp .emacs của tôi.Làm cách nào để rút gọn tệp cấu hình .emacs?

Hiện tại tôi có nó thiết lập nơi mỗi ngôn ngữ tôi sử dụng có một tab tùy chỉnh, ví dụ, nếu tôi có một móc cho Java, nó sẽ giống như thế này.

 
;; Java Hook 
(defun e-java-mode-hook() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (define-key java-mode-map (kbd "") 'java-insert-tab)) 
(defun java-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 
(add-hook 'java-mode-hook 'e-java-mode-hook) 

Và nếu tôi thêm ngôn ngữ khác như CSS hoặc JavaScript, tôi sẽ thêm một móc khác cho CSS và một móc khác cho JavaScript. Vì vậy, tôi đã tự hỏi nếu có một cách toàn cầu để thiết lập nó để nó sẽ áp dụng cho bất kỳ và tất cả các ngôn ngữ?

Tôi hiện đang chạy GNU Emacs 23.2.1 trên Windows 7.

Trả lời

1

espect.el là làm chính xác những gì bạn muốn.

Từ các tài liệu:


Chế độ này giúp bạn dễ dàng để cấu hình các thiết lập cho cá nhân bộ đệm với một concice và mini-ngôn ngữ mở rộng. Nó tóm tắt các tác vụ chọn cấu hình phổ biến, như kiểm tra chế độ hoặc tên tệp, thành cú pháp khai báo đơn giản. Khai báo điều kiện; chạy một hàm khi bộ đệm mới khớp với chúng. Điều này làm cho nó dễ dàng thực hiện những việc như bật chế độ flyspell-prog-mode cho các ngôn ngữ lập trình yêu thích hoặc làm cho tất cả các bộ đệm chế độ văn bản kết thúc bằng .mkn có các thuộc tính đặc biệt.

+0

Cảm ơn bạn đã trả lời, tôi sẽ dùng thử và xem nó hoạt động như thế nào, mặc dù nó có thể phức tạp hơn một chút đối với tôi. – YTKColumba

2

Tôi không chắc bạn đang cố gắng làm gì. Nếu bạn muốn đặt tab-width đến 4 không gian toàn cầu, sau đó bạn có thể làm điều đó bằng cách sử dụng lệnh tùy chỉnh:

M-x customize-variable tab-width <ret> 

Mọi thay đổi bạn thực hiện cho bằng tab chiều rộng trong tùy chỉnh sẽ được áp dụng trên toàn cầu. Vì vậy, bạn sẽ không cần phải thiết lập nó riêng cho từng chế độ với móc.

Nếu bạn có các cài đặt khác nhau mà bạn muốn áp dụng cho các chế độ khác nhau, bạn nhất thiết phải có mã cụ thể cho từng chế độ trong .emac của bạn.

Thông thường, có vẻ như bạn đang cố gắng tạo các lệnh chèn tab tùy chỉnh của riêng mình - không có sự thụt lề được xây dựng trong không làm những gì bạn cần? Tôi nghĩ rằng sẽ dễ dàng hơn để tùy chỉnh cài đặt thụt đầu dòng trong Emacs hơn là chèn các tab theo cách thủ công mà bạn muốn chúng.

Nếu bạn chưa sẵn sàng, hãy nhìn vào phần tay vào thụt dòng, và xem nếu bạn có thể có thể làm những gì bạn cần mà không có nhiều móc thêm:

Ch rm Indentation

(có nghĩa là: h -elp, r -ead hướng dẫn, m mục -enu Indentation)

hay:

(info "(emacs)Indentation") 
+0

Vâng, hầu hết những gì tôi đang cố gắng làm là thụt lề với 4 tab không gian, trên toàn cầu. Nếu bạn đã từng sử dụng Visual Studio/DreamWeaver trước đây, tôi muốn thiết lập nó như thế. – YTKColumba

+0

Như tôi đã nói ở trên, hãy đặt độ rộng của tab theo tùy chỉnh và giảm các .emac của bạn thành một dòng: (setq indent-tabs-mode t). – Tyler

5

Tôi đồng ý với Tyler; mặc dù nó có một chút phức tạp, bạn sẽ tốt hơn trong thời gian dài nếu bạn cố gắng hiểu và tùy chỉnh các tính năng thụt lề mặc định. Emacs Wiki có good resources và có relevant Q&As khác ở đây trên Stack Overflow.

Ràng buộc khóa tab là insert-tab có nghĩa là bạn hoàn toàn mất lợi ích của số lượt thích indent-region và mọi hành vi thông minh khác mà chế độ chính có thể cung cấp.

Để giải quyết câu hỏi cụ thể của bạn bất kể, tuy nhiên:

1) Nếu bạn đang định (java-insert-tab)(css-insert-tab)(javascript-insert-tab) vv, và tất cả họ đều thực hiện chính xác những điều tương tự ... tốt, hy vọng bạn có thể thấy rằng bạn don 't thực sự cần nhiều hơn một trong những chức năng đó. Chỉ cần cung cấp cho nó một tên chung hơn, và tái sử dụng nó.

2) (local-set-key ...) thực hiện tương tự như (define-key (current-local-map) ...), có nghĩa là bạn cũng có thể có một hàm chung chung để ghi đè khóa tab, bất kể chế độ chính.

(defun my-coding-config() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (local-set-key (kbd "<tab>") 'my-insert-tab)) 

(defun my-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 

Sau đó, bạn chỉ cần thêm my-coding-config vào mỗi biến móc chế độ áp dụng. Nếu có rất nhiều trong số họ, bạn có thể quấn nó lên trong một danh sách như thế này:

;; Use my coding hook for all programming modes 
(mapcar 
(lambda (language-mode-hook) 
    (add-hook language-mode-hook 'my-coding-config)) 
'(java-mode-hook 
    javascript-mode-hook 
    css-mode-hook 
    ...)) 

3) Nếu bạn nhìn vào Ch vtab-widthRET và tương tự như vậy cho indent-tabs-mode, bạn sẽ nhận thấy rằng cả hai đều nói "Tự động trở thành bộ đệm cục bộ khi được đặt trong bất kỳ thời trang nào".

Để thay thế cho giao diện tùy chỉnh đã được đề cập, bạn có thể sử dụng (set-default 'indent-tabs-mode t) để thiết lập giá trị mặc định cho các biến như vậy. Trong trường hợp không có mã đặt giá trị bộ đệm cục bộ, tất cả các bộ đệm của bạn sẽ sử dụng mặc định, điều này có thể giúp bạn tránh viết các móc chế độ không cần thiết.

+0

Tuyệt vời, tôi sẽ thử và cho bạn biết cách hoạt động. – YTKColumba

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