增强 Vim 的语法折叠

  1. 折叠多行注释
/*
 * This is file description.
 * @author 闲耘™ (@hotoo xianyun[AT]xianyun.org)
 */
1
2
3
4

折叠为:

/* This is file description. ... */
1
  1. 折叠单行注释
// Line Comment 1.
// Line Comment 2.
// Line Comment 3.
1
2
3

折叠为:

// Line Comments 1. ...
1
  1. 折叠导入外部定义
@import java.lang.*;
@import java.io.*;
@import java.net.*;
@import java.util.*;
1
2
3
4

折叠为:

@import java.lang.*; ...
1
#include <iostream>
#include "xxx.h"
#include "yyy.h"
1
2
3

折叠为:

#include <iostream> ...
1
  1. 折叠作用域
window.setTimeout(function(){
    alert(0);
}, 1000);
1
2
3

折叠为:

window.setTimeout(function(){...}, 1000);
1

这属于语法折叠部分。

  1. 折叠标记语言
<div id="demo" onclick="alert(0)">
    some thing.
</div>
1
2
3

折叠为:

<div id="demo">...</div>
1
<link type="text/css" rel="stylesheet" href="xx.css" />
<link type="text/css" rel="stylesheet" href="yy.css" />
<link type="text/css" rel="stylesheet" href="zz.css" />
1
2
3

折叠为:

<link type="text/css" rel="stylesheet" href="xx.css" /> ...
1
<script type="text/javascript" src="xx.js"></script>
<script type="text/javascript" src="yy.js"></script>
<script type="text/javascript" src="zz.js"></script>
1
2
3

折叠为:

<script type="text/javascript" src="xx.js"></script> ...


<script type="text/javascript">/*<![CDATA[*/
alert(0);
/*]]>*/</script>

1
2
3
4
5
6
7
8

折叠为:

<script type="text/javascript">...</script>


1
2
3
4

以上是我目前想到的折叠方式,欢迎补充。

这里推荐一个 增强的 Javascript 语法文件 , 有非常多值得借鉴的地方。

遗憾:折叠文本(foldtext)没有状态栏(statusline)的居左、居右概念(以等号[=]分隔), 比如想将在左侧放置折叠上下文文本,右侧放置被折叠的行数:

if(true){...) ----------------------------------[3 lines]

1
2
3

目前只能通过计算 Vim 窗口宽度和折叠文本的长度来模拟。

这个折叠方法我已经在C,C++,Java,Javascript,CSS上实现,主要跟语法(syntax) 文件和折叠文本(foldtext) 有关。

另外我觉得被折叠的行应该和注释一样低调一点(desert主题使用金色的文本前景色)。

@source

@source

Help
[count]gg 跳转到第 [count] 行,默认第 1 行。
[count]G 跳转到第 [count] 行,默认最后一行。
[count]j 向下跳转 [count] 行,默认跳转一行。
[count]k 向上跳转 [count] 行,默认跳转一行。
/ 开始搜索。按 <Esc> 退出。
gh 跳转到首页。
gb 跳转到博客首页。
gw 跳转到 Wiki 首页。
gt 跳转到我的 Twitter Profile 页。
gp 跳转到我的 Github Profile 页。
? 打开帮助。按 <Esc> 退出。