2010-01-16 34 views
11

Tôi đang bối rối về mô hình thụt lề của Emacs.Không thể thay đổi thụt lề mặc định của Emacs giữa các thẻ HTML

Tôi có điều này trong tập tin .emacs tôi:

(setq-default tab-width 4) 

Nếu tôi nhấn TAB trong tình huống sau đây

    <ul> 
(caret) 
        </ul> 

nó kết thúc như thế này

    <ul> 
        (caret) 
        </ul> 

(với 2 không gian thụt lề giữa các thẻ HTML.)

Nó nên kết thúc như thế này:

    <ul> 
         (caret) 
        </ul> 

tôi đã cố gắng tất cả mọi thứ:

(setq-default tab-width 4) 
(setq-default indent-tabs-mode t) 
(setq tab-stop-list '(4 8 12 16)) 

tôi đã thiết lập mỗi Emacs có thể thiết lập khoảng thụt đầu dòng đến 4 nhưng mà 2 không gian thụt đầu dòng vẫn còn đó.

Mọi đề xuất?

+0

Bạn đang sử dụng chế độ nào để chỉnh sửa HTML? –

+0

Tôi không chắc chắn. Đó là chế độ mặc định tôi đoán (tôi nghĩ Emacs thay đổi sang chế độ html khi nó mở một tập tin với phần mở rộng .html) – alexchenco

Trả lời

21

Đặt chiều rộng tab không áp dụng được trong trường hợp này, nhưng tôi hiểu sự nhầm lẫn của bạn; Emacs cung cấp một số biến liên quan đến tab và xác định một biến chính xác cho một kịch bản cụ thể có thể gây nhầm lẫn.

This EmacsWiki article provides more details about setting the indentation level for HTML; nói chung, EmacsWiki là một tài nguyên tuyệt vời cho các mẹo của Emacs.

Trong trường hợp cụ thể này, vì bạn đang sử dụng chế độ HTML chuẩn của Emacs (html-mode, như được xác định bởi sgml-mode), biến mà bạn muốn đặt là sgml-basic-offset. Đó biến mặc định là 2, nhưng bạn có thể thay đổi nó thành 4 như sau:

(setq sgml-basic-offset 4) 

Để thực hiện thay đổi này chỉ dành riêng cho html-mode, bạn có thể sử dụng đoạn mã sau:

(add-hook 'html-mode-hook 
    (lambda() 
    ;; Default indentation is usually 2 spaces, changing to 4. 
    (set (make-local-variable 'sgml-basic-offset) 4))) 

này tất cả các giả định rằng bạn đang sử dụng Emacs 22 trở lên; nếu đó không phải là trường hợp, trang EmacsWiki mà tôi liên kết có chứa một giải pháp cho các phiên bản trước của Emacs.

+0

Nó làm việc cảm ơn! Tôi tò mò tại sao không: (setq html-basic-offset 4)? – alexchenco

+2

HTML là một dẫn xuất của SGML. Chức năng Emacs cho 'html-mode' được cung cấp bởi gói SGML có mục đích chung, đó là lý do tại sao biến này là' sgml-basic-offset'. Đây là lý do tại sao tốt hơn nên đặt biến đó trong 'html-mode-hook'; theo cách đó, nó sẽ chỉ ảnh hưởng đến các tệp HTML và không ảnh hưởng đến các tệp SGML nói chung. –

+0

Điều này sẽ tùy thuộc vào chế độ bạn đang sử dụng để chỉnh sửa mã HTML của mình. Không có * mặc định thực * như vậy. –

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