【问题标题】:Vim foldexpr matching pattern1 OR pattern2?Vim foldexpr 匹配模式 1 或模式 2?
【发布时间】:2021-06-06 12:37:38
【问题描述】:

我希望 vim 根据标题行为我的 markdown 文件创建折叠,例如 特定标题下方的所有行都将被折叠。例如:

# Header
some lines of
text here

## Sub-header
some more lines of
text here # and a comment for some reason
    # and an indented comment for good measure

# Another header
A new set of lines with a blank line(!)

for this header

## Another sub-header
yet more text

应该这样折叠:

# Header
+-- 2 lines: - some lines of -------------------

## Sub-header
+-- 3 lines: - some more lines of --------------

# Another header
+-- 3 lines: - A new set of lines --------------

## Another sub-header
yet more text

(我不知道单行折叠会发生什么,所以我很满意 无论 vim 的默认值是什么 - 即如果 vim 不为单行折叠, 这对我来说很好)

我已经尝试为此想出不同的正则表达式...我可以匹配 所有非标题行除了空行:

autocmd FileType markdown setlocal foldexpr=getline(v:lnum)=~'^[^#]'

所以我尝试添加第二个模式来捕获 带有^[^#]\|^\s*$ 变体的空白行(它确实匹配除了 当我使用 / 进行简单搜索时使用非标题行但随后没有折叠 产生了,我不知道为什么(我尝试了不同数量的转义斜线 但无济于事):

" none of these work
autocmd FileType markdown setlocal foldexpr=getline(v:lnum)=~'^[^#]\|^\s*$'
autocmd FileType markdown setlocal foldexpr=getline(v:lnum)=~'^[^#]\\|^\\s*$'

【问题讨论】:

    标签: vim


    【解决方案1】:

    你快到了...你需要 3 个反斜杠:

    foldexpr=getline(v:lnum)=~'^[^#]\\\|^\\s*$'
    

    您的正则表达式字符串最终需要同时包含反斜杠和竖线。这两个字符都需要在表达式中进行转义。所以你最终会得到 \\\|...或总共 3 个反斜杠。

    source / additional reading

    (旁注:您还可以使用\\v 切换到“非常神奇”模式,这将导致'\\v^[^#]\|^\\s*$'。如果您有多个“非常神奇”字符(例如|(){}+),这将非常有帮助...但是使用单个垂直条,它唯一可能做的就是提高可读性。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多