接到詔令的謝玄立即把軍隊向北移到白馬塘(湖名,今江蘇寶應西北)畔。當時,彭超、俱難等在兵圍三阿的同時,西據盱眙、北據淮陰,企圖利用三阿、盱眙、淮陰三地鼎足相犄之勢,互為支援。在三阿一帶,他們則依靠山勢,擺下了層層圍困陣式,打算一舉殲滅三阿的晉軍。
謝玄認為若消除盱眙、淮陰對三阿的支援之勢,必須速戰速決,於是采取了勇猛迅捷、直搗敵營的戰法。首先,他集中全部兵力與三阿晉軍內外配合,水陸夾擊,在白馬塘一帶擊敗彭超、俱難6萬餘秦軍。五月十二日,謝玄又乘敵混亂之機突破三阿的重圍,迫使彭超退守盱眙。為了不給敵軍以喘息機會,謝玄立即會合駐守三阿的幽州刺史田洛所部,合兵5萬,一鼓作氣,乘勢進擊,直逼盱眙。六月初七日,再次大敗彭超、俱難軍,奪回盱眙城,迫使秦軍向北退守淮陰。
謝玄為徹底殲滅來犯的秦軍,消除禍患,派何謙等率舟師,趁海水倒漲之機,繞道西上,焚毀淮水上遊的秦軍兵橋,將敵軍退路斬斷;接著,謝玄率隊猛撲淮陰城。彭超率少數部隊企圖搶渡淮水北逃,又遭謝玄追擊,大敗於君川(盱眙北)一帶。這時,由於劉牢之依計攻破了秦軍事先設在淮水的浮橋,李都又破壞了秦軍的運船,秦軍士卒、將帥擁擠於淮水南岸,既不能向北渡河逃走,又不能向南進攻晉軍,慌亂一團。晉軍乘勢衝殺,很快全殲秦軍,敵將彭超、俱難隻身脫逃。
謝玄指揮的三阿之戰既解除了東晉來自江北的威脅,又改變了自襄陽失守以來江南民心不穩、兵心不振的頹勢。此後,謝玄固守江防,威名遠揚。晉孝武帝以軍功封謝玄為冠軍將軍,加領徐州刺史,封東興縣侯。
383年,前秦皇帝苻堅糾集了近百萬軍隊大舉南下,欲與東晉一決雌雄。東晉都督徐州、兗州、青州等諸州軍事的將軍謝玄,與其叔父征虜將軍謝石、從弟輔國將軍謝琰等率軍8萬以禦敵。苻堅軍經潁水、洛水一帶渡淮水,進駐壽陽(今安徽壽縣),列陣於淝水(今安徽東淝河)。苻堅軍與晉軍隔水相望,不能渡河。謝玄派使者對前秦大將苻堅的弟弟苻融說:“貴軍遠道而來,進抵我國境界,臨水列陣與我軍對峙,不就是想和我軍速戰速決麼。如果貴軍稍作退卻,允許我軍渡河,讓雙方將士在開闊地上交戰,決一雌雄,我們騎馬觀戰不也是一件快事嗎?”苻堅就此事與諸將討論,諸將都認為秦軍遠超晉軍,應以淝水來阻斷晉軍而不能使其渡水北來。但自恃兵多而頗為自負的苻堅卻說:“稍作退卻也沒什麼了不起,讓晉軍渡河,在晉軍半渡之際,我軍以數十萬鐵騎猛攻,逼於水中消滅他們。”苻融也讚同這一決策,於是揮師後移。
苻堅軍隊龐大,已是尾大不掉之勢,而且兵員由各族人糾集而成,目的各有不同,都無心戀戰,所以一退即不可止。混在其中於襄陽被俘的晉將朱序也故意大呼:“秦軍失敗啦!”這時謝玄與謝琰等率8000精兵乘機渡過肥水,與苻堅軍展開決戰。在混戰中苻堅被晉軍流箭射中。苻堅見秦軍敗退,潰不成軍,便遷怒於苻融,在陣前將其斬殺。前秦軍群龍無首,全線崩潰,自相踐踏及淹死於水中的不計其數,以致把淝水的河道都堵塞了。剩餘的殘兵敗將,丟盔解甲落荒而逃,聽到風聲鶴唳都以為是晉軍,死傷的人漫山遍野。時值十一月嚴寒,逃跑士兵風餐露宿,凍餒而死者又有十之八九。
壯誌難酬抑鬱而終
淝水之戰,前秦軍隊主力損失殆盡,內部出現混亂,趨於崩潰瓦解的邊緣。但一心偏安江南的東晉朝廷絲毫沒有乘勝北上的打算。東晉轉危為安,它統治集團內部固有的鉤心鬥角的弊端又開始顯露出來。謝氏父子叔侄拒敵有功,但是因此而受朝廷、特別是司馬氏皇族的猜忌。當時威望、地位僅次於謝安的車騎將軍、荊州刺史桓衝病故,謝玄屢有戰功,名望很高,很多人認為應該將謝玄加以提拔,繼任桓衝的位置,但謝安遲疑顧慮,始終不敢委任。淝水之戰後一年,即東晉太元九年(384)八月,東晉朝廷才因謝安進取中原的奏章以謝玄為前鋒都督,率師北伐。在這期間,鮮卑族的慕容泓、慕容衝先後起兵,相繼稱帝,在前秦的腹地關中創建西燕政權。隨後,羌族首領姚萇也在關中叛秦,自立後秦政權。與此同時,鮮卑族慕容垂也起兵攻打苻堅庶出長子苻丕鎮守的鄴城。北方割據政權林立,迅速瓦解了前秦政權,收複中原的有利條件就擺在東晉麵前。