2010-08-16 13 views
7

Emacs ha una scarsa gestione dell'indentazione automatica in Flex e Bison. In realtà, sembra non avere supporto per la modalità flex. Quindi, come fa un utente emacs a far fronte a questi? Mi piace VIm ma preferirei non passare perché sono molto più veloce e più a suo agio in Emacs.Modalità Emacs per flex e bisonte o rimozione del rientro automatico per queste modalità?

Ho avuto un modulo di elisp di terze parti per Bison alcuni mesi fa ma quando la sua indentazione si è rotta, non sarebbe mai stata corretta. In breve, è stato un brutto attacco.

Oppure c'è un modo per disattivare il rientro automatico per i file .l e .y (in modo che premendo si farebbe un indent)? Come cambierei anche questa impostazione elisp per solo emacs?

Una guida piacevole e concisa per l'elisp sarebbe molto utile anche. Non mi dispiacerebbe passare qualche giorno a scrivere le mie modalità flex e bison se avessi la documentazione giusta.

+0

Non sono sicuro di cosa intendi per "disattiva il rientro automatico per i file .l e .y". In quale modalità si presenta la modella? Puoi regolarlo modificando la modalità automatica. – zwol

+0

Sembra essere in modalità C per bisonti. Per Flex, è in modalità Lisp. La modalità C per Bison è tollerabile, ma sembra che non ci siano modalità Lex o Flex per Emacs. – Kizaru

+0

Forse l'hai già visto, ma se non mi lasci fare riferimento alla seguente domanda: http://stackoverflow.com/questions/2166680/is-there-a-good-emacs-mode-or-method-for- lex-flex-yacc-bison-files –

risposta

3

Emacs sceglie la modalità principale principalmente in base all'estensione del nome file. .l è un'estensione contesa: alcune persone lo usano per lex, altri per il lisp (e ci sono alcuni altri usi più rari). Emacs associa .l con lisp e .lex con lex (per il quale utilizza la modalità C).

Se i file .l con cui lavori sono più spesso di Lex di Lisp, è possibile cambiare ciò .l file sono associati con la seguente riga nel .emacs:

(add-to-list 'auto-mode-alist '("\\.l\\'" . c-mode)) 

È possibile anche dichiarare all'interno di un file quale modalità vuoi che Emacs lo usi quando apre il file. Mettere il seguente frammento sulla prima riga del file (in genere in un commento):

-*-mode: c-mode-*- 

questa è una caratteristica più generale, offrendo altre sintassi e altre possibilità; consultare "Variabili file" nel manuale di Emacs per ulteriori informazioni.


Se volete iniziare con Emacs Lisp, leggere il Emacs Lisp intro (che possono essere inclusi nel vostro Emacs o distribuzione del sistema operativo). Una volta che hai giocato un po 'con le basi della lingua, puoi passare al capitolo sulle modalità nel manuale di riferimento di Emacs Lisp.

+0

Proverò questo sul mio setup di Emacs a casa ... Non ne sono del tutto sicuro, ma ho pensato che Flex/Lex avesse problemi con la modalità C (specialmente nella sezione delle regole).Ad esempio, se il primo carattere di una riga non è uno spazio, Flex lo interpreta come un modello da abbinare. Con la modalità C, se volessi inserire un codice corrispondente a una regola, non sarei in grado di farlo andare a destra a meno che non imponga un rientro, il che è noioso. Qualche semplice soluzione o idea per cosa fare qui? – Kizaru

+0

@PlaZmaZ: Non penso che tu possa risolvere questo senza scrivere un po 'di codice. Una modalità lex o yacc sarebbe derivata dalla modalità C (cercare "Modalità derivate" nel manuale di Emacs Lisp). La modalità CC ha un motore di indentazione complesso, che non ho mai esaminato; Penso che la sezione "Personalizzazioni avanzate" ti interesserà. Per la colorazione della sintassi, cerca "Modalità blocco font". – Gilles

1

Consiglio aggiuntivo: è possibile decidere che ciò che si desidera sia il comportamento generico di Emacs, ovvero ciò che utilizza quando non ha una modalità speciale per un formato di file. Questo si chiama modo fondamentale in emacs gergo: in modo da poter richiedere al volo con M-x fundamental-mode, o mettere -*- mode: fundamental -*- sulla prima riga del file, o personalizzare auto-mode-alist in questo modo:

(add-to-list 'auto-mode-alist '("\\.l\\'" . fundamental-mode)) 

Un'altra cosa da prova potrebbe essere indented-text-mode (probabilmente con riempimento automatico disabilitato).

Problemi correlati