我通常设置 foldclose=all,所以当我滚动代码时,折叠会自动打开和关闭。但有时我也喜欢使用 和 快速翻阅文本。问题是这通常会跳出我当前正在查看的折叠并在我有机会看到最后一点之前关闭它。我所追求的是一种翻阅文本的方法,如果我在一个开放的折叠中,如果下一页会让我离开它,就在折叠的末尾停下来。如果光标位置已经在折叠的最后一行,则下一个分页操作实际上将前进一页。我猜这需要一个 vimscript 函数,所以只想看看是否有人做过类似的事情。

最佳答案

你可以从这个开始:

function! FoldawareCD()
  let there = line('.') + &scroll
  let nextl = line('.') + 1
  if foldlevel('.') > 0 && foldclosed('.') == -1 && (foldclosed(there) != -1 || foldlevel(there) == 0) && (foldclosed(nextl) == -1 && foldlevel(nextl) > 0)
        call feedkeys("]z")
  else
        call feedkeys("^D")
  endif
endfunction


noremap <F1> :call FoldawareCD()<CR>
If 说明
  • foldlevel('.') > 0 && foldclosed('.') == -1
    当我们处于开放折叠状态时为真
  • (foldclosed(there) != -1 || foldlevel(there) == 0)
    当 ^D 落在闭合折叠或非折叠上时为真
  • (foldclosed(nextl) == -1 && foldlevel(nextl) > 0)
    当下一行在我们的折叠中时为真(所以我们不在打开折叠的最后一行)
  • 关于vim - 如何在 Vim 中更好地翻页?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7019785/

    10-11 17:04