【问题标题】:Folding of Scala imports in Vim在 Vim 中折叠 Scala 导入
【发布时间】:2016-04-06 10:02:07
【问题描述】:

我试图让我的 Vim 设置在我打开 Scala 文件时自动折叠导入语句。这类似于 Intellij 在打开文件时所做的事情。我目前在wiki.vimrc 文件中有以下几行。

set foldmethod=syntax
set foldenable
syn region foldImports start=/(^\s*^import\) .\+/ end=/^\s*$/ transparent fold keepend

但是,当我打开 .scala 文件时,它不会折叠导入,而是折叠对象的主体。我也在使用vim-scala plugin。感谢您的帮助!

【问题讨论】:

    标签: scala vim folding


    【解决方案1】:

    你已经很接近让它发挥作用了。我们应该考虑一些有趣的因素。

    • foldmethod 设置为syntax(顺便说一句,在学习 Vimscript the Hardway 中没有记录。所以:help foldmethod 是解决这个问题的关键)

    语法 折叠语法

    折叠由具有“折叠”参数的语法项定义。 |:syn折叠|

    折叠级别由嵌套折叠定义。折叠的嵌套是 受限于“foldnestmax”。

    注意指定正确的语法同步。如果不这样做 对,折叠可能与显示的突出显示不同。这是 在使用匹配多行的模式时尤其重要。 如有疑问,请尝试使用暴力同步:

        :syn sync fromstart
    

    主要需要注意的是sync fromstart,如果您有正则表达式可以匹配整个文件并且只想捕获标题,这是一个有用的帮助。在您的情况下,您应该可以忽略这一点,但只是需要注意一些事情。

    • 自上而下的正则表达式扫描

    由于导入块是相当可预测的,我们可以将startend 简化为如下所示:

    syn region foldImports start="import" end=/import.*\n^$/ fold keepend
    

    由于region 只是在寻找一些字符串来开始匹配,我们可以使用"import"(或/import/),然后对于最终值,我们想使用更精心设计的语句。关键是我们希望结尾是导入的 last 行,后面有一个空行 (/import.*\n^$/)

    希望这对您有用(我不使用 scala,因此您可能需要根据需要稍微调整正则表达式)

    【讨论】:

    • 值得注意的是,如果您在.vimrc 中关闭选项syntax on,上述代码将起作用。但是,如果它在上面,它将无法正确折叠。
    • 以上说法不正确。问题在于一个名为vim-autoclose 的插件。如果你从 Vim 运行时删除它,折叠会按预期工作。
    猜你喜欢
    • 2011-04-09
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2010-09-12
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多