这里的山西省不是山西省,而是越南北部的山西地区,今天河内、直辖市、哈哈的山西市。公元1883年12月中法之间发生的山西战争就是在这里发生的。交战双方是中越联军(黑旗军、清军、阮)和法国侵略军。当时法国远征军总司令首先进攻山西,然后按照北宁的作战方针,率领6000人分成水陆两队,从河内向山西进军。中越联军被迫参战。
山西位于红海南岸,是控制红海中上游的战略要地。城市周长约20里,具有砖石耐省和土质外省。黑旗军进驻山西后,进一步加强这里的城防工程,在洪江设置竹木阻挡河流,沿着河岸修建炮台,从北门到河岸5里远,堆积5里。刘永福考虑到山西的存亡关系重大,帮助防守的云南、桂军人数少,斗志不高,决心发扬黑旗军勇敢顽强的战斗精神,依靠城墙和外围工程粉碎敌人的进攻,确保河岸和城北市区成为防御的重点。在得知河内法军出动的信息后,刘永福和唐京广(清政府派往黑旗军的官员——人事主任)立即巡视阵地,鼓励官兵,准备痛击入侵的敌人。同时,请北宁清军与越南义军一起乘隙挺进河内,或假装向新河和加林方向牵制敌人。
12月14日上午9点左右,法军发动总攻,用舰炮和哈奇基斯机枪掩护步兵,摧毁了布萨要塞。防御堤坝的黑旗军起来反击,努力延缓敌军的行动。同时,刘永福命令东门外的黑旗军五个营利用地形秘密向敌方一侧机动,配合堤防守军夹击敌人。中午12点左右,迂回敌后的黑旗军突然出现在陆上法军和水路舰队之间,从翼侧向西移动的敌人发起攻击,法舰炮火无法发挥威力。知道情况危急,立即命令法军转入防御,集中所有炮火反击黑旗军。由于敌人的密集炮火和机枪的阻挡,黑基军迂回部队伤亡惨重,被迫撤退。下午4点,法军再次发动进攻,城北黑旗军顽强抵抗,战斗异常激烈。法军逼近城北大堤时,黑旗军跳下工事,与敌人展开了肉搏战。经过一个小时的激战,法军以200名士兵、22名军官的代价夺取了河岸阵地。
15日凌晨1时,守军趁着夜色接近河岸,突然发起反击,夺回了河岸阵地。那天晚上月亮亮得像白天一样,法军拼命抵抗,突袭没有成功,但杀死了很多敌军,活捉了20名非洲兵、5名法国海军陆战队士兵。刘永福、唐景生知道江位置不能保证,便将守城撤到郊外城市,逐段坚守。当天上午双方调整部署后,法军不断进行炮击。下午,孤立以主力向西机动,夺取喙炮台,企图从西门攻入城内。刘永福判断情况后,亲自率领黑旗军主力增援西门加强了防御工程。
16日凌晨,法军猛攻北门和多里炮台。北门守军沉着应战,接连向城下扔火药包,阻止敌人前进。防守喙炮台的运军也奋起反击,但最终炮台设施陈旧,被敌人突破,撤退到外省,敌人可以进入西门围墙。当天上午,法国炮兵配合舰炮,以猛烈的炮火摧毁了西门城楼,摧毁了所有防御工事。守军伤亡比较大。下午,法军从西门突入城市,守军依靠城市建筑顽强狙击,激战到晚上。为了保存有生力量,黑旗军和清军趁着黑夜从南门和东门撤出山西省,经过县,集中精力兴化。城南村的越南北朝军队也很快四散逃跑了。
山西保卫战是清廷被迫应战后的第一次作战。在第一次战斗中战败,失去了进攻和撤退的战略要地,不仅失去了对河内法军的威胁,而且给东西两线的联系增加了困难,对今后的北原战争产生了不利的影响。
山西作战失败的原因是多方面的。其中之一是驻扎在北宁的季军什么都不做。他们没有增援陕西,也没有向河内方向出击,而是给予敌军必要的牵制,使法军能够集中兵力向西,山西水军没有得到友军的支援,陷入了孤军奋战。与此同时,云南芜菁党型消极应战,君主力量推进缓慢。到战斗前夜,少量部队进入山西兴化,不能起到支援山西守军作战的作用。另外,刘永福等人在作战指导上也有不当之处。面对优势敌人的攻击,不能利用有利地形,伏击敌人,在运动中进攻。如果单纯采用固守城堡的战法,就无法阻挡敌人强大炮火的强攻。