公元783年,地方出现了叛乱,唐德宗从各地调集军队到长安集结,准备镇压叛乱。不料想甘肃的军队到达长安后因为对朝廷的待遇不满,鼓动当时在长安闲居的唐朝将领朱泚发动兵变,把唐德宗赶出了长安。唐德宗逃出长安后躲到了奉天(今陕西乾县),朱泚为了斩草除根,率兵攻打奉天。唐德宗手下唐军不多,形势很危急,一时间唐王朝到了灭亡的边缘。
当时的唐朝名将李晟正在外地养病,得知消息心急如焚,决定马上到奉天去解救唐德宗。可他养病的地方也遭到叛军的进攻,当地的节度使张孝忠强留他帮助自己就地抵抗叛军,不放他去奉天。李晟极力交好张孝忠,把张孝忠的女儿娶为自己的儿媳,又给张孝忠的亲信送礼让帮着说情,最后张孝忠答应放李晟去奉天,还让手下将领带600名士兵与他同去。李晟威望很高,一路招兵买马,队伍很快扩大到一万多人。
李晟率军到达奉天后,其他各路唐军也到了,其中大将李怀光指挥的唐军实力最为强大。朱泚叛军不敢决战撤回了长安,李晟决心乘势进攻长安消灭朱泚,可是李怀光发现自己兵强马壮之后,野心膨胀,想趁机夺取唐朝政权,因此认为李晟的军队是自己夺权的最大障碍。李怀光向唐德宗请示,以作战需要为借口,要求李晟的军队由自己统一指挥,唐德宗答应了,所以李晟的军队和李怀光的军队驻扎在一起。
李怀光的士兵天天抢劫,而李晟的士兵秋毫无犯。李怀光的士兵用抢来的东西拉拢李晟手下的士兵,可李晟的士兵无人敢接。李晟发现李怀光图谋不轨后,为了防止自己的军队被吞并,就把部队驻扎到别处,并向唐德宗报告李怀光谋反的企图。唐德宗尽力安抚李怀光,李怀光还是谋反了。不过,李怀光没想到自己手下的士兵都被李晟所折服,纷纷投奔了李晟。李怀光众叛亲离,只好带着少数亲信逃走了。李晟吸收了李怀光的部队后实力大增,就决定反攻长安,消灭朱泚。
有人建议李晟先占长安的外城,再夺市区和皇宫,把叛军“包饺子”一网打尽,李晟说:“长安市区道路狭窄,如果叛军利用地形与我军巷战,徒增伤亡,还会误伤百姓,使千年古城毁于一旦。现在叛军的主力集中在长安北部的西内苑,我们不如突袭那里击溃叛军主力,他们必然弃城而逃。这样虽然不能一网打尽,但是可以确保长安城安然无恙。”大家一致赞同,于是进军西内苑。朱泚派出手下骁将张庭之、李希傅带兵迎击李晟,李晟正欲寻敌决战,率军出击锐不可当,一日之内三破叛军。叛军军心动摇,晚上宿营时遍地哭声。
第二天,唐军乘胜进攻,击退阻击到达西内苑。西内苑是皇家猎场,四周高墙围护。李晟在进攻前夜扒开的大缺口又被叛军用树木挡住了,叛军隔着树木射箭,唐军不能前进。危急时刻,李晟大怒,对唐军将领们说:“要是再过一会儿还不能突破叛军防线,我把你们全部斩首!”唐军将领们害怕被杀,拼死进攻,终于突破防线,击溃了叛军主力。叛军残部负隅顽抗,并有数千名骑兵绕到唐军后路偷袭,李晟率部苦战,连续十几次冲锋,最终击退了叛军。朱泚率部狼狈逃出长安,后来在逃亡途中被杀。
(李晟不愧是中唐名将,他治军严明,不扰百姓,率部进入长安后,有几名将领先后违反军令都被杀掉,士兵们更是严守军纪不敢违禁。)