我使用foldmethod=indent
,当我折叠代码时这样:
def cake():
#cake!
print( "cake" )
print( "for" )
print( "you" )
我看到了
def cake():
#cake!
print( "cake" ) +++ 3 lines folded
但我希望看到
def cake(): +++ 5 lines folded
有没有办法像这样折叠到第一行(def cake():
)?
答案 0 :(得分:2)
以简单的方式学习Vimscript <* em>的章节48和49使用foldmethod=expr
代替indent
来讨论如何做到这一点。基本上你需要制作一个自定义的ftplugin并在其中放置一个折叠脚本;该脚本包含用于确定不同行应具有的折叠级别的函数。
幸运的是,这两章中给出的示例代码是针对Potion语言的,与Python一样,它是对空格敏感的,所以应该很容易使它适应Python。由于Vim已经附带了一个Python ftplugin,我认为您可以将网站上描述的折叠脚本放入.vim/after/ftplugin/python
而不是.vim/ftplugin/potion
。
答案 1 :(得分:1)
我使用this tutorial解决了这个问题。
这是完成的一系列功能:
fu! Indent_level(lnum)
return indent(a:lnum) / &shiftwidth
endfunction
fu! Next_non_blank_line(lnum)
let numlines = line('$')
let current = a:lnum + 1
while current <= numlines
if getline(current) =~? '\v\S'
return current
endif
let current += 1
endwhile
return -2
endfunction
fu! Custom_fold_expr(lnum)
if getline(a:lnum) =~? '\v^\s*$'
return '-1'
endif
let this_indent = Indent_level(a:lnum)
let next_indent = Indent_level(Next_non_blank_line(a:lnum))
if next_indent == this_indent
return this_indent
elseif next_indent < this_indent
return this_indent
elseif next_indent > this_indent
return '>' . next_indent
endif
endf
set foldexpr=Custom_fold_expr(v:lnum)
foldmethod=expr
请不要编辑此帖子中“结束”标记的缩进,将其放入vimrc
后看起来很漂亮。