2008-09-16 24 views
11

Tôi đang viết một chế độ chính Emacs cho một phương ngữ APL mà tôi sử dụng tại nơi làm việc. Tôi đã nhận được khóa phông chữ cơ bản để hoạt động và sau khi đặt bắt đầu nhận xét và khu vực nhận xét-bắt đầu bỏ qua, nhận xét/bỏ ghi chú và điền đoạn cũng hoạt động.Lấy đoạn trích Emacs để chơi tốt với các chú thích giống như javadoc

Tuy nhiên, khối nhận xét thường chứa các nhận xét kiểu javadoc và i muốn điền đoạn để tránh dán các dòng cùng nhau bắt đầu với các lệnh như vậy.

Nếu tôi có điều này (\ thay vì javadoc @):

# This is a comment that is long and should be wrapped. 
# \arg Description of argument 
# \ret Description of return value 

MQ mang lại cho tôi:

# This is a comment that is long and 
# should be wrapped. \arg Description 
# of argument \ret Description of 
# return value 

Nhưng tôi muốn:

# This is a comment that is long and 
# should be wrapped. 
# \arg Description of argument 
# \ret Description of return value 

tôi đã cố gắng thiết lập lập đoạn-đầu và đoạn riêng biệt thành giá trị thích hợp, nhưng đoạn văn điền vẫn không hoạt động bên trong khối nhận xét. Nếu tôi loại bỏ các đánh dấu bình luận, M-q hoạt động như tôi muốn , do đó, regexp tôi sử dụng để bắt đầu đoạn dường như hoạt động.

Tôi có phải viết đoạn mã tùy chỉnh cho chế độ chính của mình không? cc-mode có một xử lý các trường hợp như thế này, nhưng nó thực sự phức tạp , tôi muốn tránh nó nếu có thể.

Trả lời

4

Vấn đề là regexp đoạn bắt đầu phải khớp với toàn bộ dòng để hoạt động, kể cả ký tự nhận xét thực tế. Sau đây elisp làm việc cho các ví dụ tôi đã:

(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$") 

Dưới đây là một trang có một regexp ví dụ cho php-mode mà thực hiện điều này: http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/

1

Có các chế độ khác có chức năng ít phức tạp hơn được sử dụng cho fill-paragraph-function. Duyệt qua cài đặt của tôi, có vẻ như các chế độ ada-mode và make-mode là các ví dụ hay.

1

Những gì tôi làm trong những trường hợp này là mở một dòng trống giữa các dòng đoạn và dòng đối số, sau đó sử dụng M-q để bao bọc các dòng đoạn, sau đó giết dòng trống giữa chúng. Không lý tưởng, nhưng nó hoạt động và đủ dễ dàng để ghi lại trong một macro nếu bạn cần lặp lại nó.

+0

Đây là những gì tôi làm cũng – Branan

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