我已经foldmethod=indent
设置了我的~/.vimrc
,一般来说这对我有用,我想保留它。
但是,我有一些我经常编辑的文件(并且在我的专属控制之下),我想在其中添加一个基于标记的系统,特别是当我打开文件时,我会看到一个很大的部分很少看(已经由缩进“分隔”)是预折叠的。看起来foldmethod=marker
允许我这样做(如果需要,我不介意文件中的奇怪注释以指示这些“预折叠”),但我仍然想要foldmethod=indent
设置以便我可以使用zc
,zo
等等通过缩进折叠或展开部分。据我所知,我不能将 foldmethod 设置为多个值。
有没有另一种方法可以实现这一点(理想情况下使用嵌入在文件本身中的东西)?
Ing*_*kat 12
每个窗口都可以有自己的本地值'foldmethod'
;您设置的~/.vimrc
只是全局默认值。有多种方法可以为特定缓冲区设置不同的本地值:
:setlocal foldmethod=marker
:autocmd FileType java setlocal foldmethod=marker
或 in ~/.vim/after/ftplugin/java.vim
):autocmd BufRead /path/to/file setlocal foldmethod=marker
/* vim: set fdm=manual : */
Run Code Online (Sandbox Code Playgroud)
单个窗口内仍然只能有一种折叠方法。如果您想采用不同的策略,则必须选择更灵活的方法(例如expr
),并在其中重新实现“其他”方法(例如,通过'foldexpr'
考虑缩进)。或者您对同一个缓冲区使用两个窗口拆分,并为每个拆分设置不同的折叠方法。
由于这可能不是您想听到的,您可以将一些内容与:autocmd CursorMoved
根据当前行切换折叠方法的hack 一起使用:
" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')
Run Code Online (Sandbox Code Playgroud)