2011-01-17 34 views
7

Tôi thích bất kỳ nhận xét nào xuất hiện trên một dòng riêng. Tôi không thích đặt bình luận trên cùng một dòng mã được bật. Trong một số ngôn ngữ, bạn có thể viết một khối nhận xét như:Tự động mở rộng các khối nhận xét trong các emacs

/** 
* I am a comment block. This comment block will be automatically expanded by the 
* IDE such that it can contain all of the text in this block. 
**/ 

Tôi thích điều đó. Tôi thích cách khối bình luận chỉ tiếp tục nhận được nhiều dòng hơn khi tôi thêm nhiều văn bản vào nó. Tôi thích làm thế nào nếu tôi chèn văn bản tại một số điểm tùy ý trong khối, văn bản tiếp theo sẽ được di chuyển xuống để không có văn bản vượt quá một điểm nhất định ở bên phải. Tôi sử dụng Python. Python không có nhận xét khối nhiều dòng. Tôi đoán gần nhất bạn có thể nhận được là:

# I am a comment block. This comment block will NOT be automatically expanded by 
# the IDE, because it does not recognize these two comment lines as being joined. 

Tôi cũng sử dụng các emac. Tôi chỉ tự hỏi nếu có ai đó có một số giải pháp thông minh như vậy mà họ có thể mở một khối bình luận và chỉ cần bắt đầu gõ. Không phải lo lắng về việc phải nhấn quay lại để chuyển sang dòng tiếp theo khi chiều rộng của dòng nhận xét quá lớn. Không phải trộn lẫn toàn bộ nhận xét khi bạn muốn chèn vào trong khối nhận xét. Ý tưởng nào?

Tóm tắt: Tôi đang tìm cách để thực hiện các nhận xét liền kề nhiều dòng (cho Python) trong các emacs, mà không phải định dạng văn bản theo cách thủ công trong chính khối nhận xét đó.

Cảm ơn bạn

Trả lời

4

auto-fill-mode dường như làm những gì bạn muốn. Khi độ dài của đường vượt quá giá trị của fill-column nó sẽ phá vỡ dòng và chèn dòng chú thích mới.

Mặc dù không hoàn toàn tự động, nếu văn bản được chèn vào giữa, bạn sẽ phải bấm M-q để nạp tiền.

[Chỉnh sửa: đây là cách để thông minh cho lệnh "không gian". Mỗi lần bạn nhấn SPC khối bình luận của bạn sẽ được nạp lại:

(defun refill-when-in-comment() 
    (interactive) 
    (let ((curr-face (get-char-property (point) 'face))) 
    (if (member "comment" (split-string (prin1-to-string curr-face) "-")) 
     (fill-paragraph t) 
    ) 
    ) 
) 

(defun smart-space (arg) 
    (interactive "P") 
    (refill-when-in-comment) 
    (self-insert-command (prefix-numeric-value arg)) 
) 

(global-set-key " " 'smart-space) 

Điều này làm việc cho bạn?

+0

+1. Nhập bình luận của bạn dưới dạng văn bản thuần túy, đánh dấu nó và làm một 'M-q' để điền vào nó. –

+0

Xem thêm, chế độ nạp tiền để tự động thực hiện việc điền lại. http://www.emacswiki.org/emacs/RefillMode Nó đã là một phần của emacs kể từ v21.2. Tôi đã không thử nó để sử dụng trong các bình luận mã. Mối quan tâm duy nhất của tôi là nó sẽ "lấp đầy" mã thực tế, ngoài việc điền vào các bình luận. rõ ràng đó sẽ là xấu. – Cheeso

2

Hơi không chính thống nhưng bạn không bị giới hạn sử dụng chuỗi làm nhận xét chỉ dành cho tài liệu. Phần huyền diệu duy nhất của việc có chúng như là vật phẩm đầu tiên là chúng sẽ được gán cho phương thức __doc__. THey có thể được sử dụng ở bất kỳ đâu và sẽ không ảnh hưởng đến hiệu quả ở tất cả

>>> import dis 
>>> def test(): 
...  """This is a standard doc string""" 
...  a = 3 # This will get compiled 
...  """This is a non standard doc string and will not get compiled""" 
... 
>>> dis.dis(test) 
    3   0 LOAD_CONST    1 (3) 
       3 STORE_FAST    0 (a) 

    4   6 LOAD_CONST    2 (None) 
       9 RETURN_VALUE 

Bạn có thể thấy rằng mã được tạo không tham chiếu đến một trong hai chuỗi.

Tôi chỉ đề cập đến điều này vì chuỗi tài liệu dường như có tất cả các tính năng mà bạn đang yêu cầu. Nó có phần không tiêu chuẩn mặc dù tôi không thấy cá nhân vấn đề với nó. Bình luận nhiều dòng sẽ đẹp.

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