Текстовый редактор с обертыванием комментария

Я обычно использую Geany или Hi-Tide под Debian (GNU/Linux) для микропрограммной разработки, главным образом C (но также и чтение старого ассемблера). Я документирую код с помощью однострочных комментариев, и меня действительно раздражает, когда я перепечатываю что-то и должен вручную повторно повредить каждый после строки для хранения ее в поле с 80 символами.

Существует ли текстовый редактор, который может повторно перенести последовательные однострочные комментарии (и сделать это автоматически, в то время как я ввожу)? Таким образом, данный:

/// 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.

... Я хочу редактора, который повторно перенесет это к

/// 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.

... предпочтительно делая это разумно, в то время как я ввожу.

Я попробовал:

  • Привет-поток (на основе Eclipse 3.3)
  • Geany
  • jEdit
  • UniversalIndentGUI + набор prettifiers (я не мог найти средства форматирования, которые работали, и это не большой рабочий процесс ни один),
  • GVim - следующая строка начинается //should have been... вместо /// should have been...

Обновление: только для разработки мой принятый ответ - я пошел со снимком emacs, и дополнительный filladapt режим также требовался

5
задан detly 7 January 2010 в 01:02
поделиться

2 ответа

В Emacs, чтобы начать автоматическое обертывание, введите режим автозаполнения . Чтобы установить ширину линии, выполните C-u ⟨ columns ⟩ C-x f . Emacs, или на самом деле CC Mode, будет предвосхищать вашу структуру комментариев, так что ввод /// Это очень длинная строка, которая приведет к в результате

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

И вы можете заполнить абзац в любое время с помощью M-q .

Если вы хотите выполнять пополнение автоматически при каждом нажатии клавиши, возможно, есть какая-то внутренняя команда или сторонняя библиотека, но вы можете использовать этот код elisp вне руки:

;;; 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) ))

Это, вероятно, не очень надежно или в соответствии с передовой практикой и, вероятно, не полностью удовлетворительно, поскольку он не будет работать для общего редактирования, например C-d и backspace , и это несколько замедляет работу редактора, но это только начало.

6
ответ дан 13 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: