两个foldexpr可以在我的.vimrc中共存吗?

两个foldexpr可以在我的.vimrc中共存吗?,vim,folding,Vim,Folding,1) 我的.vimrc中有一个折叠表达式(参见:help fold expr部分下的第三个示例),它将由空行分隔的段落折叠起来: set foldmethod=expr set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 set foldmethod=expr 设置foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\s

1) 我的.vimrc中有一个折叠表达式(参见:help fold expr部分下的第三个示例),它将由空行分隔的段落折叠起来:

set foldmethod=expr
set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
set foldmethod=expr

设置foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\s'?'选项
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
“默认值:适用于所有文件
设置foldmethod=expr

设置foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\s'?'选项
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
“默认值:适用于所有文件
设置foldmethod=expr

设置foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\s'?'(我之前的评论似乎已被删除)它工作得很好。谢谢。(看来我之前的评论已经被删除了)它工作得很好。非常感谢。