我使用这样的东西:1,40 fo
但我认为这不是最有效的方法。
你的是啥呢?
我使用foldmethod=marker
并拥有要输入的映射<!-- {{{ -->
以及<!-- }}} -->
我希望折叠开始和结束的位置。我将开始标记放在带有开始块标记的行上,例如:
<div id="topmenu"> <!-- {{{ -->
所以当它折叠时,我会立即看到折叠包含的内容,而无需添加额外的注释。
对于 CSS,它更容易,我只使用它foldmarker={,}
,所有定义都会自动折叠,向我展示一个非常清晰的所有类、标签和 ID 列表,我可以在需要时打开它们。实际上,我所有的 CSS 文件最后都有这一行:
/* vim: set fdm=marker fmr={,}: */
您还可以直观地选择要折叠的区域,zf
如果您愿意,可以按一下。
我在 vimrc 中用这个在缩进和标记之间切换..
let g:FoldMethod = 0
map <leader>ff :call ToggleFold()<cr>
fun! ToggleFold()
if g:FoldMethod == 0
exe 'set foldmethod=indent'
let g:FoldMethod = 1
else
exe 'set foldmethod=marker'
let g:FoldMethod = 0
endif
endfun
缩进适用于大多数美化的 html,但我将标记用于大型声明性目录样式折叠文档。根据谁编写文件,一个会比另一个更好,因此您需要快速访问两者。
html 的 vim 的最佳折叠方法:使用 haml 代替。css 的最佳选择:使用 sass 代替。
我其实是认真的。它们使它更加紧凑。
我foldmethod=ignore
几乎完全用过。但是,我希望忽略行默认为上行或下行的较高折叠级别,而不是较低的折叠级别,这启发了以下内容:
" Default foldmethod
" Similar to fdm=indent, but lets blank and comment lines default high.
set fen fdm=expr fdi=
set foldexpr=EswaldFoldLevel(v:lnum)
function! EswaldFoldLevel(lnum)
let ignored = '^\s*\([#/*]\|$\)'
if getline(a:lnum) !~ ignored
" In the general case, just use the indent level.
" It would be nice if it didn't skip several levels...
return indent(a:lnum) / &sw
endif
let previndent = 0
let prevnum = a:lnum - 1
while prevnum > 0
if getline(prevnum) =~ ignored
let prevnum = prevnum - 1
else
let previndent = indent(prevnum) / &sw
break
endif
endwhile
let nextindent = 0
let maxline = line('$')
let nextnum = a:lnum + 1
while nextnum <= maxline
if getline(nextnum) =~ ignored
let nextnum = nextnum + 1
else
let nextindent = indent(nextnum) / &sw
break
endif
endwhile
return max([previndent, nextindent])
endfunction
(对不起语法高亮...)
我将其用作自定义插件,让单个文件类型覆盖它。例如,Python 不想查看前面的行,而只想查看后面的行。