【问题标题】:vim syntax folding (unintentionally) creates nested foldsvim 语法折叠(无意)创建嵌套折叠
【发布时间】:2013-02-11 09:08:23
【问题描述】:

我正在尝试将 vim 折叠到现有的喷泉.io 标记语言语法文件中。现有的语法文件在这里:http://www.vim.org/scripts/script.php?script_id=3880

但无论我做什么,我的折叠区域都不会在我期望的地方结束。当我在搜索中测试正则表达式时,它们可以完美地工作。但是当在语法区域中使用时,它们会创建一系列嵌套折叠。折叠从适当的行开始,然后在现有折叠内创建下一个折叠。本质上,我尝试执行以下操作,以便折叠从任何以 INT 或 EXT 开头的行开始,并在一行以 TO: 结尾或以 >:

开头的行结束后结束
syn region fountainScene start="^\(INT\|EXT\)" end="^\(\(\L\)* TO:\|\s*>\(.*\)\)$" fold transparent contains=fountainCharacter,fountainDialogue,fountainParenthetical,fountainSceneHeading,fountainTransition

更奇怪的是,如果我在 'end' 参数上使用 \ze 来获取匹配行之前的行,它会按您的预期工作。它在匹配上方的线上停止折叠,将最后一行留在折叠之外。以下内容将停止在“CUT TO:”行上方折叠

\n\ze\(\L\)* TO:\n

为了排除故障,我基本上是从头开始重建语法文件。这是到目前为止文件中的内容(减去 hi 命令)我已经广泛修改了正则表达式以防止它们相互重叠。原来的正则表达式有这个问题,我认为这可能是原因:

syn match fountainCharacter "^\(\s\)*\n\zs\(INT\|EXT\)\@!\(\L\)*[^:]$"
syn region fountainDialogue matchgroup=fountainCharacter start="^\(\s\)*\n\zs\(INT\|EXT\)\@!\(\L\)*[^:]$" end="^\s*$" contains=fountainCharacter,fountainParenthetical
syn match fountainParenthetical "^\s*\((.*)\)$"
syn region fountainSceneHeading start="^\(INT\|EXT\)" end="$" contains=fountainSceneNumber,fountainBoneyard,fountainNotes
syn match fountainTransition "^\(\L\)* TO:$" 
syn region fountainScene start="^\(INT\|EXT\)" end="\n\ze\(\L\)* TO:\n" fold transparent contains=fountainCharacter,fountainDialogue,fountainParenthetical,fountainSceneHeading

感谢您提供的任何帮助,如果我有任何不清楚的地方,请告诉我。我正在使用 MacVim 版本 7.3.646 自定义编译并支持 python。

【问题讨论】:

    标签: regex vim folding vim-syntax-highlighting


    【解决方案1】:

    我终于想通了。我的元素之一是超出了“结束”的论点。我必须在我的同步区域中使用“keeppend”参数。

    这一行解决了所有问题:

    syn region fountainScene start="^\s*\(\.\|INT\. \|EXT\. \|INT\./EXT\. \|INT/EXT\. \|INT \|EXT \|INT/EXT \|I/E \|int\. \|ext\. \|int\./ext\. \|int/ext\. \|int \|ext \|int/ext \|i/e \)" end="^\(\(\L\)* TO:\|\s*>[^<]*\)$" fold transparent keepend
    

    更多详情见:he keepend

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-23
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 2010-10-22
      • 1970-01-01
      • 2015-02-08
      相关资源
      最近更新 更多