今天太兴奋了,学了一招相当实用,极大简化代码优化的绝招。
1. 每行代码开头用tab键 或4空格, 可用下面命令相互转换:
:%s/\t/----/g
%---表示所有代码
s---search
/---分隔符
\t ---table键
---- 4空格
g --- 表示全局
太牛X了。
2. 去掉 每行末尾 多余空格:
:%s/\s\+$//g
\s ---表示空格。
\+ ---或者多个的意思
$ ---表示每行结束前。
// ---表示替换成空字符。
g--- groble
3. 注掉一行中的某些内容,如下面代码中注掉的内容:
{ .procname = "net", /*.ctl_name = CTL_NET*/ },
{ .procname = "ipv6", /*.ctl_name = NET_IPV6*/ },
{ .procname = "icmp", /*.ctl_name = NET_IPV6_ICMP*/ },
命令如下:
:1,2350 s%\(\.ctl_name\)\([^,]*\),%\/\*\1\2\*\/%g
1,2350 ---检索表示代码的1-2350行。
s%aaa%bbb%g --- 表示用bbb中的内容代替aaa中的内容。
\(aaa\) ---表示保留(\)中的aaa内容
[^,]*\ --- 表示任意内容
\([^,]*\), ---表示“,”之前的任意内容
这里bbb = \/\*\1\2\*\/
\1 = \(\.ctl_name\)
\2 = \([^,]*\),
两边加上/* */.
3. 注掉一行中的某些内容,如下面代码中注掉的内容:
{ .procname = "net", /*.ctl_name = CTL_NET*/ },
{ .procname = "ipv6", /*.ctl_name = NET_IPV6*/ },
{ .procname = "icmp", /*.ctl_name = NET_IPV6_ICMP*/ },
命令如下:
:1,2350 s%\(\.ctl_name\)\([^,]*\),%\/\*\1\2\*\/%g
1,2350 ---检索表示代码的1-2350行。
s%aaa%bbb%g --- 表示用bbb中的内容代替aaa中的内容。
\(aaa\) ---表示保留(\)中的aaa内容
[^,]*\ --- 表示任意内容
\([^,]*\), ---表示“,”之前的任意内容
这里bbb = \/\*\1\2\*\/
\1 = \(\.ctl_name\)
\2 = \([^,]*\),
两边加上/* */.
行末:$
行首:^
空格:\s
行末空格:\s\+$
行首空格:^\+\s
有些人认为行末的空格是无用,浪费而难看的。要删除这些每行后面多余的空格,可以
执行如下命令:
:%s/\s\+$//
命令前面指明范围是 "%",所以这会作用于整个文件。"substitute" 命令的匹配模式是
"\s\+$"。这表示行末($)前的一个或者多个(\+)空格(\s)。后面我们会介绍怎样
写这样的模式。
替换命令的 "to" 部分是空的:"//"。这样就会删除那些匹配的空白字符。
另一种没有用的空格是 Tab 前面的字符。通常这可以删除而不影响格式。但并不是总这
样!所以,你最好手工删除它。执行如下命令:
/
你什么都看不见,其实这是一个空格加一个 TAB 键。相当于 "/"。现在,
你可以用 "x" 删除多余的空格,并保证格式没有改变。接着你可以用 "n" 找到下一个
位置并重复这个操作。
行首:^
空格:\s
行末空格:\s\+$
行首空格:^\+\s
有些人认为行末的空格是无用,浪费而难看的。要删除这些每行后面多余的空格,可以
执行如下命令:
:%s/\s\+$//
命令前面指明范围是 "%",所以这会作用于整个文件。"substitute" 命令的匹配模式是
"\s\+$"。这表示行末($)前的一个或者多个(\+)空格(\s)。后面我们会介绍怎样
写这样的模式。
替换命令的 "to" 部分是空的:"//"。这样就会删除那些匹配的空白字符。
另一种没有用的空格是 Tab 前面的字符。通常这可以删除而不影响格式。但并不是总这
样!所以,你最好手工删除它。执行如下命令:
/
你什么都看不见,其实这是一个空格加一个 TAB 键。相当于 "/"。现在,
你可以用 "x" 删除多余的空格,并保证格式没有改变。接着你可以用 "n" 找到下一个
位置并重复这个操作。
3. 把windows换行符改成linux换行符:
windows 换行符 \r+\n
linux 换行符 \n
可以用工具 dos2unix + 文件名, 即可完成。