此命令行解析可能包含或不包含电话,电子邮件或Web列表的联系人列表文档。如果它有三个那么一切的伟大工程 - 在数据上载该行的末尾附加从FormatContact()的返回:VIM:删除模式IF子匹配(1)为空
silent!/^\d/+1|ki|/\n^\d\|\%$/-1|kj|'i,'jd|let @a = substitute(@",'\s*Phone: \([^,]*\)\_.*','\1',"")|let @b = substitute(@",'^\_.*E-mail:\s\[\d*\]\([[email protected]]*\)\_.*','\1',"")|let @c = substitute(@",'^\_.*Web site:\s*\[\d*\]\([-_.:/0-9a-zA-Z]*\)\_.*','\1',"")|?^\d\+?s/$/\=','.FormatContact(@a,@b,@c)
,或者分解:
silent!/^\d/+1|ki|/\n^\d\|\%$/-1|kj|'i,'jd
let @a = substitute(@",'\s*Phone: \([^,]*\)\_.*','\1',"")
let @b = substitute(@",'^\_.*E-mail:\s\[\d*\]\([[email protected]]*\)\_.*','\1',"")
let @c = substitute(@",'^\_.*Web site:\s*\[\d*\]\([-_.:/0-9a-zA-Z]*\)\_.*','\1',"")
?^\d\+?s/$/\=','.FormatContact(@a,@b,@c)
我创建了三个单独的搜索,以避免任何ONE搜索失败,如果一个原子未能匹配,因为 - 再次 - 联系信息可能或可能不存在每个联系人。
的问题创建的解决方案是,当模式不匹配,我得到了整个@”到@a。相反,我需要的是在比赛时不会出现空。我需要代表每一个变量(电话,电子邮件,网络),无论是空的。
- 我看不出有任何的标志,可以在替代函数来设置 会做到这一点。
- 有没有一种方式,如果\返回“” 1是空的吗?
- 有没有办法创建一个可选的原子,所以搜索查询(IES)仍然可以解释为空的匹配,以便正确记录它为空?
你能说清楚一下你想做什么吗?你是否正在处理输入?谁首先放弃了选择? @a将在哪里使用。 (_我尽我最大的努力使这件事变得简洁,但是写了一个vimscript函数,对我来说没有任何效果) – sehe 2012-01-11 16:30:20
@sehe帖子已更新。 – Ricalsin 2012-01-12 00:36:43