2009-12-23 45 views
5

Tôi thường sử dụng Geany hoặc Hi-Tide trong Debian (GNU/Linux) để phát triển phần sụn, chủ yếu là C (nhưng cũng đọc bộ lắp ráp cũ). Tôi tài liệu mã bằng cách sử dụng bình luận một dòng, và nó thực sự làm phiền tôi khi tôi gõ lại một cái gì đó và phải tự phá vỡ tất cả các dòng sau để giữ nó trong biên độ 80 ký tự.Trình soạn thảo văn bản với chú thích gói

Có trình chỉnh sửa văn bản nào có thể quấn lại các nhận xét một dòng liên tiếp (và tự động thực hiện việc này khi tôi nhập) không? Đó là, đưa ra:

/// This is a really long line that should have been wrapped at "that" but was not. 
/// This sentence is in the same 
/// paragraph as the last. 

... Tôi muốn một trình soạn thảo sẽ tái quấn này để

/// This is a really long line that 
/// should have been wrapped at "that" 
/// but was not. This sentence is in 
/// the same paragraph as the last. 

... tốt nhất là thực hiện điều này một cách hợp lý trong khi tôi gõ.

Tôi đã thử:

  • Hi-Tide (dựa trên Eclipse 3.3)
  • Geany
  • jEdit
  • UniversalIndentGUI + a bunch of prettifiers (Tôi không thể tìm thấy bất kỳ trình định dạng mà đã hoạt động và không phải là quy trình làm việc tuyệt vời)
  • GV - dòng tiếp theo bắt đầu //should have been ... thay vì /// should have been ...

Cập nhật: chỉ để xây dựng trên câu trả lời chấp nhận của tôi - Tôi đã đi với snapshot emacs và thêm một filladapt mode cũng được yêu cầu

Trả lời

6

Trong Emacs, để bắt đầu gói tự động, hãy nhập tự động ll-mode. Để đặt chiều rộng của đường, hãy chạy C-u ⟨cột⟩ C-x f. Emacs, hoặc thực sự CC Mode, sẽ dự đoán cấu trúc cho ý kiến ​​của bạn, để gõ /// Đây là một dòng rất dài mà shoul sẽ dẫn đến

/// This is a really long line that 
/// shoul‸

Và bạn có thể nạp một đoạn bất cứ lúc nào với Mq.

Nếu bạn muốn làm nạp tự động với mỗi phím nhấn, cũng có thể cũng có một số lệnh interal hoặc thư viện của bên thứ ba trên mạng, nhưng off-tay bạn có thể sử dụng mã elisp này:

 
;;; Can't advise SELF-INSERT-COMMAND, so create a wrapper procedure. 
(defun self-insert-refill (n) 
    (interactive "p") 
    (self-insert-command n)) 

;;; Advise SELF-INSERT-REFILL to execute FILL-PARAGRAPH after every 
;;; keypress, but *only* if we're inside a comment 
(defadvice self-insert-refill (after refill-paragraph) 
    (let ((face (or (get-char-property (point) 'read-face-name) 
        (get-char-property (point) 'face)))) 

    (if (and (eq face 'font-lock-comment-face) 
      (not (string= " " (this-command-keys)))) ; Spaces would get deleted on refill. 
     (fill-paragraph)))) 

(ad-activate 'self-insert-refill) 

(add-hook 'c-mode-hook 
    ;; Remap SELF-INSERT-COMMAND to be SELF-INSERT-REFILL. 
    (local-set-key [remap self-insert-command] 'self-insert-refill))) 

này có lẽ không phải là rất mạnh mẽ hoặc phù hợp với thực hành tốt nhất, và có thể không hoàn toàn thỏa đáng, vì nó sẽ không hoạt động để chỉnh sửa chung, ví dụ C-dbackspace, và nó làm chậm trình chỉnh sửa một chút, nhưng đó là một sự khởi đầu.

+0

Làm cách nào để tự động điền theo mặc định? Tôi đã thêm "(setq-default fill-column 55)" và "(add-hook 'cc-mode-hook' bật-tự động điền)" vào .emacs của tôi và ... không có gì. – detly

+0

Đó không phải là tên móc. Đó là 'c-mode-hook'. http://cc-mode.sourceforge.net/html-manual/CC-Hooks.html#CC-Hooks –

+1

Tuyệt vời, nó hoạt động. Tôi sẽ thử các emacs một cách toàn diện hơn ... – detly

6

Vim chắc chắn nhất thể làm điều này.

Trước tiên, bạn cần phải nói với Vim rằng "///" là một comment prefix (nó không phải là theo mặc định):

:set comments^=:/// 

Nếu bạn muốn gói xảy ra as-you-type, thiết lập của bạn văn bản ưa thích:

:set textwidth=80 

Để định dạng các đoạn hiện có, hãy sử dụng bất kỳ biến thể nào của lệnh gq. Ví dụ, bạn có thể:

  • Chọn một đoạn văn visually và gõ gq, hoặc
  • Loại gqj lại quấn từ dòng hiện đến cùng của đoạn
+1

vâng, không phải lúc nào cũng tự động và điều quan trọng là không phải đôi khi bạn không muốn dòng trong nhận xét bọc, đặc biệt khi bạn đang giải thích các bit bằng các ví dụ vv. – Peter

+0

@Rovpedal: vim * không * tự động khi bạn nhập. hoặc có thể giống như * I *? ;) –

+0

nó là lần đầu tiên, nhưng nếu bạn đang chỉnh sửa văn bản đã viết trước đó, nó sẽ không bao bọc lại nó. (tốt, IMO.) – Peter

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