2010-08-16 30 views
7

Emacs tiene un mal manejo de la autodentación en Flex y Bison. De hecho, parece no tener soporte para el modo flexible. Entonces, ¿cómo hace frente un usuario de emacs con estos? Me gusta VIm, pero preferiría no cambiar porque soy mucho más rápido y más cómodo en Emacs.modos Emacs para flexión y bisonte, o eliminación de sangría automática para estos modos?

Tenía un módulo de elisp de terceros para Bison hace unos meses, pero cuando se rompió la muesca, nunca se solucionó. En resumen, fue un hack malo.

¿O hay una manera en que puedo desactivar la sangría automática para archivos .l y .y (por lo que presionar haría una sangría)? ¿Cómo cambiaría también esta configuración elisp solo para emacs?

Una buena y concisa guía para elisp también sería muy útil. No me importaría pasar unos días para escribir mis propios modos flex y bison si tuviera la documentación correcta.

+0

No estoy seguro de lo que quiere decir con "desactivar la sangría automática para archivos .l y .y". ¿En qué modo dice estar la línea de modo? Puede ajustar eso modificando auto-mode-alist. – zwol

+0

Parece estar en modo C para bisonte. Para Flex, está en modo Lisp. El modo C para Bison es tolerable, pero parece que no hay modos Lex o Flex para Emacs. – Kizaru

+0

Puede que ya haya visto esto, pero si no, permítame remitirlo a la siguiente pregunta: http://stackoverflow.com/questions/2166680/is-there-a-good-emacs-mode-or-method-for- lex-flex-yacc-bison-files –

Respuesta

3

Emacs elige el modo principal basado principalmente en la extensión del nombre del archivo. .l es una extensión contenida: algunas personas lo usan para Lex, otras para lisp (y hay algunos otros usos más raros). Emacs asocia .l con lisp y .lex con lex (para lo cual usa el modo C).

Si los .l archivos con los que trabaja son más a menudo lex de Lisp, se puede cambiar lo que .l archivos están asociados con la siguiente línea en su .emacs:

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

También puede declarar dentro de un archivo que modo desea que Emacs lo use cuando abre el archivo. Poner el siguiente fragmento en la primera línea del archivo (por lo general en un comentario):

-*-mode: c-mode-*- 

Ésta es una característica más general, ofreciendo otras sintaxis y otras posibilidades; ver "Variables de archivo" en el manual de Emacs para más información.


Si le gustaría empezar con Emacs Lisp, lea el Emacs Lisp intro (que puede ser incluido en su Emacs o distribución OS). Una vez que haya jugado un poco con los conceptos básicos del idioma, puede consultar el capítulo sobre modos en el manual de referencia de Emacs Lisp.

+0

Voy a probar esto en mi configuración de Emacs en casa ... No estoy del todo seguro, pero pensé que Flex/Lex tenía problemas con el modo C (especialmente en la sección de reglas).Por ejemplo, si el primer carácter de una línea no es un espacio en blanco, Flex lo interpreta como un patrón para que coincida. Con el modo C, si quisiera poner algún código correspondiente a una regla, no podría tenerlo a la derecha a menos que fuerce una sangría, lo cual es tedioso. ¿Alguna solución simple o idea de qué hacer aquí? – Kizaru

+0

@PlaZmaZ: No creo que puedas resolver esto sin escribir un poco de código. Un modo lex o yacc se derivaría del modo C (busque "Modos derivados" en el manual de Emacs Lisp). El modo CC tiene un motor de sangría complejo, que nunca he examinado; Creo que la sección "Personalizaciones avanzadas" te interesará. Para colorear la sintaxis, busque "Modo de bloqueo de fuente". – Gilles

1

Sugerencia adicional: Puede decidir que lo que desea es el comportamiento genérico de Emacs: qué usa cuando no tiene ningún modo especial para un formato de archivo. Eso se llama modo Fundamental en emacs jerga: por lo que se puede solicitar en la marcha con M-x fundamental-mode, o poner -*- mode: fundamental -*- en la primera línea del archivo, o personalizar auto-mode-a-lista de este modo:

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

Otra cosa a try podría ser indented-text-mode (probablemente con el autocompletar desactivado).

Cuestiones relacionadas