是否可以让 vim 根据折叠中的每一行是否只是注释或空白来以不同方式突出显示折叠?既然如此,又如何呢?
答案1
您无法更改折叠突出显示,因为所有折叠只有一个突出显示组(:help hl-Folded
)。您可以做的是通过自定义指示“所有评论”-折叠的性质fold-foldtext
;例如,您可以在前面添加COMMENTED:
.然后它看起来像这样:
+-- 3 lines: # some stuff here
COMMENTED: +-- 3 lines: # comment
command 2
command 3
解决方案的第二部分是确定折叠内的所有行是否实际上都是注释。这可以通过查询语法突出显示来完成(通过synID()
),这将是通用的,但也很麻烦并且可能很慢。如果您关心的是带有注释前缀的完全注释行,您可以从'comments'
针对当前文件类型并手动匹配它。 (我的ingo 库插件有一个功能如果您关心的只是一个简单的通用注释前缀#
(如 shell 脚本、Perl 等中使用的),则可以使用简单的模式匹配,如下所示:
function! CommentIndicator()
for l:lnum in range(v:foldstart, v:foldend)
if getline(l:lnum) !~# '^\s*#'
" This fold is not fully commented.
return ''
endif
endfor
return 'COMMENTED: '
endfunction
let &foldtext = 'CommentIndicator() . foldtext()'
答案2
是的。事实上,你可以使用foldmethod=expr
.
举个例子:
set foldmethod=expr foldexpr=getline(v:lnum)=~'^\s*'.&commentstring[0]
您可以在此处查看类似问题的完整答案:[1]。