gpt4 book ai didi

Vim foldexpr 匹配模式 1 还是模式 2?

转载 作者:行者123 更新时间:2023-12-04 07:33:12 24 4
gpt4 key购买 nike

我希望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*$'

最佳答案

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

foldexpr=getline(v:lnum)=~'^[^#]\\\|^\\s*$'
您的正则表达式字符串最终需要同时包含反斜杠和竖线。这两个字符都需要在表达式中进行转义。所以你最终得到 \\\| ...或总共 3 个反斜杠。
source / additional reading
(旁注:您也可以使用 \\v 切换到“非常神奇”模式,这将导致 '\\v^[^#]\|^\\s*$' 。如果您有多个“非常神奇”字符(例如 |(){}+ ),这将非常有用...但是对于单个垂直条,它唯一可能做的就是提高可读性。)

关于Vim foldexpr 匹配模式 1 还是模式 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67859209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com