此命令行解析可能包含或不包含電話,電子郵件或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