关陇南面有一胜地,叫做仇池。地方百顷,平地凸起,四面陡峭险峻,高约七里,环绕着羊肠曲道,必须经过三十六座山峰,才能登上顶端。山顶水草丰美,还可以煮盐,向来被氐族占据。东汉末年,有个叫杨腾的氐族头目占据此地。他的孙子杨千万曾向曹魏称臣,被封为百顷王。传到杨飞龙这一代,氐族逐渐强盛,晋朝封杨飞龙为平西将军。杨飞龙没有子嗣,只有一个外甥令狐茂搜。令狐茂搜改姓杨氏,又传了三代到杨初。杨初自称仇池公,他的曾孙杨纂为苻秦所灭。苻秦亡国后,杨氏遗族杨定逃到陇右,招集一千多名氐族旧众,仍然据守仇池。后来,杨定迁居距仇池二十里的历城,夺取天水、略阳等地,自称陇西王,后来为西秦王乞伏乾归所杀。杨定的堂弟杨盛留守仇池,自称仇池公,出兵汉中,向晋朝称臣。晋主封他为征西大将军,兼仇池王。刘裕篡夺晋朝后,宋主又封杨盛为车骑将军,晋爵武都王。
元嘉二年,杨盛去世,儿子杨玄即位。魏主封杨玄为征南大将军兼南秦王。才过了四年,杨玄也去世了。死前,杨玄对弟弟杨难当说:“眼下,国家还没有安定下来,更需要励精图治。我儿子保宗年幼无知,还劳烦弟弟你继承大统,不要辜负先父的重望!”杨难当极力推辞,说愿辅立侄子。杨玄过世后,他果然拥立杨保宗为嗣主。可是杨难当的妻子姚氏不停地吹耳边风,说:“现在国势衰微,应该有个年长一点儿的国君,才能稳定人心,你怎么就去辅佐一个小孩子呢?”杨难当听信妇言,竟废黜杨保宗,自称征西大将军、秦州刺史、武都王,督管雍、凉、秦三州的军事。
那时赫连族已经灭亡,上邽空虚,杨难当令儿子杨顺占据上邽。又任命杨保宗为镇南将军,令他驻守宕昌。杨保宗想夺回王位,不料事情泄漏,被逮捕入狱。
当时,梁州刺史甄法护不善治理城镇,宋主特意派刺史萧思话前去代任。萧思话还没到任,觊觎汉中的杨难当已经发兵袭击梁州。甄法护带着妻儿逃奔洋州。
萧思话到了襄阳,得知梁州失守,忙令司马萧承之率五百人做前锋,长史萧汪之率五百人做后应,前去攻敌。萧承之就是后来齐太祖的父亲,他曾是济南太守,此次调任汉中太守,和萧思话一同东行,兼任行军司马。萧承之奉令做前驱,自思所带将士太少,于是沿途招募一千多名壮丁,进据磝头。
杨难当在汉中大肆掠杀,而后率部众返回仇池,令将军赵温留守梁州。赵温又令魏兴太守薛健据守黄金山,副守姜宝据守铁城。铁城与黄金山相对,两地仅隔一里,萧承之派阴平太守萧坦进军两地。萧坦连拔铁城和黄金山,杀得薛健、姜宝大败而逃。赵温亲自出来对仗,也被杀得落荒而逃。因萧坦受伤,退回大营养伤,萧承之另派司马锡文祖戍守黄金山。此时,后队萧汪之已率部众赶来,将军裴方明也奉临川王刘义庆之命赶来助战。萧承之随即率各军一路追击,在汉津杀败杨难当的儿子杨和以及赵温。
不久,萧思话也率兵赶来,与萧承之合力进攻,连战连捷,不但将退守大桃的敌众全部赶走,连梁州也唾手取来。以前,被杨盛夺去的魏兴、上庸、新城三郡,都被宋军收复,汉中全境没有一个氐族人。杨难当担心宋军入境,慌忙上奏赔罪。宋主刘义隆得好便收,因而赦免了杨难当的死罪;令萧思话镇守汉中,加封他为宁朔将军;召回萧承之,任命他为太子屯骑校尉;将甄法护逮入大牢,令他自尽。
话说回来,魏主拓跋焘得到河南后,分兵戍守,又加封崔浩为司徒,长孙道生为司空。崔浩劝魏主偃武修文,招贤纳士,于是一群贤才得以入朝辅政。崔浩又改订律令:除四岁、五岁这两个年龄阶段的刑律不变以外,其他各年龄层都增加一年刑罚;如果妇女在刑罚前怀有身孕,则缓期执行刑罚,等婴孩百日以后,再按律处决。在崔浩的建议下,宫门前悬着一面登闻鼓,百姓一有冤屈,便可以击鼓鸣冤。这些政策深得人心,北魏国内安定承平,国势蒸蒸日上。崔浩又想通好江左,息争安民。于是,在他的一再恳请下,魏主令散骑侍郎周绍出使宋朝,并乞求和亲。宋主刘义隆含糊作答,也派使臣魏道生去北魏通好。此后,两国互通使节,往来不绝。
不久,魏主册立儿子拓跋晃为太子,再次派散骑常侍宋宣去刘宋为太子求婚。宋主仍然支吾以对。虽然亲事始终没有定下来,但南北也安宁了十多年。