如何为文学 Haskell 编程设置 Vim 的缩进?

5
当我在一个常规 *.hs 文件中打开 autoindent 后,按下 Enter 后,新行会按预期缩进。然而,在代码行以 >(也称为“鸟迹”)开头的 literate Haskell *.lhs 文件中,这种情况不起作用。光标总是定位在第一列。
如何设置 vim,以便当我在 *.lhs 文件中的代码块内(并且已开启autoindent),按下 Enter 时在新行上创建一个 bird track 并适当缩进? 更新: 举个例子,假设我有以下内容:
> myfn x | x <= 0     = 0
>        | x == 1     = 1

这里的 ���表光标的位置(希望您可以看到该Unicode字符)。如果我按下 Enter 键,就会得到以下结果:

> myfn x | x <= 0     = 0
>        | x == 1     = 1

而我希望

> myfn x | x <= 0     = 0
>        | x == 1     = 1
>        ▌

请展示你手头的和你想要的东西,以便我们这些不太识字的人知道什么是“鸟迹”。 - romainl
1
@romainl 已更新,附带示例。 - Petr
今天我学到了一个新的编程词汇。 - romainl
1个回答

7
这应该很容易通过使用实现。
:set formatoptions+=ro

使用:se fo+=ro来简化。在'formatoptions'中,使用ro时,Vim会尝试在注释内(即Literate Haskell中的非注释部分)新建一行时插入带缩进的注释"leader"。要自动设置此选项,请在vimrc中设置一个autocommand。
autocmd FileType lhaskell setlocal formatoptions+=ro

提示:当您不需要自动插入的行首时,可以使用CTRL-U


很遗憾,这个不起作用。显然,以 > 开头的代码块不被视为注释,因此 ro 不适用于它们(我已经打开了这些标志,我有 tcroql)。 - Petr
@PetrPudlák 哦,它确实有效!检查 lhaskell 文件类型是否被正确识别 :set ft? - glts
@PetrPudlák 我想你可能有一个干扰事情的插件。无论如何,您可以尝试使用“:set comments + =:>”使“>”成为注释标记。 - glts
你说得对,我在另一台机器上尝试了一下,它可以工作。所以我必须浏览插件并找出哪一个是引起问题的原因。 - Petr
这是由 haskellmode 插件引起的。卸载它后,它就可以正常工作了。 - Petr

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