【问题标题】:Text editor with comment wrapping带注释换行的文本编辑器
【发布时间】:2010-12-29 09:06:15
【问题描述】:

我通常使用 Debian (GNU/Linux) 下的 Geany 或 Hi-Tide 进行固件开发,主要是 C(但也阅读旧的汇编程序)。我使用单行 cmets 记录代码,当我重新输入某些内容并且必须手动重新中断后面的每一行以将其保持在 80 个字符的边距内时,我真的很烦。

是否有可以重新换行连续单行 cmets 的文本编辑器(并在我键入时自动执行此操作)?也就是说,给定:

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

...最好在我打字时明智地这样做。

我试过了:

  • Hi-Tide(基于 Eclipse 3.3)
  • Geany
  • jEdit
  • UniversalIndentGUI + 一堆美化器(我找不到任何有效的格式化程序,这也不是一个很好的工作流程)
  • GVim - 下一行开始 //should have been... 而不是 /// should have been...

更新:只是为了详细说明我接受的答案 - 我已经使用 snapshot emacs 并且还需要额外的 filladapt mode

【问题讨论】:

    标签: editor comments text-editor


    【解决方案1】:

    Vim 肯定可以做到这一点。

    首先,你需要告诉 Vim "///" 是 comment prefix(默认不是):

    :set comments^=:///
    

    如果您希望在键入时进行换行,请设置您喜欢的文本宽度:

    :set textwidth=80
    

    要格式化现有段落,请使用gq 命令的任何变体。例如,您可以:

    • 选择一个段落visually并输入gq,或
    • 键入 gqj 从当前行重新换行到段落末尾

    【讨论】:

    • 是的,它并不总是自动的,重要的是它不是 - 有时你不希望注释中的行换行,尤其是当你用示例等解释代码时。手动控制是值得的。
    • @Rovpedal: vim 会在你输入时自动完成。或者也许就像 I 类型? ;)
    • 它是第一次这样做,但如果您正在编辑以前编写的文本,它不会重新包装它。 (这很好,IMO。)
    • 嗯...我怎么能放这个?我知道很多人真的非常喜欢 vim,但是……不。不是 vim。
    • 无论如何,vim 似乎没有这样做。请参阅我的原始帖子。
    【解决方案2】:

    在 Emacs 中,要开始自动换行,请输入 auto-fill-mode。要设置线宽,请运行 C-u ⟨columns⟩ C-x f。 Emacs,或真正的 CC 模式,将预测您的评论结构,以便输入 /// 这是一条很长的线,应该会导致

    /// 这是一个很长的行
    /// 应该‸

    您可以随时使用 M-q 重新填充段落。

    如果您想在每次按键时自动重新填充,那么可能有一些内部命令或第三方库,但您可以临时使用此 elisp 代码:

    ;;;不能建议 SELF-INSERT-COMMAND,所以创建一个包装程序。 (defun self-insert-refill (n) (交互式“p”) (自插入命令 n)) ;;;建议 SELF-INSERT-REFILL 每次执行 FILL-PARAGRAPH ;;;按键,但*仅*当我们在评论中时 (defadvice self-insert-refill (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)))) ;空间将在重新填充时被删除。 (填充段落)))) (ad-activate 'self-insert-refill) (add-hook 'c-mode-hook ;;将 SELF-INSERT-COMMAND 重新映射为 SELF-INSERT-REFILL。 (local-set-key [remap self-insert-command] 'self-insert-refill) ))

    这可能不是很健壮或不符合最佳实践,并且可能并不完全令人满意,因为它不适用于一般编辑,例如C-dbackspace,它会稍微减慢编辑器的速度,但这是一个开始。

    【讨论】:

    • 如何让它默认自动填充?我在我的 .emacs 中添加了“(setq-default fill-column 55)”和“(add-hook 'cc-mode-hook 'turn-on-auto-fill)”,然后……什么都没有。
    • 这不是钩子名称。这是c-mode-hookcc-mode.sourceforge.net/html-manual/CC-Hooks.html#CC-Hooks
    • 点击 M-q 会中断当前行,但不会添加前导 /// 或重新排列段落。不过,也许我现在正在寻求魔法。
    • 我更新了程序,这样它们就不会搞砸整个 Emacs 会话,并将效果限制在 cmets,但由于某种原因它也适用于字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多