戰(zhàn)爭(zhēng)爆發(fā)前,鑒于中越兩國(guó)的特殊關(guān)系及法國(guó)侵略越南給中國(guó)造成的嚴(yán)重威脅,再加上左宗棠、張之洞等主戰(zhàn)派的強(qiáng)烈呼吁,清政府表面上一改往日的消極態(tài)度,一方面敦促李鴻章抓緊和法國(guó)談判,另一方面增強(qiáng)了原駐北圻的桂軍(廣西清軍)兵力,又命云南方面派兵出境,互為聲援,并派人聯(lián)絡(luò)黑旗軍援越抗法。但是,清政府知道自己的實(shí)力不濟(jì),再三訓(xùn)令清軍不得主動(dòng)出擊,不得尋釁。這種自相矛盾的舉措,大大便利了法國(guó)的侵略部署。
1883年12月初,北圻法軍已增加到近萬(wàn)人,大部分集中在河內(nèi)地區(qū),作戰(zhàn)準(zhǔn)備基本就緒。而此時(shí)清軍方面,負(fù)責(zé)北圻東線防務(wù)的廣西巡撫徐延旭托病滯留諒山,所屬四十四營(yíng)一萬(wàn)五千六百人,分駐北寧、太原、高平、諒山等地。其中左路統(tǒng)領(lǐng)廣西提督黃桂蘭、右路統(tǒng)領(lǐng)廣西道員趙沃共率二十五營(yíng)九千六百人守北寧。后又新招募擴(kuò)編十九營(yíng)六千人。
負(fù)責(zé)西線防務(wù)的云貴總督岑毓英雖然奉命力保紅河中游戰(zhàn)略要地山西,但尚未啟程,進(jìn)駐山西的滇軍僅有三個(gè)營(yíng),加上劉永福率領(lǐng)的黑旗軍(十二營(yíng)三千五人)和吏部主事唐景崧率領(lǐng)的少量桂軍(二營(yíng)八百人),山西守軍共約五千人。
(一)山西失守
山西位于河內(nèi)以西九十多里,是控制紅河中上游的戰(zhàn)略要地,也是清軍聯(lián)系東西線的主要通道。
劉永福在1883年9月11日率領(lǐng)黑旗軍退守山西后,一直在不斷地加強(qiáng)城防和沿岸河堤工事。劉永福命令部眾加固城墻,從河岸到城北門(mén)筑起五重木柵,在河岸修筑炮臺(tái),每隔十丈放置一門(mén)鐵炮,并在水面設(shè)木排、竹筏阻塞河道。城北為主要防御方向,集中黑旗軍六營(yíng)、桂軍一營(yíng)占據(jù)既設(shè)陣地,以控制河道,阻止敵人向北門(mén)進(jìn)攻;城東也是重點(diǎn)防御方向,由黑旗軍五營(yíng)組成兩道陣地,防敵陸路向東門(mén)攻擊;唐景崧商調(diào)滇軍督帶張永清率三營(yíng)由興化到山西,防守西門(mén);黑旗軍一營(yíng)、桂軍一營(yíng)配置于南門(mén),以備機(jī)動(dòng);黃佐炎越軍部署在南門(mén)外鄉(xiāng)村中,相機(jī)策應(yīng)。劉永福駐外城,唐景崧駐內(nèi)城,督戰(zhàn)指揮。
12月11日,法軍新任遠(yuǎn)征軍總司令孤拔率領(lǐng)六千多人,分水陸兩路從河內(nèi)出發(fā)向山西進(jìn)軍。一路由軍艦十二艘,板船四十艘,載陸軍三千二百余人,溯紅河西上;另一路陸軍兩千六百余人沿紅河南岸直撲山西。
14日上午9時(shí),法軍向山西城發(fā)起進(jìn)攻,摧毀沿岸炮臺(tái),并在城東北方向登岸,登岸步兵迅速展開(kāi),向黑旗軍陣地接近。黑旗軍依托河堤陣地進(jìn)行還擊,使法軍遭受?chē)?yán)重?fù)p失而不能及時(shí)發(fā)起沖擊。下午,劉永福調(diào)來(lái)東門(mén)的黑旗軍主力,隱蔽地迂回到法軍的左側(cè),并插入法軍艦隊(duì)與步兵之間,猛烈攻擊法軍側(cè)翼,使其兩面受擊,而法軍艦炮則不敢開(kāi)炮射擊。孤拔見(jiàn)形勢(shì)危急,立即令法軍轉(zhuǎn)入防御,集中所有炮兵向迂回的黑旗軍轟擊。黑旗軍迂回部隊(duì)由于傷亡較大被迫撤退。下午4時(shí),孤拔下達(dá)攻擊令,法軍向堅(jiān)守河堤的黑旗軍發(fā)起猛烈攻擊。黑旗軍頑強(qiáng)扼守陣地,以排槍射擊大量殺傷敵人,迫使余敵潰退。法軍大炮猛轟,步兵多次進(jìn)行沖擊。當(dāng)法軍迫近河堤時(shí),黑旗軍與敵人展開(kāi)激烈的肉搏戰(zhàn)。經(jīng)過(guò)一個(gè)多小時(shí)的激戰(zhàn),法軍以死傷士兵二百人、軍官二十二人的代價(jià)奪取了河堤陣地。15日1時(shí),唐景崧組織桂軍和滇軍乘夜進(jìn)行反擊,企圖奪回陣地,但激戰(zhàn)四小時(shí)仍未能獲得成功。于是將城北守軍撤至外城,依托土圍分段堅(jiān)守。15日上午雙方調(diào)整部署。午后,法軍開(kāi)始向城西運(yùn)動(dòng),企圖奪取城西滇軍據(jù)點(diǎn),然后從城北、城西同時(shí)攻城。劉永福判明情況后,率黑旗軍主力增援西門(mén),并加強(qiáng)防御工事。這一天,法軍大炮不停地轟擊山西城。16日拂曉,法軍多次猛攻北門(mén),均未得逞。但守軍傷亡較大,彈藥告竭。法軍同時(shí)進(jìn)攻西門(mén),炮火猛烈。西門(mén)城墻最終被法軍炸毀。越奸阮廷潤(rùn)等人叛國(guó)投敵,其余越軍也貪生怕死,穿上白衣,打開(kāi)城門(mén)向法軍投降。危急之下,劉永福、唐景崧督軍堅(jiān)守到深夜,不得已各自率軍退出山西,轉(zhuǎn)至興化。26日,山西淪陷。
山西的首戰(zhàn)失利,使清軍失去了威脅河內(nèi)的前哨陣地,丟掉了控制紅河的戰(zhàn)略要點(diǎn),北寧亦失犄角之勢(shì)。滇軍隨即撤出興化、宣光,使滇桂聯(lián)系全斷,東西兩線協(xié)同作戰(zhàn)增加了更大困難。這樣,清軍在越南北圻作戰(zhàn)便受到了嚴(yán)重影響。
(二)北寧失守
北寧是清軍在越南北圻所據(jù)守的戰(zhàn)略要地。
北寧守軍經(jīng)過(guò)一年多的準(zhǔn)備,工事不斷加強(qiáng),兵力逐步增加,到戰(zhàn)役開(kāi)始前,總兵力已達(dá)五十八營(yíng)兩萬(wàn)四千余人。其兵力部署是:副將黨敏宣率八營(yíng)防守北寧東六十余里之三江口,以阻法軍溯六頭江包抄北寧后路;總兵陳德貴率四營(yíng),扼守北寧東北之扶朗,以阻止敵艦船沿江進(jìn)攻涌球威脅北寧;副將韋和禮率十營(yíng)分守北寧東南之桂陽(yáng)、左河,劉永福黑旗軍十二營(yíng)守?cái)埳剑钄酬懧分髁M(jìn)攻北寧;總兵陳德朝率兵八營(yíng)駐守北寧南五十余里之新河口和慈山,以阻敵沿慈山大路進(jìn)攻北寧;參將李應(yīng)章率一營(yíng)防守北寧以西之金英,以扼山西入北寧之通道;總兵陳朝綱率兩營(yíng)防守北寧城北八里之涌球(涌球北面臨河,有兩座土山,是北寧的屏障和安危相關(guān)要點(diǎn));副將周炳林率四營(yíng)防守涌球東五里之塞河處,以阻法軍沿河而上,攻擊涌球;黃桂蘭、趙沃率親兵兩營(yíng)、參將蔣大章率一營(yíng)另兩哨防守北寧城池。此外,為保持與諒山的聯(lián)系,在北寧與諒山之間的諒江部署有五營(yíng)。
山西失陷后,北寧受到法軍來(lái)自海陽(yáng)、河內(nèi)、山西三個(gè)方向的嚴(yán)重威脅。因此清廷十分驚恐,多次下達(dá)諭旨,要防軍固守北寧。但統(tǒng)帥徐延旭老邁昏庸,剛愎自用,對(duì)現(xiàn)代戰(zhàn)爭(zhēng)的戰(zhàn)略戰(zhàn)術(shù)一無(wú)所知。他在清流派人物的吹噓薦舉下,受到清政府破格提拔,騙得了巡撫高官之后,即致電清廷告病,以種種借口拒絕親臨北寧前線,后來(lái)在清廷的多次催促之下才勉強(qiáng)出關(guān),駐守諒山。徐延旭把北寧的作戰(zhàn)指揮權(quán)交給了左路統(tǒng)領(lǐng)廣西提督黃桂蘭,和右路統(tǒng)領(lǐng)廣西道員趙沃。黃桂蘭雖然是行伍出身,但他的部隊(duì)裝備落伍,火炮數(shù)量少,步兵中只有部分士兵使用進(jìn)口或仿制的比較先進(jìn)的步槍?zhuān)易訌椣∪保徊簧偈勘允褂玫睹ⅧB(niǎo)槍、土槍等雜式武器。趙沃不僅昏庸無(wú)識(shí),而且年老多病,在形勢(shì)緊張時(shí),多次上書(shū)稱(chēng)病告假,但卻受到徐延旭的信任。黃、趙二人地位相當(dāng),互不相讓?zhuān)虼俗蟆⒂覂陕奋娀ゲ唤y(tǒng)屬,各成系統(tǒng),此乃兵家之大忌。況且,前線的將領(lǐng)們此時(shí)已經(jīng)被上面的政策弄糊涂了,不知道到底是和還是戰(zhàn),他們以為駐軍只是擺擺樣子而已,生怕自己的挑釁壞了和議大局,因此備戰(zhàn)并不認(rèn)真。
1884年2月,米樂(lè)接替孤拔成為法國(guó)遠(yuǎn)征軍少將總司令,率領(lǐng)一萬(wàn)六千人進(jìn)軍北寧,意圖把中國(guó)軍隊(duì)徹底趕出越南。
3月7日,米樂(lè)、波里也率第一旅六千余人渡過(guò)紅河,8日以一部兵力由嘉林佯渡新河,制造出法軍沿慈山大路向北寧進(jìn)攻的假象,主力則沿新河南岸向東疾馳;同日,尼格里率第二旅六千余人、艦船二十余艘,從海陽(yáng)出發(fā)沿太平江北上,上午9時(shí)開(kāi)始攻擊扶朗,清軍陳德貴等營(yíng)被法軍包圍。黃昏時(shí)分,陳德貴等營(yíng)沖出敵圍,敗退六七里,扶朗失陷。
9—11日雙方調(diào)整部署,清軍將扶朗戰(zhàn)場(chǎng)上敗退下來(lái)的四營(yíng)兵力重新做了部署,但沒(méi)有增派兵力加強(qiáng)涌球水路的防御。此時(shí),法軍陸路進(jìn)攻部隊(duì)完成了準(zhǔn)備。