在Vim中,当文本换行时自动续写Haskell注释中的连字符。

5

我正在使用Vim编辑我的Haskell源文件,并将'textwidth'选项设置为自动换行超长行。因此,我~/.vimrc看起来像这样:

set tw=78

现在,当我写的一行代码超过78个字符时,最后一个单词会自动移到下一行。这对于在源文件中编写注释非常有用。好处是,在注释中,如果最后一行太长并自动换行,每行开头的注释符号会自动插入到每行开头。但是,这仅适用于C风格的注释,而不适用于Haskell前导破折号。
例如,在JS文件中:
/**
 * This is a very long comment which is longer than 78 chars, yeah really 
 * longer than 78 chars...

会被很好地包装,除此之外还有

// This is a very long comment which is longer than 78 chars, yeah really 
// longer than 78 chars...

现在,如果Haskell注释中也有类似的情况,那就太好了,比如:

------------------------------------------------------------------------------
-- | This is a very long module description which is longer than 78 chars,
--   yeah really longer than 78 chars...

有人知道这是否可行?这个行为在哪里指定?:set formatexpr或:set formatoptions能帮助我吗?

谢谢您的帮助!

=<< Johannes

/编辑:顺便说一下,我使用vim 7.3.x


1
这对我来说是自动发生的。你可能需要检查一下是否有什么在覆盖你的选项。确保像@daniel kullmann所说的那样,在'formatoptions'中有c标志。Vim用于识别注释的机制在用户手册的第30.6节中描述,并且在“格式化注释”主题下也有更深入的介绍。 - sidyll
谢谢你的RTFM提示。:) 那几乎解决了我的问题。正如手册所描述的,可以设置自定义注释。所以我将以下内容添加到我的haskell.vim语法文件中:`set comments=s1:--\ \|,m:--,e:--`但是这似乎只适用于C风格的注释,因为Vim太“聪明”了,在注释的em部分之前插入了一个空格。有没有办法配置这个呢? - JHannes
1
Vim 最近(在过去的一两年内)才开始附带 Haskell 的语法文件;也许你应该升级一下。 - Daniel Wagner
2个回答

3
你应该检查formatoptions设置;对于我来说,它的值为croqlc表示注释在下一行继续。请参阅:help 'formatoptions'
:set formatoptions=croql

1
谢谢你的回答,:set formatoptions? 显示 tcq。将其设置为 croql 可能是建议的,但它并不能解决我的问题,因为 Vim 无法识别注释本身(请参见我上面的评论)。不管怎样,谢谢! :D - JHannes

2

我并不是一个vim使用者(emacs中的haskell-mode通常会优雅地适应特定的缩进风格),但以下内容似乎在我的快速测试中有效:

:set comments=:--\ ,sr:{-,m:\ ,ex:-}

这并不特别处理-- |,但我实际上从未见过Haskell中像这样缩进的内容:

-- | Bla Bla
--   continues right under the Bla

据我所知,对于注释来说更常见的做法是像这样缩进:

-- | Usually a one-line short description.
--
-- Continued like this, with a longer description.

或者,这个变体:
-- | Bla bla slightly longer than one line description
-- bla bla.
--
-- Bla bla additional details.

如果您想要一个长时间运行的文本体来描述您的声明,您可以将其作为多行注释开始:

{-|
The definition of 'myfunc', Act I, Chapter 1. Bla bla bla bla
bla bla...
-}

我总是在我的代码中使用你列出的 Haddock 注释的第一种风格... 我觉得它更加简洁 :) - ivanm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接