【发布时间】:2012-03-29 17:08:41
【问题描述】:
正在寻找如何以编程方式检测当前 Vim 的缓冲区是否包含至少一个定义的折叠的建议?无论折叠是打开还是关闭。
如果当前缓冲区中定义了折叠,则尝试调用mkview仅:
autocmd BufWrite ?* if fold_defined() | mkview | endif
function fold_defined()
???
endfunction
【问题讨论】:
正在寻找如何以编程方式检测当前 Vim 的缓冲区是否包含至少一个定义的折叠的建议?无论折叠是打开还是关闭。
如果当前缓冲区中定义了折叠,则尝试调用mkview仅:
autocmd BufWrite ?* if fold_defined() | mkview | endif
function fold_defined()
???
endfunction
【问题讨论】:
function! HasFold()
let v = winsaveview()
let fold = 0
for mv in ['zj', 'zk']
exe 'keepj norm!' mv
if foldlevel('.') > 0
let fold = 1
break
endif
endfor
call winrestview(v)
return fold
endfunction
【讨论】:
foldcolumn。当没有任何折叠时,我很难找到一个不会在我的终端发出哔哔声的功能。测试表明这也会发出哔哔声。
基于perreal's advice,我确实为我的问题写了一个可能的解决方案:
" Detect presence of fold definition in the current buffer
function FoldDefined()
let result = 0
let save_cursor = getpos('.')
call cursor(1,1)
let scanline = line('.')
let lastline = line('$')
while scanline <= lastline
if foldlevel(scanline) > 0
let result = 1
break
endif
let scanline = scanline + 1
endwhile
call setpos('.', save_cursor)
return result
endfunction
【讨论】:
function! FoldDefined()
return len(filter(range(1, line('$')), 'foldlevel(v:val)>1'))>0
endfunction
【讨论】:
>1),并报告在这种情况下没有定义折叠,这是不正确的。