2013-02-25 23 views
7

Khi làm việc với tệp init .emacs của tôi, đôi khi tôi mắc lỗi. Khi tôi thực hiện bộ đệm eval, tôi nhận được thông báo "kết thúc tệp trong khi phân tích cú pháp".Làm cách nào để xác định lỗi trong tệp lisp trong Emacs?

Làm cách nào để yêu cầu Emacs cho tôi biết vị trí chính xác của lỗi?

+5

Đối với * này * loại lỗi, vị trí chính xác là phần cuối của tệp, nhưng nó không phải là rất hữu ích :) Hãy thử reindenting tệp và xem nơi thụt đầu dòng trở thành sai. –

+2

Anton là đúng, những người đang thực sự đau đớn, nhưng bạn thường có thể tránh chúng bằng cách sử dụng một chế độ chỉnh sửa lisp tốt và gọi là 'indent-region' trên bộ đệm. Bạn có thể thấy mọi thứ diễn ra khi thụt đầu dòng không như mong đợi. – pmr

+0

Lỗi này có nghĩa là bạn có dấu ngoặc đơn sai. – Barmar

Trả lời

4

Các lỗi này rất khó xác định.

Cố gắng hết sức để tránh dấu ngoặc đơn không khớp. Có một số được xây dựng trong và bên thứ 3 chế độ nhỏ mà giúp bạn trong việc này:

  • electric-pair-mode: Chèn phù hợp với ngoặc đóng tự động (built-in)
  • show-paren-mode: Khi điểm kết thúc một ngoặc, đánh dấu phù hợp với một (được xây dựng)
  • rainbow-delimiters-mode: Làm nổi bật mỗi cấp độ dấu ngoặc đơn ở một khuôn mặt khác nhau
  • paredit-mode: Luôn cân bằng ngoặc đơn. Nói chung, chỉnh sửa tiêu điểm trên Sexps thay vì ký tự và từ.

Tôi khuyên bạn nên bật tất cả những điều này. Một cấu hình hợp lý để đánh bại dấu ngoặc đơn không khớp là:

(add-hook 'emacs-lisp-mode-hook 'paredit-mode) 
(add-hook 'emacs-lisp-mode-hook 'rainbow-delimiters-mode) 
(show-paren-mode 1) 
(electric-pair-mode 1) 

Paredit và Rainbow Delimiters có sẵn từ MELPA.

17

Điều đầu tiên là kiểm tra sự cân bằng của dấu ngoặc đơn và dấu ngoặc kép.

Đối với Emacs Lisp Trong GNU Emacs sử dụng M-x check-parens.

Trình chỉnh sửa giống như Emac khác có các lệnh tương tự. Trong LispWorks, một ví dụ có thể sử dụng M-x Find Unbalanced Parentheses.

+0

Đã sử dụng Emacs trong một thời gian dài và không bao giờ bỏ lỡ chức năng này. Tất nhiên điều này đã thay đổi khi tôi biết rằng nó tồn tại. – PascalVKooten

+0

bạn là người tiết kiệm cuộc sống :) – Veera

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