Vim foldexpr 匹配 pattern1 或 pattern2?
Vim foldexpr matching pattern1 OR pattern2?
我希望 vim 根据 header 行为我的降价文件创建折叠
对于低于特定 header 的所有行将被折叠。例如:
# 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 不对单行进行折叠,
我没问题)
我试过为此想出不同的正则表达式...我可以匹配
所有 non-header 行 除了 空行:
autocmd FileType markdown setlocal foldexpr=getline(v:lnum)=~'^[^#]'
所以我尝试添加第二个模式来捕获
^[^#]\|^\s*$
变体的空行(确实匹配所有内容,但
non-header 行,当我在 /
) 的简单搜索中使用它时,但没有折叠
产生了,我不知道为什么(我尝试了不同数量的转义斜杠
但无济于事):
" 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 根据 header 行为我的降价文件创建折叠 对于低于特定 header 的所有行将被折叠。例如:
# 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 不对单行进行折叠, 我没问题)
我试过为此想出不同的正则表达式...我可以匹配 所有 non-header 行 除了 空行:
autocmd FileType markdown setlocal foldexpr=getline(v:lnum)=~'^[^#]'
所以我尝试添加第二个模式来捕获
^[^#]\|^\s*$
变体的空行(确实匹配所有内容,但
non-header 行,当我在 /
) 的简单搜索中使用它时,但没有折叠
产生了,我不知道为什么(我尝试了不同数量的转义斜杠
但无济于事):
" 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*$'
。如果您有多个“非常神奇”的角色(例如 |(){}+
) 这将非常有帮助...但是对于单个竖线,它唯一可能做的就是帮助提高可读性。)