码迷,mamicode.com
首页 > 系统相关 > 详细

关于vim的折叠

时间:2018-11-30 13:43:02      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:diff   嵌套   二层   更改   匹配   中间   syn   code   内容   

参考: http://www.cnblogs.com/fakis/archive/2011/04/14/2016213.html 和 这篇文章: https://blog.csdn.net/bendanban/article/details/7743530
这篇文章的内容全是 上面 两篇文章中的内容!

发现可以使用命令模式:开始行号,结束行号folder命令就可以折叠了,

同样多行缩进可以使用:110,120>来将110行到120行缩进

VIM设置代码折叠

今天看了一下别人写的程序的源代码,发现是用vim写的,代码中有趣是用vim来折叠代码,一开始我以为是用插件的,后来上网查了查,得出以下使用方面的技巧。

  1. 折叠方式

可用选项来设定折叠方式:

可在Vim 配置文件中设置 set fdm=XXX
可直接在文件中使用注释调用vim命令 /* vim: set fdm=XXX: */

有6种方法来选定折叠:
manual 手工定义折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠

indent 更多的缩进表示更高级别的折叠
marker 对文中的标志折叠

注意,每一种折叠方式不兼容,如不能既用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。

使用时,用 set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。

  1. 折叠命令

选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。


要注意, indent和 marker创建 折叠的方式和方法 命令 是不同的! 并不都是 zc zC zo zO , 对于 marker方式的折叠, 创建方法的关键字是 zf, 这里的zf相当于 一个 命令关键字, 类似 于 dd, yy等的, 所以 必须 要结合 行数 的 范围 来 使用, 单单的使用 zf 其实 只会 折叠 紧挨着 的 两行!

要理解 折叠范围 的 概念: 对于 indent来说, 最高一级的内容不会被折叠! 最高一级的内容, 相当于 折叠包裹上的标识文字, 相当于 折叠 文章 的 文章标题一样, 不然 最高一级的内容都折叠了, 那 当前折叠里面究竟是什么 也就不会知道了, 所以 : 折叠范围总是 从 第二层 开始的! 那么相应的命令 zc, zo, 跳转命令 [z, ]z等都是 针对 这个折叠范围 而言的, 不是 针对 最高一级来说的.

同样的, 对于 marker方式的 折叠, 最高一级的 内容 是指 括号 所在的 行 比如 {, (, [, < 等 和它们相对应的 结尾行 , 折叠范围 就是 这些 括号 中 包含的内容, 但是, 不包括 括号 所在的 行!!

在可折叠处(大括号中间):
zc 折叠
zC 对所在范围内()所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。

当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动

我们可以使用下面的命令来创建和删除折叠:

zf 创建折叠,比如在marker方式下: /// 必须跟 范围 !!!
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。

zd 删除 (delete) 在光标下的折叠。
仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效。

zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效。

zE 除去 (Eliminate) 窗口里“所有”的折叠。
仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效。

关于vim的折叠

标签:diff   嵌套   二层   更改   匹配   中间   syn   code   内容   

原文地址:https://www.cnblogs.com/bkylee/p/10043318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!