2008-12-05 27 views
5

Tôi muốn ghi đè lược đồ tab mặc định xấu trong các emacs để nó hoạt động giống như hầu hết các trình chỉnh sửa khác (nhật thực, notepad ++). Tôi muốn thiết lập nó để bất kể chế độ, tab sẽ chèn một tab, và nhấn Enter sẽ giữ cho tôi ở độ sâu tab hiện tại của tôi.Tab cải tiến trong Emacs

tôi đã cố gắng này, nhưng nó không làm gì:

(global-set-key (kbd "TAB") 'tab-to-tab-stop) 
(setq default-tab-width 4) ;; 8 is way too many 
+0

Một số chế độ chính có thể ghi đè điều này. Bạn có thể nói thêm về môi trường của bạn không? – dmckee

+2

Tôi thực sự muốn đạt được nó cho mọi môi trường. Nó thực sự làm phiền tôi khi nó quyết định rằng nó biết tốt hơn tôi, và từ chối cho phép tôi thụt lề như tôi xin vui lòng. ví dụ. trong cấu hình apache nó cho phép tôi 1, 8 tab char, và không có thêm. chế độ elisp là lành mạnh, nhưng không phù hợp với thông thường. – AlexH

+0

Nếu nó chỉ cho phép một tab 8 ký tự, sửa chữa sẽ thay đổi * đó *, thay đổi những gì tab dừng lại. (Hoặc thay đổi chức năng thụt lề.) – ShreevatsaR

Trả lời

9

Để làm cho phím Enter đưa bạn đến dòng tiếp theo và indent nó tự động, bạn có thể đặt

(global-set-key (kbd "RET") 'newline-and-indent) 

trong .emacs của bạn. [Hoặc bạn có thể nhấn C-j thay vì Enter.] Khi bạn đã có, bạn sẽ không bao giờ cần chèn tab theo cách thủ công, vì Emacs tự động thụt lề dòng mới đến độ sâu sau khi mở ngoặc, v.v. Nếu bạn muốn thay đổi thụt lề, bạn có thể nhấn TAB cho đến khi nó đưa bạn đến thụt lề phải, sau đó bắt đầu nhập từ đó. [Và khi bạn gõ một cú đúp đóng, Emacs là đủ thông minh để có mà cú đúp một mức thụt đầu dòng ngược.]

Bạn nên loại bỏ (global-set-key (kbd "TAB") 'tab-to-tab-stop) để làm việc này.

1

C-j hiện newline + chức năng thụt lề mà bạn muốn ra khỏi nhấn Enter.

7

Nhiều chế độ chính ghi đè ràng buộc TAB, ví dụ: chế độ cc liên kết TAB đến 'c-indent-to-column.

'global-set-key được đề xuất không làm gì vì hầu như mọi chế độ chính đều đã ghi đè số TAB.

Một mẹo có thể phù hợp với bạn là sao chép cách tiếp cận 'pabbrev sử dụng và xác định chế độ nhỏ toàn cầu có giới hạn TAB. Bạn có thể làm như vậy:

(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode") 
(define-minor-mode just-tab-mode 
    "Just want the TAB key to be a TAB" 
    :global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap 
    (define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command)) 

Tuy nhiên, điều này sẽ vô hiệu hóa tất cả hoàn tất TAB. Có thể bạn sẽ nhận được kết quả tốt nhất bằng cách ghi đè từng chế độ chính từng cái một (để tránh bị lẫn lộn hoàn thành TAB).

2

Điều này cũng làm phiền tôi khi lần đầu tiên tôi bắt đầu sử dụng Emacs. Tuy nhiên, tôi đã yêu nó. Nếu tôi muốn thụt lề một cách thích hợp, tôi nhấn <tab>; nếu tôi muốn chèn một tab chữ, tôi nhấn M-i (Meta và 'i' hoặc - trong một số cách) được ràng buộc với tab-to-tab-stop.

3

Tôi nghĩ rằng câu trả lời của trey jackson có lẽ là những gì bạn muốn, ngoại trừ có thể sử dụng 'self-insert-command thay vì 'indent-for-tab-command. Cá nhân tôi thích hành vi mặc định của emacs, nhưng self-insert-command làm những gì nó nói thay vì cố gắng làm bất cứ điều gì ưa thích như đảm bảo mã của bạn được định dạng tốt.

Một vài lần tôi thực sự muốn để chèn tab (không thụt lề) tôi nhấn M-i.

+0

'M-i' !!!! Thưa ngài, cá nhân ông đã cứu tôi khỏi đường hầm cổ tay ... 'Control-q 'đang bắt đầu lấy một số điện thoại trên tay trái của tôi. –

+0

'M-i' là' tab-to-tab-stop' chỉ chèn một ký tự tab nếu 'indent-tabs-mode' là đúng. Bạn cũng có thể tìm thấy 'C-q C-i' dễ gõ hơn' C-q TAB', tuy nhiên (đặc biệt nếu bạn có phím Caps Lock được cấu hình như một phím Ctrl). – phils

2

Bạn có thể quan tâm đến chế độ nhỏ này mà tôi đã tạo tại http://github.com/vohrta/regtab.

Nó làm cho nó để khi bạn nhấn phím tab hoặc là một ký tự tab (nếu thụt lề-tab-mod không phải là không) hoặc không gian tab-chiều rộng sẽ được đặt tại điểm.Chế độ này cũng có khả năng xử lý những gì bạn có thể xem xét hành vi thường xuyên trên một vùng văn bản đã chọn và chuyển tab để xóa các tab ở đầu dòng (hoặc tập hợp các dòng).

Bạn có thể bật hoặc tắt tính năng này bất kỳ lúc nào bằng cách nhấn M-x regtab-mode.

+2

Liên kết của bạn không hoạt động nữa. – user857990

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