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

5
我将尝试编写一个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这一行。是否有一个命令可以打开当前行周围的所有代码块而不移动光标?


顺便提一下,有%foldclose!命令,你可以使用它来代替normal! zM。在某些情况下,由于{range}参数的存在,它更加有用。 - ZyX
3个回答

13

是的,有一个zv:

zv 查看光标所在行:展开足够数量的折叠,以使光标所在的行未被折叠。


我怎么会错过它呢?谢谢! - cutalion

4
如果你想展开整个缓冲区的所有折叠,可以使用zR命令。 参考链接:http://vim.wikia.com/wiki/Folding - 展开和关闭折叠 命令zr通过打开整个缓冲区中更多级别的折叠来减少折叠(光标位置无关)。使用zR打开所有折叠。

2
如果你想递归地打开当前行内的所有折叠,可以使用 zO 命令。
来自 https://vim.fandom.com/wiki/Folding。命令 zc(关闭)、zo(打开)和za(切换)作用于光标所在层级的折叠。命令 zC、zO 和 zA 的功能类似,但是作用于所有折叠层级(例如,光标所在行可能在一个打开的折叠中,而该折叠又在另一个打开的折叠中;输入 zC 将关闭光标处的所有折叠)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接