工作中从数据库中导出了一些insert语句:
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
现在想改变第一列的值, 在vim中如下实现:
:let n=0 | g/valuse (\zs\d\+/s//\=n/|let n+=1
解释如下:
let 为变量赋值 (:help let )
| 用来分隔不同的命令 (:help :bar )
g 在匹配后面模式的行中执行指定的ex命令 (:help :g )
\zs 指明匹配由此开始 (:help /\zs )
\d\+ 查找1个或多个数字 (:help /\d )
s 对匹配模式进行替换 (:help :s )
\= 指明后面是一个表达式 (:help :s\= )
也可以用另外一种方式,要先选中,通过行号进行替换 , 不如上面的方式灵活:
:'<,'>s/values (\zs\d*\ze/\=line(".") - line("'<") + 1
'<,'> 我们所选中的区域 (:help '<,:help '> )
s 在选中的区域中进行替换 (:help :s )
\zs 指明匹配由此开始 (:help /\zs )
\d* 查找任意位数的数字 (:help /\d )
\ze 指明匹配到此为止 (:help /\ze )
\= 指明后面是一个表达式 (:help :s\= )
line(".") 当前光标所在行的行号 (:help line() )
line("'<") 我们所选区域中第一行的行号 (:help line() )
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
values (2163, 1, 'ID', '主键', 1, 'S', 4, 0, 0, 1, 1, 0, null, null, null, null, 1, null);
现在想改变第一列的值, 在vim中如下实现:
:let n=0 | g/valuse (\zs\d\+/s//\=n/|let n+=1
解释如下:
let 为变量赋值 (:help let )
| 用来分隔不同的命令 (:help :bar )
g 在匹配后面模式的行中执行指定的ex命令 (:help :g )
\zs 指明匹配由此开始 (:help /\zs )
\d\+ 查找1个或多个数字 (:help /\d )
s 对匹配模式进行替换 (:help :s )
\= 指明后面是一个表达式 (:help :s\= )
也可以用另外一种方式,要先选中,通过行号进行替换 , 不如上面的方式灵活:
:'<,'>s/values (\zs\d*\ze/\=line(".") - line("'<") + 1
'<,'> 我们所选中的区域 (:help '<,:help '> )
s 在选中的区域中进行替换 (:help :s )
\zs 指明匹配由此开始 (:help /\zs )
\d* 查找任意位数的数字 (:help /\d )
\ze 指明匹配到此为止 (:help /\ze )
\= 指明后面是一个表达式 (:help :s\= )
line(".") 当前光标所在行的行号 (:help line() )
line("'<") 我们所选区域中第一行的行号 (:help line() )