2011-01-28 8 views
5

Mi stavo chiedendo se qualcuno può fornirmi un aiuto per minimizzare il mio file .emacs.Come si può minimizzare il file di configurazione .emacs?

Attualmente ho impostato dove ogni lingua che uso ha una scheda personalizzata, ad esempio, se ho un hook per Java, sarebbe simile a questa.

 
;; 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) 

E se dovessi aggiungere un'altra lingua come CSS o JavaScript, vorrei aggiungere un altro gancio per i CSS e un altro gancio per JavaScript. Quindi mi stavo chiedendo se esiste un modo globale di impostarlo in modo tale da applicarlo a qualsiasi lingua?

Sono attualmente in esecuzione GNU Emacs 23.2.1 su Windows 7.

risposta

1

espect.el sta facendo esattamente quello che vuoi.

Dalla documentazione:


Questa modalità rende facile per configurare le impostazioni per i singoli buffer con una concice ed estensibile mini-lingua. Estrae da attività di selezione della configurazione comuni, come il controllo della modalità o il nome file, in una semplice sintassi dichiarativa. Dichiarare condizioni; esegue una funzione quando il nuovo buffer le combina. Questo rende facile fare cose come attivare la modalità progr. Flyspell per i tuoi linguaggi di programmazione preferiti o rendere tutti i buffer in modalità testo che terminano in .mkn hanno proprietà speciali.

+0

Grazie per la risposta, proverò e vedrò come funziona, anche se potrebbe essere un po 'più complicato per me. – YTKColumba

2

Non sono sicuro di cosa stai provando a fare. Se si desidera impostare la scheda di larghezza per 4 spazi a livello globale, allora si può farlo usando il comando Personalizza:

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

Tutte le modifiche apportate alla scheda-larghezza in personalizzare verranno applicate a livello globale. Quindi non è necessario impostarlo individualmente per ciascuna modalità con ganci.

Se si dispone di impostazioni diverse che si desidera applicare a diverse modalità, sarà necessario disporre di codice specifico per ciascuna modalità in .emacs.

Più in generale, sembra che tu stia cercando di creare i tuoi comandi di inserimento di tabulazioni personalizzati: il rientro incorporato non fa ciò che ti serve? Penso che sarà più facile personalizzare le impostazioni di indentazione in Emacs piuttosto che inserire manualmente le schede dove le vuoi.

Se non lo hai già fatto, date un'occhiata alla sezione del manuale sul rientro e vedere se si potrebbe essere in grado di fare ciò che è necessario, senza un sacco di ganci aggiuntivi:

Ch rm indentazione

(cioè: h -elp, r -ead manuale, m elemento -enu Indentation)

o:

(info "(emacs)Indentation") 
+0

Beh, principalmente quello che sto cercando di fare è il rientro con 4 schede spazio, a livello globale. Se hai mai usato Visual Studio/DreamWeaver in precedenza, mi piacerebbe impostarlo in questo modo. – YTKColumba

+0

Come detto sopra, imposta le larghezze della tab in personalizzazione e riduci i tuoi .emac su una sola riga: (setq indent-tabs-mode t). – Tyler

5

Sono d'accordo con Tyler; anche se è un po 'complicato, alla lunga staresti meglio se tentassi di capire e personalizzare le funzioni di indentazione di default. Il Wiki di Emacs ha good resources e ci sono altri relevant Q&As qui su Stack Overflow.

Associare il tasto di tabulazione a insert-tab significa perdere completamente il vantaggio di simili di indent-region e qualsiasi altro comportamento intelligente che una modalità principale potrebbe offrire.

per rispondere alle vostre domande specifiche a prescindere, però:

1) Se si sta definendo (java-insert-tab) e (css-insert-tab) e (javascript-insert-tab) ecc, e tutti fanno esattamente la stessa cosa ... beh, Speriamo che si può vedere che don In realtà hanno bisogno di più di una di quelle funzioni. Dagli un nome più generico e riutilizzalo.

2) (local-set-key ...) fa la stessa cosa di (define-key (current-local-map) ...), il che significa che è anche possibile avere una singola funzione generica per sovrascrivere la combinazione di tasti della scheda, indipendentemente dalla modalità principale.

(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)) 

Poi basta aggiungere my-coding-config a ciascuna variabile gancio modalità applicabile. Se ci sono un sacco di loro, si potrebbe avvolgetelo in una lista come questa:

;; 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) Se si guarda alla Ch vtab-widthRET e allo stesso modo per indent-tabs-mode, si noterà che entrambi dicono "Automaticamente diventa buffer-local quando impostato in qualsiasi modo."

In alternativa all'interfaccia personalizzata già menzionata, è possibile utilizzare (set-default 'indent-tabs-mode t) per stabilire il valore predefinito per tali variabili. In assenza di codice che imposta un valore locale del buffer, tutti i buffer utilizzeranno il valore predefinito, il che potrebbe aiutare a evitare di scrivere hook di modalità non necessari.

+0

Fantastico, ci provo e ti faccio sapere come funziona. – YTKColumba

Problemi correlati