2011-06-24 12 views
6

Şu anda Emacs öğreniyorum ve başlatma dosyamı kurmaya çalışıyorum.Emacs sekmeleri tam olarak vim gibi davranıyor

(setq indent-tabs-mode t) 
(setq-default indent-tabs-mode t) 
(global-set-key (kbd "TAB") 'self-insert-command) 
(setq default-tab-width 4) 
(setq tab-width 4) 
(setq c-basic-indent 4) 

Ama sekme Vim'ın tarzı gibi davranmaz: Bu (yere web'de buldum) gibi Şu görünüyor.

Sadece sekmeleri kullanırken Vim gibi davranmasını istiyorum. Bu, boşluk içeren sekmelerin yerini almaması anlamına gelir (Bence Emacs bunu varsayılan olarak yapar).

Böylece herkes tercih ettiği sekme genişliklerinde dosyaları düzenleyebilir. Genelde sekme genişliği için 4 kullanıyorum. Ve Backspace tuşuna bastığımda, aynı sayıyı geriye doğru gideceğim anlamına geliyor, yani eğer sekme 4'e ayarlıyorum ve Sekme'ye basarsanız, Backspace'e bastıktan sonra 4 karaktere geri döneceğim. Ayrıca her zaman sekme için 4 boşluk kullanmalıdır. Çünkü bazen emaclarda bunu yapmaz.

+0

Emacs'teki girinti biraz karmaşık bir konudur, ancak ayrıntıların bazılarını anlamak için biraz zaman ayırmaya değer olduğunu düşünüyorum. Çok sayıda bilgi için http://www.emacswiki.org/emacs/CategoryIndentation adresini ziyaret edin. – phils

cevap

6

Vim'in sekme kullanımı yapılandırılabilir, bu nedenle ne yapmak istediğinizin iyi bir açıklaması değildir, ancak açıklamanızın geri kalanı çoğu zaman için yeterli bilgiye sahiptir.

Sekmelerle baş etmenin en kolay yolu bunları kullanmaktır. Bu yüzden sekmeleri istediğiniz gibi yerleştirmek biraz iş gerektiriyorsa şaşırmayın.

Sekme karakteri eklemek için Sekme anahtarını kurdunuz. Bu, Emacs'teki özel değil: genellikle geçerli satırı girmek için Sekme anahtarı kullanılır. Yaptıklarınız varsayılan için yeterli, ancak dile özgü modlar yine de Tab girintisini yapabilir. C kodunda çalıştığınız c-basic-indent'u eklediğinizden; Bu nedenle, C modunu, girilmemesi için Sekme istemediğini söylemeniz gerekir. Bu yapmalı:

(eval-after-load "cc-mode" 
    '(define-key c-mode-map (kbd "TAB") 'self-insert-command)) 

sen yaşamanıza Başka bir şey varsayılan olarak Geri anahtar çalışır bir karakter yerine bir sütuna göre geri hareket olmasıdır. Aşağıdakiler bir karakteri silmelidir:

(global-set-key (kbd "DEL") 'backward-delete-char) 
(setq c-backspace-function 'backward-delete-char) 
+0

Ben 4 bir tabstop kullanıyorum dışında vim varsayılan kurulumunu kullanıyorum. Şimdi bu oldukça iyi çalışıyor teşekkürler. – rob

+0

Noktalı virgül emacs ayarladıktan sonra, satırı iki karakterle sola kaydırır. Bunu nasıl kapattığını biliyor musun? Benim init dosyası şu anki gibi görünüyor (setq indent-tabs-mode t) (global set-key (kbd "DEL") 'backward-delete-char) (setq c-backspace işlevi' backward-delete-char) (setq-varsayılan girinti-sekme modu t) (global-set-key (kbd "TAB") 'kendiliğinden-ekleme-komutu) (setq default-tab-width 4) (setq tab-width 4) (setq c-temel-girinti 4) (setq yedekleme engellemeli t) (yük-sonrası "cc modu" '(anahtar-anahtar-kip-haritası (kbd "TAB")) -insert-komut)) (silme-seçim modu t) (setq otomatik kaydetme varsayılanı yok) – rob

+0

@rob Eğer ';' (ve diğer birkaç karaktere bastığınızda, Emacs'in otomatik olarak yeniden içe dönmesini istemiyorsanız s), 'c-mode-map' içinde' (load-after-load 'cc-mode' '(define-anahtar-kip-map-map;; nil)) 'ile kestirilir.Şikayetiniz, Emacs'in istediğiniz sütun sayısına girmemesi durumunda, favori girinti stilinizin ne olduğunu söyleyin; [C modu kılavuzu] 'na bakın (http://cc-mode.sourceforge.net/html-manual/Customizing-Indentation.html#Customizing-Indentation). – Gilles