齐国失去霸主地位,骊姬倾晋之后晋国也陷入乱局,而此时南方的楚国在楚成王的治下却国力日盛、蒸蒸日上。中原的小国郑、许、陈、蔡、鲁、卫、曹、宋大都依附于楚,或者在楚国与晋国之间摇摆不定,楚国颇有称霸之势。
晋文公即位以后,晋国局势稳定,经济得以发展,民生得以休息,同时晋文公也在王子带之乱中带兵勤王、安定王室,又积极与秦、齐加强联系,晋国的大国威势逐渐恢复,也有争霸中原之心。在这种情况下,晋国与楚国之间就不得不出现当初重耳在楚国所预言的“晋、楚治兵,遇于中原”之境况了。
自从宋襄公图霸失败,惨败于楚国之手,宋国就只能依附于楚国。但是宋襄公的儿子宋成公与楚人有杀父之仇,而且宋襄公当年曾经对流亡中的晋文公极尽礼遇,因此晋国国力恢复之后,宋成公便决定背叛楚国,转而投靠有故交的晋国。此时晋楚两国正针锋相对,楚国自然不能容忍宋国这样公然的背叛行为,于是便联合了郑、许、陈、蔡等国一同进攻宋国,并包围了宋国的都城,宋成公派出公孙固来向晋国告急求援。
接到救援,晋文公召集群臣商议对策,晋国的大夫先轸说:“报答宋国以前的恩惠,建立晋国如今的威信,奠定今后的霸业,就在此一举了!”狐偃则进一步出谋划策:“楚国最近刚刚与曹国结盟,又与卫国结成姻亲,我们要救援宋国,不必与强大的楚军正面对抗。可以先去攻打曹国和卫国两个小国,楚国必定会放弃围攻宋国而去援救曹国、卫国。”
当初重耳在流亡中经过曹国,曹共公曾经无礼地去偷看他洗澡,重耳一直深以为辱,对曹共公耿耿于怀,如今就顺水推舟地同意了攻打曹国。为了筹备这场战争,晋国将原来的二军扩充为三军,又选定了元帅,晋文公在被庐大阅三军之后带领大军出发了。
经过一番波折,还在路上攻克了卫国,晋军终于围困住了曹国的国都,但是曹国国都城坚池深,一时难以攻克,晋军士兵死伤无数。曹国人为了打击晋军士气,便将晋军士兵的尸体挂在城墙上示众,看到攻城的同袍死后都不得安宁,晋军之中果然人心惶惶,晋文公深以为患。有人建议说:“他们这样对待我们的士兵,我们驻扎在他们的祖坟旁边祸害他们的祖坟。”
于是晋文公就将大军迁到了曹国人祖坟附近,曹国人见了果然人人惊惧,民心不稳,只好将战死的晋军尸体用棺木收殓了送还晋军。晋文公命令军队趁着曹国人心大乱之际进攻,果然攻克了曹国的都城。
晋军虽然攻克了曹国,但是楚国却没有按照预测的那样撤回围攻宋国的军队回来救援曹国,反而攻击得更加猛烈了。宋国抵挡不住,再次派人相晋国告急。晋文公对元帅先轸说:“宋人又来告急,如果不去救援,宋国就会与我们绝交,完全依附楚国;与楚国调节和谈,楚国又不答应;可是若要与楚国作战,齐国、秦国又不会支持我们,这如何是好?”
先轸说:“不如让宋国使者送礼给齐国、秦国,请他们代为调解周旋。我们抓住曹国的国君,再将曹国、卫国的土地分给宋国,楚国与曹国、卫国是盟友,必定不会答应和解,到时候齐国、秦国收了宋国的礼物又被楚人的不给面子所激怒,能不与楚国开战吗?”晋文公觉得有理,便依计行事。
晋国联合了齐国和秦国,占了优势地位,看到形势越来越严峻,楚成王有意退兵,便派人告诉在前线领军的令尹子玉。但是子玉骄傲自负,因为曾经有人批评他无带兵之能,最多只可统帅三百乘战车,他便不肯听命撤军,只派人去向楚成王请战说:“我不为立下战功,只为了用事实堵住小人之口。”楚成王见子玉不听命令,十分气愤,只给了子玉少量的军队和一百八十乘战车。
子玉并非无能之辈,在开战之前,他先派宛春到晋国军营去谈判:“请贵军恢复卫国国君之位,将曹国的土地还给曹国,我就退军解宋国之围。”狐偃本想拒绝,但先轸却看出了其中的阴谋,他说:“如果楚国说了一句话就能平定曹、卫、宋三国的危难,而我们却用一句话拒绝其请求,将三国推入亡国的险境,那就是我们不合礼制了、不得人心了。我们不如私下与曹、卫谈判,给予他们好处,再将宛春抓起来激怒楚国,到时候挑起战端的罪名就是楚国的了。”晋文公采纳了先轸的建议,曹国和卫国果然与楚国绝交了。
子玉知道此事后十分愤怒,下令进攻晋国的军队,晋国的军队却不战反退。士兵们不明白国君为何不敢与楚国令尹正面作战,狐偃便站出来解释:“师出有名、理直气壮的军队才有战斗力,如果没有楚国的帮助,国君有不了今日。当初在楚国,国君曾与楚王约定如果兵戎相见则晋军退避三舍,现在正应当以此来报答楚国。如果我们退让了,楚军还是咄咄逼人,那么就是对方无理挑衅了。”
晋军一路退避,子玉引兵追击,一路到了城濮今山东范县临濮城,宋成公、齐国将领国归父、秦国将领小子憗率领大军驻扎于此,楚国军队则背靠险山驻扎。晋文公还顾及过去楚成王对自己的恩惠而犹豫不决,狐偃劝他说:“作战吧!如果胜利,我们就可以称霸诸侯,即使战败,于我们晋国的江山也无损。”
这时子玉派人来下战书:“请与君之士戏,君冯轼而观之,得臣子玉之名与寓目焉!”晋文公则派使者送去回复,约定明日开战:“敢烦大夫,谓子:戒尔车乘,敬尔君事,诘朝将见!”