2010-01-16 26 views
11

Emacs girinti paradigması hakkında kafam karıştı.Emacs'ın HTML etiketleri arasındaki varsayılan girinti değiştirilemiyor

benim .emacs dosyasında bu var:

(setq-default tab-width 4) 

ben aşağıdaki durumda TAB tuşuna basarsanız

    <ul> 
(caret) 
        </ul> 

bu

    <ul> 
        (caret) 
        </ul> 

(2 ile mekanlarda sonunun böyle HTML etiketleri arasındaki girinti.)

O sonunun böyle olmalıdır:

    <ul> 
         (caret) 
        </ul> 

Her şeyi denedim:

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

Ben 4'e girinti hakkında ayarını mümkün olan her emacs'in kurdum ama bu 2 uzay girinti hala orada.

Herhangi bir öneriniz var mı?

+0

HTML'yi düzenlemek için hangi modu kullanıyorsunuz? –

+0

Emin değilim. Tahmin ettiğim varsayılan mod (Emacs .html uzantılı bir dosya açıldığında html moduna geçtiğini sanıyordum) – alexchenco

cevap

21

Sekme genişliğini ayarlamak bu senaryoda geçerli değildir, ancak karışıklığınızı anlıyorum; Emacs çeşitli sekmeyle ilgili değişkenler sağlar ve belirli bir senaryo için doğru olanı belirlemek kafa karıştırıcı olabilir.

This EmacsWiki article provides more details about setting the indentation level for HTML; Genel olarak, EmacsWiki Emacs ipuçları için mükemmel bir kaynaktır.

Bu özel durumda, Emacs'in standart HTML modunu (sgml-mode ile tanımlandığı şekilde) kullandığınız için, ayarlamak istediğiniz değişken sgml-basic-offset'dur. şöyle 2'ye Yani değişken varsayılan, ancak 4'e değiştirebilirsiniz:

(setq sgml-basic-offset 4) 

sadece html-mode özgü bu değişikliği yapmak için aşağıdaki kodu kullanabilirsiniz:

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

Bu, tüm varsayar Emacs 22 veya daha yenisini kullanıyorsunuz; Bu durumda, bağlı olduğum EmacsWiki sayfası, Emacs'in önceki sürümleri için bir geçici çözüm içerir.

+0

Teşekkürler! Merak ediyorum neden: (setq html-basic-offset 4)? – alexchenco

+2

HTML, SGML'nin bir türevidir. Html modu için Emacs işlevi, genel amaçlı bir SGML paketi tarafından sağlanır; bu nedenle değişken "sgml-basic-offset" olur. Bu yüzden bu değişkeni 'html-mode-hook'da ayarlamak daha iyidir; bu şekilde, yalnızca HTML dosyalarını ve genel olarak SGML dosyalarını etkilemez. –

+0

Bu, HTML kodunuzu düzenlemek için kullandığınız moda bağlı olacaktır. Böyle bir gerçek * varsayılan * yoktur. –

İlgili konular