齐国失去霸主地位,骊姬倾晋之后晋国也陷入乱局,而此时南方的楚国在楚成王的治下却国力日盛、蒸蒸日上。中原的小国郑、许、陈、蔡、鲁、卫、曹、宋大都依附于楚,或者在楚国与晋国之间摇摆不定,楚国颇有称霸之势。
晋文公即位以后,晋国局势稳定,经济得以发展,民生得以休息,同时晋文公也在王子带之乱中带兵勤王、安定王室,又积极与秦、齐加强联系,晋国的大国威势逐渐恢复,也有争霸中原之心。在这种情况下,晋国与楚国之间就不得不出现当初重耳在楚国所预言的“晋、楚治兵,遇于中原”之境况了。
自从宋襄公图霸失败,惨败于楚国之手,宋国就只能依附于楚国。但是宋襄公的儿子宋成公与楚人有杀父之仇,而且宋襄公当年曾经对流亡中的晋文公极尽礼遇,因此晋国国力恢复之后,宋成公便决定背叛楚国,转而投靠有故交的晋国。此时晋楚两国正针锋相对,楚国自然不能容忍宋国这样公然的背叛行为,于是便联合了郑、许、陈、蔡等国一同进攻宋国,并包围了宋国的都城,宋成公派出公孙固来向晋国告急求援。
接到救援,晋文公召集群臣商议对策,晋国的大夫先轸说:“报答宋国以前的恩惠,建立晋国如今的威信,奠定今后的霸业,就在此一举了!”狐偃则进一步出谋划策:“楚国最近刚刚与曹国结盟,又与卫国结成姻亲,我们要救援宋国,不必与强大的楚军正面对抗。可以先去攻打曹国和卫国两个小国,楚国必定会放弃围攻宋国而去援救曹国、卫国。”
当初重耳在流亡中经过曹国,曹共公曾经无礼地去偷看他洗澡,重耳一直深以为辱,对曹共公耿耿于怀,如今就顺水推舟地同意了攻打曹国。为了筹备这场战争,晋国将原来的二军扩充为三军,又选定了元帅,晋文公在被庐大阅三军之后带领大军出发了。
经过一番波折,还在路上攻克了卫国,晋军终于围困住了曹国的国都,但是曹国国都城坚池深,一时难以攻克,晋军士兵死伤无数。曹国人为了打击晋军士气,便将晋军士兵的尸体挂在城墙上示众,看到攻城的同袍死后都不得安宁,晋军之中果然人心惶惶,晋文公深以为患。有人建议说:“他们这样对待我们的士兵,我们驻扎在他们的祖坟旁边祸害他们的祖坟。”
于是晋文公就将大军迁到了曹国人祖坟附近,曹国人见了果然人人惊惧,民心不稳,只好将战死的晋军尸体用棺木收殓了送还晋军。晋文公命令军队趁着曹国人心大乱之际进攻,果然攻克了曹国的都城。
晋军虽然攻克了曹国,但是楚国却没有按照预测的那样撤回围攻宋国的军队回来救援曹国,反而攻击得更加猛烈了。宋国抵挡不住,再次派人相晋国告急。晋文公对元帅先轸说:“宋人又来告急,如果不去救援,宋国就会与我们绝交,完全依附楚国;与楚国调节和谈,楚国又不答应;可是若要与楚国作战,齐国、秦国又不会支持我们,这如何是好?”
先轸说:“不如让宋国使者送礼给齐国、秦国,请他们代为调解周旋。我们抓住曹国的国君,再将曹国、卫国的土地分给宋国,楚国与曹国、卫国是盟友,必定不会答应和解,到时候齐国、秦国收了宋国的礼物又被楚人的不给面子所激怒,能不与楚国开战吗?”晋文公觉得有理,便依计行事。
晋国联合了齐国和秦国,占了优势地位,看到形势越来越严峻,楚成王有意退兵,便派人告诉在前线领军的令尹子玉。但是子玉骄傲自负,因为曾经有人批评他无带兵之能,最多只可统帅三百乘战车,他便不肯听命撤军,只派人去向楚成王请战说:“我不为立下战功,只为了用事实堵住小人之口。”楚成王见子玉不听命令,十分气愤,只给了子玉少量的军队和一百八十乘战车。
子玉并非无能之辈,在开战之前,他先派宛春到晋国军营去谈判:“请贵军恢复卫国国君之位,将曹国的土地还给曹国,我就退军解宋国之围。”狐偃本想拒绝,但先轸却看出了其中的阴谋,他说:“如果楚国说了一句话就能平定曹、卫、宋三国的危难,而我们却用一句话拒绝其请求,将三国推入亡国的险境,那就是我们不合礼制了、不得人心了。我们不如私下与曹、卫谈判,给予他们好处,再将宛春抓起来激怒楚国,到时候挑起战端的罪名就是楚国的了。”晋文公采纳了先轸的建议,曹国和卫国果然与楚国绝交了。
子玉知道此事后十分愤怒,下令进攻晋国的军队,晋国的军队却不战反退。士兵们不明白国君为何不敢与楚国令尹正面作战,狐偃便站出来解释:“师出有名、理直气壮的军队才有战斗力,如果没有楚国的帮助,国君有不了今日。当初在楚国,国君曾与楚王约定如果兵戎相见则晋军退避三舍,现在正应当以此来报答楚国。如果我们退让了,楚军还是咄咄逼人,那么就是对方无理挑衅了。”
晋军一路退避,子玉引兵追击,一路到了城濮(今山东范县临濮城),宋成公、齐国将领国归父、秦国将领小子憗率领大军驻扎于此,楚国军队则背靠险山驻扎。晋文公还顾及过去楚成王对自己的恩惠而犹豫不决,狐偃劝他说:“作战吧!如果胜利,我们就可以称霸诸侯,即使战败,于我们晋国的江山也无损。”
这时子玉派人来下战书:“请与君之士戏,君冯轼而观之,得臣(子玉之名)与寓目焉!”晋文公则派使者送去回复,约定明日开战:“敢烦大夫,谓二三子:戒尔车乘,敬尔君事,诘朝将见!”
第二天,春秋时期最大的一次战争爆发了。晋文公下令晋国军队的七百乘战车在莘地以北列阵,派胥臣率领下军抵挡陈国和蔡国。子玉命令若敖氏的一百八十乘战车为中军,命子西率领左军,子上率领右军,并扬言要覆灭晋国。
战争开始以后,晋军首先发起攻击,胥臣用虎皮包裹战马,向陈国、蔡国的军队发起猛烈进攻。陈、蔡的军队很快败退而逃,楚国的右军也随之溃败。为了诱敌轻进,狐毛设下两面大旗伪装撤退,栾枝也命令战车拖着树枝伪装逃遁,子玉果然中计,率军追击。中军的先轸、郤溱率领军队横向冲击,而狐毛、狐偃父子同时率领上军夹击楚军的左翼,楚国左军不敌,很快也溃败了。只剩下子玉率领的中军主力收拾残卒,败逃回了楚国。
城濮之战的失败,虽然并没有给楚国的主力造成严重损失,但是楚国北上中原与晋国争霸的计划遭受了严重打击,令尹子玉也引咎自杀。从此以后,楚国只能将精力集中在经营南方,而晋文公的霸主地位也由此奠定。
城濮之战以后,晋文公并不见喜色,反而不时忧心忡忡地叹气,有人问他:“我们战胜了楚国,国君还忧虑什么呢?”晋文公长叹一声说:“我听说打败别人以后能够安全又安心的只有圣人了,楚国的令尹子玉还活着,不知何时就会卷土重来,我怎么高兴得起来呢?”谁知不久以后竟传来消息,子玉被逼自杀了。
原来城濮之战大败后,子玉率领的中军并没有遭受太大的损失,因此他虽然心情低落,但毕竟胜负乃兵家常事,也没有太过自责,便收拾残部回楚国去了。可是一路到了楚国,楚成王却对他不听命令、一味贪战导致楚军大败的行为十分愤怒,派人到军中取责问子玉:“大夫您如果回国,那么我如何对子弟们随你战死的申、息两地父老交待?”
子玉这才知道楚王对自己的厌弃已经如此之深,只得自尽。消息传到晋国军营,晋文公大喜道:“我在外打败了楚国的军队,楚王自己在内诛杀了得力的大臣,内外相应地削弱的楚国的实力,我可以高枕无忧了!”
见楚国已经不足为虑,晋文公便将军队驻扎在郑国的衡雍(今河南原阳西),然后以霸主自居,大会诸侯。各诸侯国君见晋军新胜强楚,风头正劲,谁也不敢违逆其意,便纷纷前来,连城濮之战时协助楚军攻打晋军的楚国盟国陈国也来盟会。
晋文公见诸侯到齐,很满意自己目前的威望,但是毕竟自己的霸主地位尚未得到周王室的承认,有名不正言不顺之嫌,便打算率领诸侯到洛邑去朝见周襄王。不过考虑到晋国刚刚从内乱中恢复过来,又与楚国大战一场,实力消耗严重,要带着这么多人长途跋涉到洛邑去恐怕会有人趁机反叛,于是晋文公便打消了这个想法,派人在践土营建王宫,准备将周襄王请到这里来举行仪式,确认自己的霸主地位。
城濮之战以前,楚国的势力渗透了几乎整个中原地区,连齐国这样的大国都曾被楚人侵略,鲁、卫、郑、陈、蔡等小国更是不得不臣服于楚国。当时,中原各诸侯国都是姬姓的兄弟之国,而楚国则是异姓诸侯,而且向来被中原各国视作蛮夷。对于周王室和各中原诸侯国来说,晋文公大败楚军,遏止楚国北上的企图,是立下了大功。更何况此时周王室式微,晋文公又曾在王子带之乱中为周襄王立下大功,于是周襄王欣然同意了晋文公的邀请,答应亲自前来犒劳晋军、赏赐晋文公。