窦建德死后,他手下的残兵败将都被他的妻子遣散,偏偏有几个死党贼心不死,聚众横行乡里。地方官吏派人捉拿,这些人就又冒出造反的念头,聚在一起商量推选主帅。议了半天也没选好,于是卜了一卦,卦象上说应当选个姓刘的为主帅。众人首先想到窦建德的旧将刘雅,谁知刘雅不同意,这帮人竟把他杀掉。
这时候,有人想起了刘黑闼。刘黑闼是漳南人,先投奔李密,继而归降王世充,后来又降了窦建德。窦建德封他为将军,赐汉东郡公。窦建德兵败后,刘黑闼回家务农。这一天,刘黑闼正在菜园里锄菜,忽然看见范愿等人匆匆而至,就把他们请进屋里问明来意。范愿大致讲了一下,刘黑闼开始还稍稍谦让,后来经高雅贤一再催促,便欣然同意。当即宰杀耕牛,大摆酒宴,然后订下计划,又招集了一百多人,袭击漳南县城。杀死县官,开仓放粮,不到几天就纠集了数千人。乱贼接着进攻鄠县,贝州刺史戴元祥和魏州刺史权威合兵前去救援,刘黑闼在途中设下埋伏,两位刺史战败身亡,兵器也都被抢走了。刘黑闼在漳南设立祭坛,向窦建德的牌位祭告了一番,然后自称大将军,出兵向东,攻陷历亭,杀掉守将王行敏。饶阳盗贼崔元逊也起兵占据深州,杀了刺史裴晞,响应刘黑闼。兖州草寇徐圆朗自从洛阳平定后,已上疏降唐,被封鲁国公兼兖州总管,现在竟也与刘黑闼联合起来,自称鲁王。
此时,唐军正要南下攻打江陵,夔州总管李孝恭大造战舰,练习水军,即将出发。偏在这时候山东传来战报,李渊只好封淮安王李神通为山东道行台右仆射,前去剿匪。又派将军秦武通和定州总管李玄通,会同幽州总管罗艺共同征讨刘黑闼。征东的大军先行出发,南下的大军紧接着也被派出。
大军南下是为讨伐萧铣。萧铣是梁宣帝萧曾的孙子,隋炀帝任命他为罗川令。隋末由巴陵校尉董景珍等人推举,尊为梁王,改元鸣凤,服色和旗帜都仿照梁朝的样子。萧铣起兵仅五天,远近归附的人马就达到了几万。不久,萧铣自称皇帝,迁都江陵,封董景珍等七个功臣为王。又召邓州人岑文本为中书侍郎,派鲁王张绣招降岭南,岭南的大多数郡县都来投降。萧铣又命令部将苏胡儿攻打豫章,杨道生夺取南郡,一时间威震四方。南自交趾,北到汉水,西至三峡,东达九江,都成了萧铣的势力范围,拥兵多达四十余万。
武德二年,杨道生进犯峡州,被唐刺史许绍击退。萧铣又派大将陈普环带领水军进入三峡,也失败了。萧铣仍不死心,在安蜀城驻军,窥视巴蜀。高祖命李靖镇守夔州,被萧铣的兵马拦阻,久久不能前进。萧铣又命令张绣进攻已经投降唐朝的董景珍,大获全胜。萧铣封张绣为尚书令,张绣居功自傲,日益骄横,终于被萧铣杀掉。从此那些功臣渐渐地离心离德,萧铣的势力一天比一天衰弱。
此后,唐朝峡州刺史许绍攻下梁的荆门镇,黔州刺史田世康攻克梁的五州四镇。李靖又向朝廷献上取梁十策,李渊于是任命赵郡王李孝恭为夔州总管,整练水师,李靖为行军总管兼李孝恭属下长史。武德四年秋八月,李孝恭在夔州阅兵,正巧秋水暴涨,江水泛滥,李靖劝李孝恭赶快进兵,众将多数不同意。李靖激动地说:“兵贵神速,现在我军刚刚集结,萧铣还不知道,如果趁着江水上涨顺流而下,杀他个措手不及,定能活捉萧铣。”李孝恭大为赞同,亲自率领战舰两千多艘带着李靖等人当天出发,越过荆门、宜都两镇直达彝陵。萧铣的大将林士弘正在清江驻兵,毫无防备,被大唐的水军一举歼灭,缴获战舰三百艘。林士弘仓皇逃脱,唐军追到百里洲,又与林士弘交战,再次大获全胜,大军直达北江。梁朝江州总管盖彦举带着五个州投降。
萧铣正休养生息,发展农业,突然听说唐朝的水师从天而降,立即仓促征兵。短时间没招到多少人马,只好调集亲兵卫队前来迎战。李孝恭正要和他们交锋,李靖连忙阻止,偏偏众将一齐请战,李靖说道:“萧铣为了扭转败局,派来的都是精锐之师,锋头太盛,锐不可当。不如我们在南岸休整,等他们锐气衰了再去出击,才能得胜。”李孝恭不听,留下李靖守营,自己率领精锐部队出战,果然吃了败仗。萧铣的水军见李孝恭败退,就散乱地驶向江心去抢收战利品,李靖见他们舰队散乱,就请战进攻,李孝恭正在后悔不听李靖的话,自然同意,立即派李靖带兵出击。萧铣的军兵正在四处抢东西,不料唐军再次杀来,吓得四散奔逃,哪还有心思恋战?李靖带兵追击,歼敌不计其数,乘胜直抵江陵,冲进了外郛,又分兵攻打水城,缴获大批船只。
李靖下令把这些船只全都散乱地丢在江中。众将又疑惑起来,都来问李靖:“得到这么多敌舰,正好可以利用,为什么都扔到江里,这不是又让敌人捡回去了吗?”李靖笑道:“诸位有所不知,这里都是萧铣的属地,我们孤军深入,一旦城池攻不下来,敌人援兵从四面赶到,我们就难免里外受敌,进退两难,即使有船只也没用。如今我把敌人的船只散乱地扔下,让这些船只沿江而下,敌人远来的援兵必定怀疑江陵已被我们攻破,就不敢轻易进兵。即使派人来打探,也要等十多天,到那时我们早就把城攻下了。”于是下令攻城。萧铣在城中,天天盼着援兵到来,哪知援兵正中李靖的计策,看见沿江而下的散乱船只,都不敢前进。交州总管邱和、长史高士廉、司马杜之松等人来援助江陵,一见全城被围,吓得赶紧退兵,竟然到李孝恭那里投降。
萧铣内外阻隔,焦急万分,只好和岑文本商量,岑文本劝萧铣投降。萧铣于是对臣下道:“老天不保佑梁国,我们恐怕很难再支持下去,如果再战,恐怕满城百姓都跟我遭殃。罢了!不如早点投降吧。”臣下哑口无言。萧铣来到唐营拜见李孝恭,惨然说道:“有罪的只是我萧铣一个人,百姓无罪,请不要滥杀无辜!”李孝恭满口答应,下令进城后禁止杀掠。众将又说:“敌将拼死顽抗,死有余辜,应该没收他们的家产,赏给军士。”李靖赶紧劝阻道:“王师入境,应该让百姓称颂才是。敌军将领也是为他们的主上而死,也是忠臣,怎能和叛逆同等对待呢?”李孝恭按李靖的建议再下禁令。于是城中安然无恙,鸡犬不惊。南方各州县听说这种情况,纷纷归降。后到的十多万援兵,也全都归降了大唐。
李孝恭押送萧铣到长安,李渊当面责问,萧铣长叹道:“隋朝无道,群雄逐鹿,我萧铣没得天命,所以才失败。如果你认为这也是罪,那我就难逃一死了。”李渊下令把萧铣斩首。总计从萧铣建国号梁,五年灭亡。李孝恭剿匪有功,被封为荆州总管,李靖被封为永康县公兼上柱国,管辖岭南。萧铣的部将刘洎、李砻志等人全都归降李靖,就连南方的土著首领冯盎等人也大多投降,南方宣告太平。
高开道本来已经投降了大唐,受封北平郡王,因为听说刘黑闼势力强盛,又秘密勾结,自称燕王。接着,又和突厥互相通使,寻找靠山。此时,唐朝廷已经出征刘黑闼,没工夫顾及高开道。刘黑闼势力日益猖獗起来,淮安王李神通和罗艺等人合兵出击,都被他打败。刘黑闼攻陷瀛州,杀了刺史卢士睿,再攻陷定州,活捉总管李玄通,李玄通剖腹自杀。后来,刘黑闼又攻陷冀州,杀了刺史麹稜。至此赵魏境内所有窦建德的旧将,全都争着杀掉大唐的官吏,响应刘黑闼。黎州总管李世绩屯兵宗城,听说刘黑闼率众前来攻打,恐怕抵挡不住,急忙逃往洺州,半路上被追上,所率领的步兵五千人被刘黑闼一扫而光。李世绩命不该绝,只身逃走。
刘黑闼先后攻下相州、黎州、卫州等地,只用半年时间,就把窦建德过去的势力范围一律收回。又派使者与突厥联络,作为外援。唐将军秦武通、洺州刺史陈君宾、永年令程名振等人都从河北逃回长安。李渊非常着急,只好再令秦王李世民和齐王李元吉共赴河北,讨伐刘黑闼。这时已经是唐武德五年。刘黑闼自称汉东王,改元天造,定都洺州,封范愿为左仆射,董康买为兵部尚书,高雅贤为左领军。凡是窦建德的故将,全都官复原职,一切行政全恢复了以前的制度。
秦王李世民出师东征,先夺回相州,再进军肥乡,列阵洺水南岸,准备进攻。幽州总管罗艺也率领数万人马来和李世民会合。刘黑闼留范愿把守洺州,自己领精兵抵挡罗艺,晚上驻扎在沙河。李世民派程名振连夜运来六十面大鼓,然后把这些大鼓拉到城西两里的大堤上一齐捶打,顿时鼓声震天,连城中都动摇起来。范愿吓坏了,连忙派人火速报告刘黑闼,刘黑闼慌忙回城,派弟弟刘十善和行台张君立即率一万兵马进攻。到了徐河,与罗艺兵争斗一场,大败而逃。洺水人李玄感投降大唐,李世民派王君廓进城和李玄感共同守城,刘黑闼回来攻打洺水,因为城在水上,不便进攻,就从东、北两个角上挖了两条地道,运兵攻城。李世民带兵去支援,交战三次,都被刘黑闼打回来,就召集众将问计。李世绩进言道:“贼人挖地道已经快要挖成了。如果抵达城下,城池必定守不住,不如让王君廓突围出来,再想办法。”话没说完,有一个年轻人自告奋勇道:“末将愿意去守城。”李世民一看是罗士信,便道:“将军虽然勇猛,但孤城已经垂危,恐怕守不住了。”罗士信道:“末将誓与此城共存亡。”
李世民到城南登上高冈,挥舞大旗召王君廓回营,又派罗士信接应。罗士信率领两百骑兵出击,正赶上王君廓杀出来,罗士信出兵相助,王君廓这才安全返回。罗士信冲进城中,刘黑闼继续围攻,夜以继日,接连攻了八昼夜,罗士信不解铠甲,废寝忘食,全神贯注在城上坚守,才没有被攻陷。偏偏老天下起了大雪,全城都白了,刺得人眼睛都睁不开,刘黑闼趁机攻进了城。罗士信仍然挺着长矛,刺死敌人的好几个头目,敌兵吓得闪开了一条通道,无奈罗士信已身负多处重伤,不能再战,只好催马往回跑。却因大雪迷漫急不择路,陷入泥坑之中,敌兵四面围住,罗士信无法脱身,被掳了去。刘黑闼欣赏罗士信的勇猛,劝他归降。罗士信大骂道:“黑贼!罗将军能降你吗?”随即被杀死,年仅二十几岁。罗士信是齐州人,开始投归李密,接着降了王世充,最终归降大唐,为李世民尽忠,这也算是士为知己者死吧。李世民因为被大雪阻隔,无法去救。后来听说罗士信殉难,心如刀绞,只好厚葬了罗士信,追封他为勇士。
罗士信死后,刘黑闼又来挑战,李世民和罗艺合营,坚壁不动。不久探听到敌将高雅贤喜欢酗酒,就派李世绩暗中出兵袭击,杀进高雅贤营中。高雅贤当时已经喝得大醉,勉强骑马出战,没几个回合就被斩首。李世民又派程名振截断敌人的粮道,凿沉刘黑闼的粮船,烧毁粮车。刘黑闼仍不肯退兵,两下相持了六十多天。李世民料知刘黑闼粮草吃光,必定会来决战,于是派人在洺水上筑起大坝,然后叮嘱道:“等我和贼人一开战,你们就决开大坝,千万不要误事!”刘黑闼果然渡河来进攻唐营,李世民亲自率领精兵,破了他的前军,又冲进后队,与刘黑闼相遇。刘黑闼亲自督战,从中午一直打到晚上,渐渐地支撑不住了。突然间洪水袭来,泛滥两岸,把刘黑闼的兵马冲走好几千。还有一半来不及逃跑的都被唐兵杀光,刘黑闼拼死渡过洺水,手下只剩下二百多人。刘黑闼自知大势已去,只好投奔突厥去了。