秦軍征南大都督苻融攻下壽陽後,緊接著派兵包圍了硤石,又派兵5萬由大將軍梁成率領攻占了洛澗(今安徽淮南市東)。
苻堅打了幾次小勝仗,便以為晉軍不堪一擊,命令尚書朱序前去勸降晉將謝石,想不費兵力而使東晉歸順。
但這朱序原本東晉降將,見到謝石以後,卻鼓勵他立即提議出兵攻秦。謝石心中有了底,增加了勇氣,派劉牢之率領5000名精兵於夜間進攻溶洞的梁成大軍。
梁成聽說苻堅派人去謝石處勸降,以為定會成功,便放鬆了警惕,不是騎馬打獵,就是飲酒作樂。這天夜裏喝得大醉,正在熟睡之時,劉牢之率軍殺入秦營。秦軍沒有準備,有的在夢中被殺,有的來不及穿衣就逃命。梁成慌忙組織人馬反抗,但為時已晚,先是中了一箭落馬,又被劉牢之砍了一刀身亡。梁成的副將王顯隻帶著十幾個人逃回。
苻堅聽說梁成的5萬大軍被晉軍幾千人馬殺得幾乎全軍覆滅,不由大怒,下令將王顯斬首。
正在這時,苻堅得到報告,圍攻硤石的軍隊也被晉軍打敗。苻堅大驚失色,脫口說道:“想不到晉軍竟然如此厲害!”
當天夜裏,苻堅又聽說秦軍在淝水(東淝河,從合肥向西北到八公山南彙入淮河)吃了敗仗,還聽說晉軍作戰勇敢,一人頂秦軍幾十個人。苻堅這才後悔,自言自語地說:“早知道晉軍這樣厲害,寡人何必興師動眾,自尋煩惱呢!”
第二天一早,眾將陪同苻堅在壽陽城頭觀望晉軍動態,隻見淝水對岸戰船密布,旌旗飄揚,士兵正在練習拚殺,喊聲震天,鬥誌顯得十分旺盛。苻堅心裏膽怯起來,問苻融晉軍有多少人馬。苻融說有十萬多人。苻堅又向遠處八公山上眺望,隻見森林中影影綽綽埋伏著許多晉兵,不禁大驚道:“啊!山那邊也是晉兵,隻這一處就有十萬兵馬,誰知山後有多少人呢?”
苻堅回頭看見朱彤,頓時來了氣,當時就是他鼓動出師伐晉,於是說:“你不是說晉軍兵微將寡,出師必然有征無戰嗎?為何晉軍英勇善戰,如此強大?”朱彤嚇得躲到一邊,哪敢吱聲。
事實上,八公山上沒埋伏一兵一馬,隻是苻堅連吃敗仗,心裏恐慌,居然把山上的草木誤以為是晉兵,這就是成語“草木皆兵”的由來。
秦軍吃了虧,變得聰明一些了,不再輕敵,堅守不出,專等後續大軍到來。而晉軍謝石、謝玄最怕秦軍大軍趕到。謝玄想了一個激將法,派人給苻融送去一信,大意是:將軍率百萬之眾攻打晉國,隻洛澗一戰便龜縮不前,有失秦國大將風度。如果敢交戰,就退後一箭之地,騰出一塊交戰之地,讓晉軍渡過淝水,再決勝負。
苻融拿不定主意,就找苻堅商量。苻堅馬上有了主意,說:“兵不厭詐,我軍雖然後撤,但等晉軍渡河之時,再迅速反擊,把晉軍消滅在淝水之中。”
太元八年(公元383年)十一月,這天早晨,是雙方約好決戰的時間。苻堅親自指揮戰鬥,手向空中一揮,大聲命令:“撤!”此令一下,秦軍轉過身去,競相撤退。淝水東岸的謝石、謝玄見狀,立即命令晉軍渡河。胡彬率領一萬名水軍乘船由深水渡河,劉牢之率領一萬名兵士乘鐵騎由淺水處涉水前進。
這時,苻堅認為反擊時刻到了,便命令秦軍殺回。但秦軍大多是強迫入伍的老百姓,誰也不願替秦王送死,隻是一個勁兒地後撤。朱序又趁機大喊:“秦軍打敗了!”於是有人跟著喊秦軍敗了。不明真相的兵士聞聽,拚命逃竄,自相踐踏而死傷者難以計數。