1653年五月十五日,孫可望和李定國雙方軍隊在廣西桂林靈川縣,分別距離十裡下營。
孫可望統兵十七萬列營三十六座,樹柵連營,縱橫兩百余裡,皆傍山林下寨;
李定國六萬人布列三營,軍紀嚴明,隊伍整齊,人馬威儀,旌旗鼓角,各按次序。
五月十八日,孫可望在軍帳召見了張勝。
孫可望說道:“爾可率領武大定、馬寶選鐵騎七千,連夜走小路至桂林城下暗襲之。城中有王尚禮、龔彝等為內應。爾一入城,則定國知家口已失,不戰而走矣!”
張勝聽令後,即率領馬寶、武大定趁著夜色,走小路悄然朝桂林殺去。
孫可望與李定國原先約定二十一日會戰,為了能使張勝、馬寶軍有更充裕的時間奔襲桂林。
孫可望推遲了交戰時間。
孫可望自以為計劃周全,萬無一失,卻沒有料到他的這次出兵討伐李定國、劉文秀師出無名,部下將領內心都不願意內戰。
而且白文選等人與李定國、劉文秀長期同甘共苦,更不願意自相火並;
而由劉文秀部隊改編的舊將馬進忠、馬惟興、馬寶等人又不滿孫可望久矣。
於是,作為前線總指揮的白文選私下同馬惟興、馬寶約定陣前反戈,文選還以視察前線為名親自馳入定國、文秀營中通報消息,說:“此時宜出兵交戰,馬寶、馬惟興及諸要緊將領已俱有約,稍遲則事機必露,斷不可為矣。”李定國對白文選的來意還存有戒心,猶豫不決。
劉文選急切地說:“若再遲,則我輩死無地矣。有一字誑皇上、負國家,當死萬箭之下,我當先赴陣前,汝等整兵進。”
說完,劉文選上馬飛馳而去。
奉命領軍偷襲桂林的馬寶也寫了密信差心腹人送入李定國營說:“張勝等已領精兵七千往襲桂林,桂林若破,則事不可為。必須明日決戰,遲則無及矣。”
李定國聽了白文選的意見,又在十八日晚上讀到馬寶的來信,這才相信對方是真心相助自己的,當機立斷傳令各營次日出戰。
十九日天還沒有亮,李定國兵馬開營出戰。
孫可望看到也立即揮軍迎敵,雙方交戰於桂林靈川縣。
一開始,孫可望立於高阜觀戰,看李定隊勢弱,即命諸營全軍出擊。
白文選看到孫可望來勢洶洶,李定形勢危急,當即親率五千鐵騎連同馬寶軍聯合殺入孫可望陣後,連破數營。
孫可望後軍給“戰友”從後突然一擊,頓時大亂,四下逃散。
李定國看到趁勢揮軍進擊,孫可望軍大亂。
殺敗孫可望後軍,白文選叫手下大呼:“迎晉王!迎晉王!”
十幾萬大軍頃刻瓦解。
孫可望見形勢陡變,在少數兵馬保護下,倉皇西竄。
路過興安時,馬進忠不僅“閉門不納”,還派出一支軍隊追擊,“使疾走,無得集眾”,孫可望匆忙逃往貴陽。
張勝、馬寶、武大定所統七千精騎取小路經五日夜急行軍已進抵桂林城下,馬寶惟恐城內疏於防備,故意沿途焚燒房屋,使偷襲變成了明攻。
城內王尚禮等聽說孫可望之兵已近,正準備上城接應,卻被李定國部將靳統武率親軍看守,動彈不得。
這時,興安大捷的露布已星馳送到桂林,靳統武命人把捷報傳令桂林,安定民心。
張勝帶兵至桂林城下準備攻城,忽然看見李定國報捷露布,知道孫可望大軍已敗,原先約好充當內應的王尚禮又音息全無,城上防守嚴密,只能退軍。
回城的路上又碰到李定國回援之師,
張勝欲奪路而逃,揮軍死戰,李定因靈川大戰之後急救根本,路遠兵疲,幾有不支之勢。馬寶為扭轉戰局,在張勝陣後連放大炮,擁兵殺來,與李定前後夾攻。
張勝大吃一驚,說:“馬寶亦反矣!”收拾殘兵敗卒突陣而逃。
第二天,過沾臨貴,駐守該地的總兵李承爵原系他的部將,率兵來迎。
張勝喘息方定,正向李承爵敘說戰敗原因,忽然左右衝出數人,出其不意把張勝擒縛。
張勝斥責李承爵道:“汝為部將,何敢叛我?”
李承爵回答道:“汝敢叛天子,吾何有於汝乎!”張勝被解至昆明處斬。
九月下旬,孫可望奔回貴陽,命留守大將馮雙禮帶兵把守威清要路,並同他約定如果劉文秀追兵到來即連放三聲號炮報信。
馮雙禮已經知道孫可望兵敗如山倒,出師時兵馬十七萬,返回貴陽只剩隨從十五六騎,因此他決定改弦易轍,不僅不幫助孫可望穩定貴州局勢,反而在文秀追兵尚未到達之時就下令連放三炮。
孫可望聽見號炮,以為追兵已到,連忙帶著妻兒和隨從出城東奔。一路上經過新添衛、偏橋、鎮遠、平溪、沅州,“各守將俱閉營不納”,“所至城門晝閉,呼之再三,僅垂大筥盛壺飡餉可望;且有不應者”。
曾經不可一世的“國主”孫可望眾叛親離,成了喪家之犬。在走投無路的情況下,孫可望決定投降清朝。
他對寥寥可數的隨從人員說:“今為李定國辱孤至此,孤不惜此數莖頭毛,行當投清師以報不世之仇耳。”
行至湖南靖州,其中書舍人吳逢聖任靖州道,率所部迎接。
孫可望曰:“一路人心俱變,惟有投清朝可免。”
於是遣楊惺先先往寶慶(今邵陽)向清方接洽投降。8