VIM:打开当前行周围的所有折叠

时间:2012-12-21 13:08:00

标签: vim

我正在尝试编写一个vim函数,它会折叠除当前行/块/方法之外的所有内容。

以下是我已写的内容:

set foldemethod=indent
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" FOCUS ON BLOCK OF CODE (fold everything else)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! FocusOnBock()
  :normal! zM                 " close all folds
  :normal! zozozozozozozozozo " I hope enough to open all nested folds :)
  :normal! zz                 " center the current line
endfunction
:command! FocusOnBock :call FocusOnBock()
:map <leader>F :FocusOnBock<CR>

在这里,我关闭所有折叠,然后打开多个折叠(通常存在于良好的代码中),然后我将当前行居中。顺便说一句,你可以看到它在行动 - http://ascii.io/a/1771
我不喜欢:norm! zozozozozozozozozo行。是否有命令在不移动光标的情况下打开当前行周围的所有折叠?

2 个答案:

答案 0 :(得分:9)

是的,有:zv

  

zv查看光标线:打开足够的折叠以使线条进入         光标所在的位置没有折叠。

答案 1 :(得分:1)

如果要在整个缓冲区中打开所有折页,可以使用zR

http://vim.wikia.com/wiki/Folding-打开和关闭折叠

  

命令zr通过在整个缓冲区中再打开一层折叠来减少折叠(光标位置无关)。使用zR打开所有折叠。