Ô Mã Nhi được giao nhiệm vụ bảo vệ đoàn thuyền lương của Trương Văn Hổ, nhưng cho rằng quân ta không thể ngăn cản được đoàn thuyền lương này nên đã tiến về hội quân ở Vạn Kiếp.
Trần Khánh Dư dự đoán khi đoàn thuyền chiến của Ô Mã Nhi đi qua, có thể đánh được đoàn thuyền lương nên đã bố trí một trận mai phục. Đúng như dự đoán, mấy ngày sau, khi đoàn thuyền lương của Trương Văn Hổ nặng nề, chậm chạp tiến qua Vân Đồn, liền bị quân của Trần Khánh Dư từ nhiều phía đổ ra đánh dữ dội. Phần lớn thuyền lương của địch bị đắm, số còn lại bị quân Trần chiếm.