郑经死后台湾内乱,统一台湾势在必行。康熙二十二年(1683年),刘国轩得知施琅准备进攻,便从台湾本岛调度乡兵到澎湖,并将商船以及私人用船都改为军舰(大小炮船、鸟船、赶缯船、洋船、双帆等各式战船约200艘),准备决战。
施琅出动
康熙二十二年六月十四日(1683年7月8日),施琅从铜山岛出发,姚启圣也拨3000人同施琅出征(清军24000人,大鸟船70艘、赶缯船103艘、双帆居船65艘)。十五日(9日)郑军哨船发现清军已到花屿、猫屿一带,赶紧回报刘国轩,当晚清军在八罩岛过夜。
十六日(10日)施琅进攻娘妈宫,以速度快的鸟船当作先锋。刘国轩让林升、江胜指挥水军;邱辉为先锋,自己在娘妈宫港口督战。当时受风势阻扰,清军不敢前进,只有以蓝理为首的7只舰队突入郑军。
施琅再派出第二波鸟船部队,交战不久后开始涨潮,一些清军船只被海水冲向岸边,郑军趁势将舰队分成两翼包围清军。施琅见状赶紧突入郑军,想解救被围困的船只,却被林升率军包围。施琅在交战中被火铳射伤右眼,不过没有失明;林升也被大炮打断左腿。
林升负伤让郑军失去指挥,施琅借机撤离战场,到西屿附近的海上休息。
施琅在十七日(11日)返回八罩岛,八罩岛地形险恶,船只遇暴风很容易撞上岛边的暗礁,农历六月又是容易发生台风的时节,施琅却很幸运没碰到台风。刘国轩得知清军在八罩岛休息,亲自进攻却被施琅击退。]施琅趁势在十八日(12日)先派战船攻取澎湖港外虎井屿、桶盘屿。
清军总攻
二十二日(16日)早七时,施琅决定发动总攻击,将舰队分成三路进攻,剩下约80艘当后援部队:中路:共有56艘船,分成8队,每队有7艘船。由施琅亲自指挥,作为主力进攻娘妈宫。
右路:共有50艘船,由总兵陈蠎等从澎湖港口东侧东莳攻入鸡笼屿、四角屿,后会合中央部队夹攻郑军。左路:共有50艘船,由总兵董义等从澎湖港口西侧内堑攻入牛心湾,让郑军误判清军要在此地登陆。
天亮前,开始刮起台风。辰时(7时—9时)受台风影响,海上吹起西北风,郑军顺着风势进攻,一时处于优势,清将朱天贵被炮击而死。到了中午,台风受到赤道锋面带的影响,海上开始吹南风,风向转变成对清军有利。
施琅命令全军反攻,顺着风势发射各种火器,并且以数船围攻郑军一船,郑军全面崩溃,江胜战死、邱辉自焚。共毙伤郑军12000人,俘5000余人。击毁、缴获战船190余艘。
刘国轩眼见大势已去,率领残余部队从北面吼门退往台湾,澎湖各岛郑军都向施琅投降。清军阵亡329人,伤1800余人,船只无一损失。
善后事务
施琅战胜后,考虑台湾水道非常险恶,进军困难。施琅决定暂缓进攻,采取攻心战术,让郑氏王朝从内部崩溃。郑军战败消息传到台湾,人心开始不安。为了延续政权的生存,有将领提出进攻菲律宾,得到冯锡范同意。却传出远征军只想抢劫,还打算逃往海外,因此刘国轩阻止此计划。
七月十三日(9月3日),施琅率军在台湾登陆。后来在刘国轩大力主张下,郑克塽于七月十五日(9月5日)向施琅投降,并于八月十八日(10月8日)剃发易服,郑氏王朝正式灭亡。