vim 折叠(folding)

建立折叠

z的意思就是他的形状, 像一个折叠的东西, 折叠相关的命令都是z开头的, 新版本的拼写检查命令也有以z开头的。 f的意思是fold。所以zf就是折叠。 你可以在visual模式下选定, 再按zf, 可以将选定的全部折叠。 也可以zf9j, 这样可以将下面9行的内容折起来。也可以用marker, 还可以用行号:20,50, 就可以把20行到五十行折叠起来 。 总之可以用一般的定位的方法来告诉VIM你要折叠那些地方。

我觉得比较有用的是匹配括号的折叠, 移动到一个花括号{上, 用zfa}, 就可以将下面的匹配的花括号之间的内容折起来, 这样可以很方便的折起函数。 其他的折叠方法还有zf/string, 可以折叠到下一个匹配的string, 不过好像不太实用。

使用折叠

移动的时候在前面加一个z就可以在折叠的地方移动, 比如zj,就会跳到下一个折叠, zk就是上一个。 要打开的话可以zo,o是open的意思, zO打开所有的折叠。 关上用zc, c是close。 在zO之后用zc会关上所有打开的折叠。折叠可以嵌套, zr可以打开第一层的折叠,zR可以打开所有层的折叠, 与之对应的是zm和zM, 是按层关上折叠。 比如说按zm,会从最里层的层叠关起, 连续zm就会一直关到最上层的折叠。

查找到了折叠里面会将折叠打开, 处理完了之后要自己将折叠关上。

折叠选项

可以让VIM根据语法, 缩进,标记自动折叠。 用set foldmethod=foldoption 来设定。 可以查看一下foldmethod

保留折叠

要下一次打开的时候还保留折叠可以在离开的时候:mkview

,再进来的时候:loadview就可以了。 当然也可以将这两句加到vimrc里面让其自动完成。

au BufWinLeave mkview
au BufWinEnter
silent loadview

这样每次就可以看到上次的折叠了。