Как обнаружить буфер Vim содержит складку? - PullRequest
1 голос
/ 29 марта 2012

ищите совет, как программно определить, содержит ли текущий буфер Vim хотя бы одну определенную кратность?Независимо от того, открыт ли или закрыт фолд.

Попытка вызова только mkview , если в текущем буфере определена фолд:

autocmd BufWrite ?* if fold_defined() | mkview | endif

function fold_defined()
  ???
endfunction

Ответы [ 3 ]

2 голосов
/ 30 марта 2012
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
0 голосов
/ 30 марта 2012
function! FoldDefined()
   return len(filter(range(1, line('$')), 'foldlevel(v:val)>1'))>0
endfunction
0 голосов
/ 30 марта 2012

На основании совета Перреала я написал одно из возможных решений моего вопроса:

" 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
...