使用vim将此错误消息转换为SQL语句的最佳方法是什么?

时间:2014-07-29 15:51:30

标签: vim

在处理开发人员数据库时,我经常收到一条错误消息,这意味着我需要根据错误消息的内容运行一个简单的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

因此我的问题是:

  1. 实现转换的最佳方式是什么?以上命令是否合理,还是有更有效的方法?例如一个命令将提取所有名称并在单个命令中构造格式正确的列表,而不是三个命令
  2. 根据按键或用户定义的命令,将Vim配置为按顺序运行所有命令的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

假设您的各个命令执行您想要的操作,您可以使用单个映射运行所有命令:

nnoremap <F2> :%s/^.*::\(.*\)::.*$/\1/g <bar> %s/^/'/g <bar> %s/$/',/g<CR>

请参阅:help map_bar