战死大半的情况下仍手舞长刀,酣战不止。后来,刘牢之的儿子刘敬宣及骑兵主力相继前来,起义军溃退,刘裕乘胜收复山阴(今浙江绍兴)。孙恩逃回海上。
隆安四年(400年)五月,孙恩攻克会稽郡,杀死谢琰。十一月,刘牢之再次领兵东征,孙恩败退。刘牢之驻扎上虞,派刘裕戍守句章城(今浙江宁波)。句章城矮小,士兵又不到数百名,刘裕常常披坚执锐,身先士卒,每战都冲锋在前,起义军这才退回浃口。
隆安五年(401年)春,孙恩频繁进攻句章城,每次都被刘裕击败。三月,孙恩北击海盐县,刘裕跟踪追击,在海盐县城旧址筑起城池。起义军连日攻城,城内兵力空虚,刘裕就挑选数百人组成敢死队,都脱掉盔甲,手持短兵器,击鼓呐喊冲出城。起义军遭到震慑,士气大丧,丢盔卸甲逃散,大帅姚盛被斩。刘裕虽然连战连胜,但考虑到众寡悬殊太大,于是假装弃城而逃,诱使起义军蜂拥进城。他趁其懈怠,发兵伏击,大败义军。
六月,孙恩转进渡海,准备突袭丹徒(今江苏镇江),聚集部众达十余万。刘牢之还驻山阴,京师震动。刘裕闻讯,日夜兼程,与起义军同时抵达丹徒。当时起义军和北府军众寡悬殊,又加上长途急行军十分疲惫,而丹徒守军又无斗志。孙恩率兵数万,攻打蒜山,遭刘裕部猛攻而大败,跳崖投水而死者甚众。八月,朝廷加刘裕为建武将军、下邳太守。刘裕率领水军追击至郁洲,又大败孙恩,迫使其南逃。十一月,刘裕在海盐再度击破孙恩。自此,他三战三捷,俘虏义军数以万计,而义军遭遇“饥馑疾疫”,死亡过半,从浃口撤至临海。
在转战三吴的几年中,刘裕屡充先锋,每战挫敌,其军事干略得到初步显露。他不仅作战勇猛,披坚执锐,冲锋陷阵,且指挥有方,富有智谋,善于以少胜多。当时诸将纵兵暴掠,涂炭百姓,独有刘裕治军整肃,法纪严明。他率水军继续追讨孙恩,孙恩畏惧被擒,于是在临海(治章安,今浙江临海东南)投海而死。
孙恩起兵,消耗了晋廷兵力,造成京防空虚,这给盘踞长江上游军事重镇荆州、虎视三吴的桓玄以可乘之机。元兴元年(402年),骠骑大将军司马元显率军西讨桓玄,桓玄也率荆楚大军南攻司马元显。司马元显派刘牢之抵御,刘裕也随军前往。刘牢之率部到达溧州(今江苏溧阳)时,遭遇桓玄所部,刘裕请求发起攻击,未得同意。刘牢之打算派刘敬宣到桓玄营中讲和,遭到刘裕与刘牢之的外甥何无忌联袂坚决谏阻,刘牢之不听。桓玄攻入建康(今江苏南京)

