sublime查看项目代码多少行
---------------------sublime 0.右击要查找的文件; 1.勾选正则( .* ); 3.输入正则表达式 ^[ \t]*[^ \t\n\r]+.*$
0:搜索 \n
是不是感觉有点麻烦?还要运算,这种方法可不是我们想要的!不过别急,还是“在文件中查找”,勾选“正则表达式”选项,我们换正则表达式。要达到刚刚的效果,我们可以很简单地搜索 ^ 或者$ 。正则表达式中, ^ 表示行首, $ 表示行尾,所以这样的查询就能够查出一共有多少个行首或行尾,也就是代码行数。
1:搜索 ^
2:搜索 $
为了更严谨,也为了下文的进一步探索,这里我们搜索 ^.*$ ,表示搜索条件为行首与行尾之间包含任意个任意字符(非换行符)。 . 表示除换行符外的所有字符, .* 表示0到任意多个 . 。
0:搜索 ^.*$
上面的方法可以很迅速地得到代码行数,不过遗憾的是统计结果把空行(仅包含空格和制表符的行)也统计进去了,然而很多时候我们并不想把这些文本也给算进代码量里去,怎么办呢?别急,我们只要对正则表达式做一点点修改。我的思路是,只需要找出一个不是空格或制表符的字符即可,于是我写出了这个正则表达式 ^[ \t]*[^ \t\n\r]+.*$ ,它表示先忽略一行前面的连续空格和制表符,然后寻找是否有一个字符不为空格、制表符、换行符和回车符,如果有则表明这行不为空行。到这里为止,我们可以写出 ^[ \t]*[^ \t\n\r]+ ,这个正则也是可以工作的,不过我习惯把一行写完整。
也许有人会写出类似于 ^\s*\S+.*$ 或者 ^:b*[^:b]+.*$ 这样的正则,不过经我测试,或多或少存在兼容性问题,主要存在两个问题:
1. \s 可能包含 \r ,那么 ^\s* 匹配空行的时候可能会穿透到后面的文本行,直到某一行不为空,这种方法可能无法排除文本内部的空行;
2. :b 这样的写法并不是所有的正则解释器都能识别,不建议使用。Visual Studio 2012也已经抛弃这种写法,改为 [ \t] 。
图0:搜索 ^[ \t]*[^ \t\n\r]+.*$
-----------------------------
在实际项目中,我们或许认为注释行不应成为生产量,应从统计数据中排除出去。似乎这个问题棘手得多。不过别担心,只要善于利用正则表达式,这个问题也能轻松解决。
我们首先要能够对注释行有一个认识。很多程序设计语言中,注释行都会用“/”或者“#”等字符开头。我们假设项目中的注释行都是以“/”或“#”开头的(请读者考虑自己项目的特点自行修改),那么我们要查找的是一行中第一个非空字符不是“/”和“#”的行。跟上一节类似地,我们可以写出^[ \t]*[^ \t\n\r/#]+.*$ 。同样,为了更好的兼容性,这里我避免使用 \s 和 :b 。
图0:搜索 ^[ \t]*?[^ \t\n\r/#]+?.*$ ,此处的 ? 不是必需的
本文旨在介绍一种思路,用最简单的工具实现看似复杂的功能,省力又高效。也许你还有更好更巧的点子,欢迎与我分享。