4

我正在尝试编写一个 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线。是否有命令在不移动光标的情况下打开当前行周围的所有折叠?

4

3 回答 3

12

是的,有zv

zv 查看光标线:打开刚好足够的折叠,使光标所在的行不折叠。

于 2012-12-21T13:25:49.013 回答
3

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

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

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

于 2018-11-17T14:04:39.210 回答
0

如果您想在当前行内递归地打开所有折叠,zO 有效

来自https://vim.fandom.com/wiki/Folding 命令 zc(关闭)、zo(打开)和 za(切换)在光标处的一级折叠上操作。命令 zC、zO 和 zA 相似,但在所有折叠级别上操作(例如,光标线可能在一个打开的折叠中,它在另一个打开的折叠内;键入 zC 将关闭光标处的所有折叠)。

于 2022-02-10T05:27:00.753 回答