2010-08-16 41 views
7

Emacs có xử lý kém thụt lề tự động trong Flex và Bison. Trong thực tế, nó dường như không có hỗ trợ cho chế độ flex. Vì vậy, làm thế nào để một người dùng emacs đối phó với những? Tôi thích VIm nhưng tôi không muốn chuyển đổi vì tôi nhanh hơn và thoải mái hơn nhiều trong Emacs.Chế độ Emacs cho flex và bison, hoặc loại bỏ thụt lề tự động cho các chế độ này?

Tôi đã có mô-đun elisp của bên thứ ba cho Bison một vài tháng trước nhưng khi thụt đầu dòng của nó bị hỏng, nó sẽ không bao giờ được khắc phục. Nói tóm lại, đó là một tin xấu.

Hoặc có cách nào tôi có thể tắt tự động thụt đầu dòng cho các tệp .l và .y (vì vậy nhấn sẽ thực hiện một thụt lề) không? Làm thế nào tôi cũng sẽ thay đổi thiết lập elisp này chỉ cho emacs?

Hướng dẫn ngắn gọn và súc tích về elisp cũng sẽ rất hữu ích. Tôi sẽ không bận tâm một vài ngày để viết các chế độ flex và bison của riêng mình nếu tôi có tài liệu đúng.

+0

Tôi không chắc chắn ý của bạn là gì "tắt tự động thụt đầu dòng cho các tệp .l và .y". Chế độ mô hình yêu cầu phải có trong mô hình nào? Bạn có thể điều chỉnh điều đó bằng cách sửa đổi chế độ tự động điều chỉnh. – zwol

+0

Dường như ở chế độ C cho bò rừng. Đối với Flex, nó ở chế độ Lisp. Chế độ C cho Bison là có thể chấp nhận được, nhưng không có chế độ Lex hoặc Flex cho Emacs. – Kizaru

+0

Bạn có thể đã thấy điều này, nhưng nếu không cho phép tôi giới thiệu bạn với câu hỏi sau: http://stackoverflow.com/questions/2166680/is-there-a-good-emacs-mode-or-method-for- lex-flex-yacc-bison-files –

Trả lời

3

Emacs chọn chế độ chính chủ yếu dựa trên phần mở rộng tên tệp. .l là một tiện ích mở rộng được tranh luận: một số người sử dụng nó cho lex, một số khác cho lisp (và có một số ít sử dụng hiếm hơn). Emacs liên kết .l với lisp, và .lex với lex (mà nó sử dụng chế độ C).

Nếu .l file bạn làm việc với thường hơn lex hơn lisp, bạn có thể thay đổi những gì .l tập tin được gắn liền với dòng sau trong .emacs của bạn:

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

Bạn cũng có thể tuyên bố bên trong một tập tin những gì chế độ bạn muốn Emacs sử dụng khi nó mở tập tin. Đặt đoạn mã sau vào dòng đầu tiên của tệp (thường trong một nhận xét):

-*-mode: c-mode-*- 

Đây là tính năng tổng quát hơn, cung cấp các cú pháp khác và các khả năng khác; xem “Biến tập tin” trong sách hướng dẫn Emacs để biết thêm thông tin.


Nếu bạn muốn bắt đầu với Emacs Lisp, đọc Emacs Lisp intro (có thể được bao gồm trong Emacs hoặc phân phối hệ điều hành). Một khi bạn đã chơi xung quanh với những điều cơ bản của ngôn ngữ một chút, bạn có thể chuyển sang chương về các chế độ trong hướng dẫn tham khảo Emacs Lisp.

+0

Tôi sẽ thử điều này trên thiết lập Emacs ở nhà ... Tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ Flex/Lex có vấn đề với chế độ C (đặc biệt là trong phần quy tắc).Ví dụ: nếu ký tự đầu tiên của một dòng không phải là khoảng trắng, Flex sẽ diễn giải nó thành mẫu phù hợp. Với chế độ C, nếu tôi muốn đặt một số mã tương ứng với một quy tắc, tôi sẽ không thể có nó ở bên phải trừ khi tôi ép thụt lề, điều này thật tẻ nhạt. Bất kỳ giải pháp đơn giản hoặc ý tưởng cho những gì để làm ở đây? – Kizaru

+0

@ PlaZmaZ: Tôi không nghĩ rằng bạn có thể giải quyết vấn đề này mà không cần viết một chút mã. Một chế độ lex hoặc yacc sẽ được bắt nguồn từ chế độ C (tra cứu “Các chế độ có nguồn gốc” trong hướng dẫn sử dụng Emacs Lisp). Chế độ CC có một động cơ thụt lề phức tạp mà tôi chưa bao giờ xem xét; Tôi nghĩ rằng phần "Tùy chỉnh nâng cao" sẽ khiến bạn quan tâm. Để tô màu cú pháp, hãy tra cứu “Chế độ Khóa phông chữ”. – Gilles

1

Mẹo bổ sung: Bạn có thể quyết định rằng những gì bạn muốn là hành vi chung của Emacs - những gì nó sử dụng khi nó không có bất kỳ chế độ đặc biệt nào cho định dạng tệp. Đó được gọi là chế độ cơ bản trong emacs lingo: vì vậy bạn có thể yêu cầu một cách nhanh chóng với M-x fundamental-mode, hoặc đưa -*- mode: fundamental -*- trên dòng đầu tiên của file, hoặc tùy chỉnh auto-mode-alist như vậy:

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

Một điều cần thử có thể là indented-text-mode (có thể đã tắt tự động điền).

Các vấn đề liên quan