在处理开发人员数据库时,我经常收到一条错误消息,这意味着我需要根据错误消息的内容运行一个简单的SQL语句来清理数据库。但是,从错误消息中剪切和粘贴以创建适当的SQL语句是一件痛苦的事情,所以我想要做的是从Vim运行一些命令来构造SQL语句,我试图找出最多的有效的方法来做到这一点。错误消息的格式为:
com/changelogs/1-changelog1.xml::changelog1name::dev1 is now: 30e70b7
com/changelogs/2-changelog2.xml::changelog2name::dev5 is now: 4jkerui
com/changelogs/7-changelog1.xml::changelog7name::dev4 is now: 43jer7r
我需要为每个违规更改日志清空md5sum列,因此我需要将上述错误消息转换为以下格式的SQL语句:
update databasechangelog set md5sum=null where id in
('changelog1name','changelog2name','changelog3name')
所以,例如,在Vim中,我可以做类似的事情:
提取更改日志名称:
:%s/^.*::\(.*\)::.*$/\1/g
在每行的开头添加一个引号:
:%s/^/'/g
在每行的末尾添加一个结束引号和逗号:
:%s/$/',/g
在此之后,我可以输入SQL语句的前导部分,转换完成。但是,输入这些命令很麻烦,我想要做的是将命令序列别名为Vim中的按键或用户定义命令。我在.vimrc中尝试了以下内容,但它只运行第一个命令:
noremap <F2> :%s/^.*::\(.*\)::.*$/\1/g | :%s/^/'/g
因此我的问题是:
答案 0 :(得分:0)
假设您的各个命令执行您想要的操作,您可以使用单个映射运行所有命令:
nnoremap <F2> :%s/^.*::\(.*\)::.*$/\1/g <bar> %s/^/'/g <bar> %s/$/',/g<CR>
请参阅:help map_bar
。