1)我在我的.vimrc中有一个fold expr(参见:help fold-expr部分下的第三个例子),它将段落的折叠用空行分隔:
set foldmethod=expr
set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
我的大部分文件都是包含段落的文件(以我的.vimrc开头)
2)但是我有两个或三个文本文件,它们只是没有段落的列表,我希望能够将除匹配之外的所有内容折叠到我的搜索中。我在Vim Wikia(提示282)中找到了我想要实现的以下“简单折叠”(在提示页面的底部):
:set foldexpr=getline(v:lnum)!~@/
:nnoremap <F8> :set foldmethod=expr<CR><Bar>zM
我怎么能在我的.vimrc中和平共存?
感谢您的帮助
答案 0 :(得分:4)
选项foldexpr
是窗口的本地,所以:
:set
将建立全球和本地价值观。全局值将用作未指定本地值的后续窗口的默认值。:setlocal
将仅确定本地值。我不清楚合并两个表达式是什么意思,但当然你可以创建一个包含你想要的所有复杂逻辑的折叠函数。
根据文件(或文件类型),为foldexpr
设置不同的值非常简单。为此使用自动命令。
所以,整个事情可能就是你的.vimrc:
" Default: for all files
set foldmethod=expr
set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
nnoremap <F8> :setlocal foldmethod=expr<CR><Bar>zM
" Only for specific files
augroup NonDefaultFoldMethod
autocmd!
autocmd BufNewFile,BufRead file1.txt,file2.txt setlocal foldexpr=getline(v:lnum)!~@/
augroup end
augroup/autocmd!
成语只是为了避免重复自动命令,如果您重复使用.vimrc。这是建立自动命令时的最佳实践。