武德四年(621)二月,李世民选精锐骑兵千余人,均皂衣玄甲,分左右两队,以名将秦叔宝、程知节、尉迟敬德、翟长孙分任统领,在谷水(今河南渑池县渑水及其下游)大败王世充,并进而包围洛阳宫城,但洛阳城中守卫甚严,李世民军队围洛阳十日而未果,但李世民毫不退缩,决心攻下洛阳。在唐军的急攻下,王世充飞书窦建德求援,窦建德领兵增援,李世民一举消灭窦军,俘窦建德本人,并随后围困洛阳,王世充被迫于武德四年(621)五月率残部投降。至此,王世充、窦建德两军被李世民击溃、消灭。窦建德被俘解至唐都长安被斩于市。王世充则因降唐,并有李世民不斩前言,而被免死,贬为庶人,与兄弟、子侄流放蜀地。王世充在定州府州驿站被仇人独孤机之子定州刺史独孤修德杀死,其子侄等亦因在流放路上谋反而均被杀。
唐初,李世民攻王世充,窦建德宰军救援王世充,被阻虎牢,窦建德部下凌敬建议:“大王悉兵济河.攻取怀州,河阳,使重将守之,更鸣鼓建旗,逾太行,入上党,徇汾、晋,趣蒲津,如此有三利:一则蹈无人之境,取胜可以万全;二则拓地收众,形势益强;三则关中震骇,郑围白解。为今之策,尤以易此。”窦建德妻曹氏也建议说:“今大王自滏口乘唐国之虚,连营渐进以取山北,又因突厥西抄关中,唐必还师自救,郑围何忧不解!若顿兵于此,老师费财,欲求成功,在于何日?”二人都主张采取“围魏救赵”之计,自河内北上略河东、逼关中.迫使李唐退兵。窦建德不用,被李世民击败于虎牢。
李世民与王世充东都之战
唐高祖李渊于武德三年(公元620年)命秦王李世民率兵东征,七月,李世民“总率诸军攻王世充于洛邑,师次#州(今河南省新安县)”,威震东都。“黄河以南,莫不响应,城堡相次来降”。为了抗拒唐军的进攻,王世充一面“遣魏王王弘烈镇襄阳,荆王行本镇虎牢,宋王泰镇怀州”,加强洛阳外围的防御,另一面又调兵遣将,严密部署对东都的守备,使“齐王世恽检校南城,楚王世伟守宝城,太子玄应守东城,汉王玄恕含嘉城,鲁王道循守曜仪城”。又亲自将兵3万,列阵于东都之西的慈涧,摆出与唐军决战的架势。
秦王李世民从容布阵。首先“以轻骑挑之”,来侦探敌兵的虚实。第二天,世民指挥雄师5万挺进慈涧,直接与王世充对垒。遣行军总管史万宝自宜阳南据龙门,将军刘德威自太行东围河内(今河南省沁阳县),上谷公王君廓自洛口断其饷道,怀州总管黄君汉自河阴(今河南荥阳东北)攻回洛城(在河阳县境,今河南孟县南);大军屯于北邙,连营逼之。接着又派精兵,攻回洛,袭怀州,取轘辕(关名,在今偃师东南),切断世充的军需补给线和对外的联系。
九月,秦王率领精骑500名来到北邙登魏宣武帝陵(在今冢头村东),巡视战地,观察地势。王世充率1万余名步骑狂扑而来,唐军被围。尉迟敬德趁机与世民冲出重围。唐军在屈突通援军的配合下,回马冲入敌阵,往返奔突,斩敌千余人,俘获6000人,并生擒世充冠军大将军陈智略,取得邙山战役的胜利。
十月,李世民派行军总管罗士信拔掉了王世充在洛城西的外围军据点硖石堡,接着又用计智取了位于河南县城以东的千金堡。
武德四年(公元621年)二月,“世民移军青城宫”,威逼洛阳。王世充“率众二万自方诸门出,凭故马坊垣堑,临谷水以拒唐兵”。秦王引精兵屯于北邙,再次登上宣武陵观察敌营,派大将屈突通率步兵5000名,东渡谷水破阵,自引骑兵南下,与之配合,斩俘敌人7000人,直抵东都城下。王世充被困洛阳,被迫遣使向夏王窦建德求救。
三月,窦建德引兵10万,号称30万西进,救援王世充。一路陷管州,占荥阳,水陆并进,“军于成皋之东原,筑宫板渚,遣使与王世充相闻”。秦王留齐王元吉围洛阳,亲率精锐东趣虎牢,星夜兼程,“历北邙,抵河阳,越巩而去”,采取了“围城打援”的战术。李世民进据虎牢,即派骁骑500名,由大将李世勣(即徐世勣)、程知节、秦叔宝等带领,分别埋伏在通往敌营20多里的道路两旁,自率四骑深入建德营盘观察地形,以诱夏军出战。夏王指挥五六千骑兵拼命追杀。李世勣等奋起冲杀,斩敌300余人,活捉窦建德大将殷秋、石瓒。
四月,秦王派王君廓率轻骑截断敌人粮道,获其大将张青特。五月,唐军佯装撤兵,北渡黄河,南临广武,仅留马千匹,放牧河渚,诱敌出战,当夜又偷渡黄河南下回营。建德中计,果然悉众而出,自板渚,北拒黄河,西薄汜水,南属鹊山,绵亘20余里,满山遍野,鼓行而进。世民自率轻骑东渡汜水冲营,史大奈、程知节、秦叔宝、宇文歆诸将配合包抄,以迅雷不及掩耳之势,铺天盖地而来。建德措手不及,将士丧魂落魄,竞相逃窜。
虎牢战败,世充大将王德仁闻风丧胆,放弃故洛阳(汉魏故城)仓皇逃跑,次将赵季卿献城投降。唐军乘胜兵临东都城下。世充走投无路,只得“素服率其太子、群臣2000余人,诣军门降”。李世民收复东都。