我已经foldmethod=indent
在我的中设置了~/.vimrc
,并且通常这对我有用并且我想保留它。
但是,我有一些经常编辑的文件(并且这些文件完全由我控制),我想在其中添加基于标记的系统,特别是当我打开文件时,我很少查看的一大块(已经通过缩进“分隔”)会被预折叠。它看起来foldmethod=marker
允许我这样做(如果需要,我不介意在文件中添加一些奇怪的注释来指示这些“预折叠”),但我仍然希望foldmethod=indent
设置,以便我可以使用zc
、zo
等按缩进折叠或展开部分。据我所知,我无法将 foldmethod 设置为多个值。
还有其他方法可以实现这一点吗(最好使用文件本身中嵌入的东西)?
答案1
每个窗户可以有自己的本地值'foldmethod'
;您设置的~/.vimrc
只是全局默认值。有多种方法可以为特定缓冲:
- 手动
:setlocal foldmethod=marker
- 对于特定文件类型(例如 Java 文件):(
:autocmd FileType java setlocal foldmethod=marker
或在~/.vim/after/ftplugin/java.vim
) - 对于特定文件:
:autocmd BufRead /path/to/file setlocal foldmethod=marker
- 在文件本身中通过模式行(因为无论如何你都必须添加标记,所以我更喜欢这样):
/* vim: set fdm=manual : */
仍然只能有一种折叠方法里面单个窗口。如果您想采用不同的策略,您必须选择一种更灵活的方法(例如expr
),并在其中重新实现“其他”方法(例如,通过考虑'foldexpr'
缩进)。或者,您可以对同一缓冲区使用两个窗口拆分,并为每个拆分设置不同的折叠方法。
由于这可能不是您想听到的,因此您可以将某些内容与:autocmd CursorMoved
根据当前行切换折叠方法的内容结合起来:
" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')