第六節 北圻陸路反攻作戰

一、雙方作戰方針和部署

清廷於1884年8月26日被迫對法宣戰以後,雖然確定了沿海防禦、陸路反攻的方針,命岑毓英催促劉永福趕緊督軍進取,又令岑毓英、潘鼎新率滇、桂各軍速赴北圻戰場,盡力反攻。但是,究竟如何反攻,開始並不明確。後來根據前方奏報,才逐漸確定:東線桂軍進攻諒江、太原,西線滇軍和黑旗軍進攻宣光,並推進到白鶴、永祥附近地域;兩軍在太原、永祥一帶會師後,合力進攻北寧、河內。10月初,清廷鑒於基隆失守,更急於攻法之所必救,電令北圻各軍力圖進取,「直逼西貢等處,庶使分兵西援,台灣乃可稍鬆」1。對此,岑、潘二人一開始就沒有信心。潘鼎新當即表示:「台北吃重,此間一軍前進,恐不足牽制;法方於河內、北寧增兵迎拒,西貢萬難驟達。」2岑毓英也強調「西貢系南圻地方,隔順化及寧平、南定等處,皆有法人堅守,道阻且長,萬難進齲」3潘鼎新和岑毓英等固然有畏敵怯戰的一面,但清廷進軍西貢的要求也是當時清軍兵力難以勝任的,這反映了清廷戰略指導上的無知。

法軍方面,因米樂回國養病,由波裡也於9月8日接任遠東軍總司令。當時,北圻法軍計有第一、第二兩旅及內河艦隊等共約一萬八千餘人,分守陸岸(今陸南)、諒江、太原、宣光、館司等前沿要地,兵力比較分散。波裡也根據法國政府東攻台北、西取諒山的戰略方針,決定在北圻採取西守東攻的作戰方針,即西線堅守宣光、興化,東線集中兵力奪取諒山,得手後,再轉兵西向。

二、東線桂軍反攻失利

東線桂軍奉命再度開赴北圻戰場後,開始進展順利,至1884年9月中旬,署理廣西提督蘇元春率領的桂軍主力十三個營(約四千八百人)進抵船頭(今陸岸),10月初曾一度攻佔陸岸;與此同時,記名提督方友升及總兵周壽昌等所部九個營(約三千二百人)進佔郎甲及其以北地區。上述東、西兩路桂軍「互相犄角,自為戰守」。潘鼎新率淮軍五營及道員趙濟川一營駐諒山,「整理操練,以備兩路策應」1。此外,副將馬盛治所部六個營駐於牧馬、新街一帶,牽制太原守敵。東線清軍兵力共約一萬二千人,然而,「營哨各官大半代理,精壯能戰者僅十之二三」2。

這時,法軍已在河內、北寧集結完畢。波裡也為了粉碎東線清軍的反攻,進而奪取戰略要地諒山,以第二旅編成兩個縱隊,分別進攻郎甲、船頭,以第一旅一部兵力配置於諒江附近,準備隨時機動。法軍主力於10月8日自河內出發。

10月8日,尼格裡率領第二旅主力約三千人進攻諒江北面十餘里的郎甲。駐守該村的方友升等麻痺大意,沒有做好必要的防禦準備,對關係郎甲安危的南堡高地也未予以足夠重視。因此,法軍輕取南堡高地,隨即在此佈置炮兵,以密集炮火掩護主力從兩側迅速包圍了郎甲村。守軍倉促應戰,除方友升率領一部撤至郎甲東側高地外,尚有數百人被圍於村中。清軍為解救被圍部隊,兩次由側翼反擊敵軍炮兵陣地,均未成功。法軍乘勢抽出部分兵力進攻村北高地周壽昌部。該部兵力數倍於進攻之敵,但稍事抵抗就向觀音橋、屯梅方向潰退。法軍接著全力進攻郎甲村,守軍浴血奮戰,與敵人肉搏拚殺,直至全部犧牲。此戰,清軍傷亡七百餘人,法軍死傷百餘人。尼格裡也在這次戰鬥中受傷,暫時返回河內。波裡也兼統第二旅,以一部兵力守郎甲,其餘撤至諒江,後又向東增援船頭。

進犯船頭的法軍第二旅一部千餘人,由端尼埃上校率領,搭乘炮艦五艘、拖般十餘隻,於10月2日離北寧,經七廟,沿陸南江(今陸岸河)前進。蘇元春率領的東路清軍在船頭附近築有塹壕、堡壘等較堅固的防禦工事,並在西南二十里的尼村附近配置部分兵力,防止敵軍上岸。10月6日上午,法軍進至尼村,艦炮齊發,與守軍展開激戰。清軍傷亡較重,但仍竭力抵抗,終於迫使敵人後撤。此後,雙方相持於船頭以西地區。9日,法軍得到增援, 10日再次發起進攻。清軍總兵陳嘉督軍迎戰。當法軍第一梯隊四個連向船頭主陣地衝擊時,陳嘉以一部兵力依托陣地頑強抵抗,親率主力向法軍右翼猛烈反擊,將敵兩個連大部殲滅,並擊斃其右翼指揮官。殘餘法軍狼狽逃竄。與此同時,法軍左翼兩個連仍在拚死掙扎,端尼埃也以其所控制的機動兵力在炮兵及艦炮火力支援下瘋狂反撲。陳嘉見翼側受到威脅,主動撤回主陣地。此後,戰鬥又成對峙狀態。

清軍在船頭重創法軍精銳部隊,殲敵二百餘人,士氣為之一振。法國侵略者為船頭守軍「這樣奮不顧身地激烈作戰」1而惶恐不安。但是,株守諒山的潘鼎新未能及時調部增援。蘇元春在獲知西路郎甲失守、後援無望的情況下,便於10月11日夜間率部撤回谷松。

郎甲、船頭既失,桂軍東、西兩路的形勢為之大變,戰局開始陷入被動。清廷力促滇、桂兩軍聯成一氣,規復北寧、河內,甚至直搗西貢的戰略意圖,隨之成了泡影。但是,這時法軍對台灣淡水的進攻遭到失敗,土氣為之沮喪。巴德諾聲稱:「尼格裡將軍在郎甲的勝利,在某種範圍內,可減輕台灣消息的令人不快印象,但其效能,是否將被北京朝廷敏銳地覺到,尚屬疑問。我們東京的遠征隊,距離中國邊境還太遠,不能使帝國政府受到嚴重的警告。」1茹費理也認為只有乘勝向廣西邊境推進,方足以「有力地引起帝國政府的憂慮」2。然而,波裡也在攻佔郎甲、船頭之後,鑒於援兵未到,加之後方受到越南義軍的牽制,無力繼續發展進攻,不得不暫取守勢,於是將主力撤回北寧、河內,以一部兵力在船頭、郎甲一線巡邏警戒。12月以後,法國陸續增兵遠東,三分之一赴台,三分之二赴越,並將北圻戰場的法軍改歸陸軍部指揮(原由海軍部指揮)。在待援期間,波裡也積極進行攻取諒山的各種準備,以船頭為基地,修築工事、道路,屯積作戰物資。

清軍方面,西線滇軍和黑旗軍已於1884年10月底進抵宣光城下,正在竭力圍攻。東線桂軍也陸續補充了兵力,調整了部署:以駐谷松的蘇元春、陳嘉所部十八營為中路;以駐觀音橋的楊玉科、方友升所部九營為西路;以駐車裡、那陽一帶的王德榜所部湘軍十營為東路;另以葉家祥所部淮軍五營、董履高所部桂軍五營駐諒山為後應。此外,馬盛治所部桂軍六營仍駐新街一帶。以上共有兵力五十餘營,約二萬人。

為了策應西線的軍事行動,打亂北圻法軍西守東攻的作戰部署,清政府曾命令東線清軍乘北圻法軍轉入防禦之機,主動出擊,先發制敵。但是,潘鼎新根據李鴻章「切勿攻堅傷精銳」3等指示,僅以小辨模的出擊牽制船頭方向的法軍,作出一點策應西線作戰的姿態。12月16日,中路清軍二千人在紙作社(船頭東北)伏擊法軍巡邏部隊,斃傷敵軍百餘人,取得了勝利。年底,東路湘軍進至船頭東面的豐谷,準備配合中路進攻船頭。1885年1月3、4兩日,豐谷清軍突遭法軍四千餘人猛烈攻擊,「王德榜督軍苦戰,死傷頗多,因少後門槍,且子藥已盡,勢難抵禦」1,被迫丟棄大量物資,撤回車裡。潘鼎新恐法軍由那陽迂迴蘇、王兩部之後而攻取諒山,急忙從諒山調淮軍兩營守那陽,並要求清廷迅速增援。

在此以前,兩廣總督張之洞也認為法軍專注諒山,「桂軍各道分防,兵力尚薄,必應由東路再增勁兵,以收犄角夾擊之效」2,於是命馮子材率粵軍十營,總兵王孝祺率淮軍、粵軍共八營,分別由欽州、梧州起程,經由廣西赴越。由於諒山吃緊,馮子材以八營由上思州直接入越,協同王德榜部守東路;自率兩營赴龍州籌辦糧餉軍械和招募新兵。王孝祺部中途嘩變,潰散近半,至龍州時不及二千人。

1885年1月底,法軍第一、第二旅主力七千餘人,在船頭一帶集結完畢,準備轉守為攻,向廣西邊境大舉進軍。法軍揚言分兩路前進:一路攻谷松,一路攻車裡。實則全軍指向谷松,併力進攻中路。

潘鼎新企圖阻止法軍進攻,命中路清軍(包括新配屬的董履高部五營)前出到竹山附近高地設防。2月4日,法軍集中炮火轟擊竹山清軍營壘,隨即展開猛攻。守軍頑強抵禦,但因倉卒移防,工事不堅,傷亡甚眾,被迫後撤。次日,法軍再次發起攻擊,守軍不支,退守谷松。2月6日,法軍在炮火掩護下猛攻谷松,清軍被迫撤至諒山南面三十五里處的委坡一帶。

中路清軍潰敗,諒山垂危。「東西兩軍相去遠,聞調赴援,一日之間號令屢改。」1潘鼎新時而令王德榜、楊玉科等部回援諒山,時而令其仍扎原處,時而令其夜襲法軍後路,最後又令其飛援諒山,但為時已晚,無濟於事了。就在2月12日,法軍攻佔委坡,潘鼎新於當夜逃離諒山入關,蘇元春隨之率部退入關內。2月13日,法軍未經戰鬥,即佔領了戰略要地諒山。至此,法軍在東線達到了預期的作戰目的,波裡也隨即於2月17日率領第一旅(約三千人)離開諒山,以便經河內趕赴西線,解救被圍於宣光的法軍。

諒山棄守後,馮子材毅然以守關自任,親率一營從龍州趕到鎮南關,和王孝祺部一起攔截潰散兵丁,並急調協守東路的馮軍八個營回守鎮南關。可是,潘鼎新竟「告以守關無須該軍,令仍顧東路」2。2月19日,西路楊玉科部自觀音橋、屯梅繞道撤至文淵(今同登)。楊玉科以主力防守文淵兩側高地,自率一部駐鎮南關。2月23日,尼格裡指揮法軍第二旅進攻文淵,守軍浴血奮戰,節節抵抗。楊玉科親臨前線指揮戰鬥,阻止了敵人的前進。但由於清軍發射的炮彈多未爆炸,未能予敵以大量殺傷。午後,楊玉科中炮犧牲,守軍隨即潰散,退入關內。法軍乘勢侵佔鎮南關,前鋒一度侵入我國境內近十公里的幕府附近。

由於兵力不足,補給困難,加之不時受到當地群眾武裝的襲擾,法軍於2月25日炸毀鎮南關城牆及其附近工事,退回文淵、諒山。根據波裡也離開諒山前的指令,法軍在鎮南關廢墟上立一木牌,上書「……廣西的門戶已不再存在了」。但是,當地軍民在同一地方寫著:「我們將用法國人的頭顱重建我們的門戶!」1以此作為對侵略者的回答。

馮子材聞鎮南關失守,立即疾馳二百餘里,由東路統兵回援;王德榜也率部趕回,駐於鎮南關東面三十里的油隘一帶。

潘鼎新則畏敵如虎,在文淵戰鬥之前,即由鎮南關繼續後逃至幕府。2月23日,正當文淵前線激戰之際,他又經憑祥、海村連夜逃到關內一百餘里的龍州,由於遭到當地各階層人民的憤怒斥責,「始乘船由水路返海村,日駐岸,夜駐船」2。事後,他竟謊報自己在文淵戰鬥中「督親兵助戰,槍炮聲震山谷,逆黨(法軍)紛紛倒地」3,並詭稱由他指揮各軍「收復」了鎮南關等等,以推卸東線反攻失利的責任。

東線清軍反攻失利,主要原因在於前敵指揮潘鼎新消極怯戰,畏敵如虎,以致屢誤戰機。「潘軍不是沒有戰爭經驗,又用新式槍械,節節敗退,完全是接受李鴻章失敗主義的影響。」4潘鼎新在作戰指揮上,明顯地犯了消極被動、分兵把口的錯誤。東線清軍順利進抵船頭、郎甲一線以後,正值法軍兵力分散、援軍未到和越南義軍紛起襲擾的有利時機,戰場的優勢和主動,基本上在清軍方面。然而,潘鼎新卻滯留諒山,與西線方面互相觀望,消極等待,強調「一俟滇軍牽制西路,此間有隙可乘」,才能「趁勢襲缺5,使法軍得以從容集結兵力,分別奪取郎甲,船頭。清軍被迫退守山區,喪失了戰場上的主動權。爾後,清軍經過調整補充,實力大為加強;法軍則因國內援軍未到,宣光被圍,處境相當困難,不得不轉攻為守,僅以部分兵力守備前沿陣地。這時,清軍在全局形勢上仍有可能挽回頹勢。以越北山區的有利地形,完全可以正面鉗制,側後攻擊,粉碎法軍的進攻。可是,由於清軍在總的戰略指導上消極被動,以致在兵力部署上仍將前線數十營部隊分散於觀音橋、谷松、車裡各點,正面寬廣,沒有形成重點,加上配置於諒山縱深的兵力又沒有適時向前機動,起不到預備隊的作用,以致形成前後分兵把口,被動挨打的態勢。在作戰過程中,潘鼎新決心猶豫,朝令夕改,不能組織第一線各部之間的相互協同,特別是法軍專攻中路,蘇元春部節節敗退之際,沒有及時機動翼側軍隊加強縱深防禦或向敵人側後出擊,使法軍得以長驅直入,連續突破中路防禦,直逼諒山。此外,清軍中派系矛盾的長期存在,也嚴重影響了各部之間的統一與協同。如王德榜「自負湘中老將,每與督師(潘鼎新)齟齬」1,潘鼎新便有意「徵調屢更」,使之無所適從,疲於奔命,最後反誣王「催援不至」。豐谷之戰,蘇元春不及時援救王德榜部,法軍攻中路蘇元春部時,王也就消極觀望,不主動支援,給了法軍以各個擊破的機會。

三、西線滇軍東下受阻

在正式對法宣戰前後,清廷多次命令西線指揮官岑毓英再度督師出關,與東線桂軍合力規復北圻各城。但岑遲至1884年9月28日才命令原留駐於文盤、大灘一帶的黑旗軍十個營(約三千七百人)、滇軍張世榮部五個營(約二千五百人)分道前進:黑旗軍黃守忠、吳鳳典兩部由山路繞赴陸安,出館司之後;劉永福、張世榮率部沿紅河直下,期收夾擊之效。岑毓英企圖先後奪取陛司、宣光,並以集結於雲南邊境的滇軍主力六千餘人沿紅河逐次進佔夏和、清波以及臨洮等地,得手後,再與東線清軍會師,併力進攻北寧、河內。

北圻法軍為貫徹其西守東攻的作戰方針,於10月11日撤走館司守軍,以便縮短防線,固守興化、端雄、宣光,保證河內以西地區的安全。岑毓英鑒於館司之敵自動撤離,便將黑旗軍及滇軍張世榮部集中指向宣光。

宣光城築有石牆,依山傍水,「向稱天險,城內一山聳峙,懸炮可擊外軍,城外植竹五六重,兵難破入」1。10月中旬,清軍陸續進抵宣光附近,因法軍水陸防守甚嚴,便在離城十里的琅玡、中門等處紮營。此時,東線桂軍已失郎甲、船頭,清廷嚴令滇軍速進,以分敵勢。岑毓英乃於10月20日由保勝移駐文盤,並調原駐紮於雲南邊境的記名提督吳永安、鄒復勝所部四千人和記名總兵覃修綱所部二千餘人進扎館司、夏和、清波一帶,伺機向興化等地進擊,威脅敵軍後路;同時,令宣光清軍逐步進逼城下,四面圍困敵人。

法軍為確保宣光,穩定北圻西線防禦態勢,從11月4日至12日,多次派兵增援,但大都被清軍擊退。11月12日起,清軍於宣光東南十餘華里的左育地方清河(今瀘江)兩岸挖築地營,並將以前截獲的船隻裝石塞河,以期截斷法軍水路交通。11月18日,法軍端雄、山西地區指揮官多米尼親率步、炮、工兵千餘人,搭乘炮艦五艘、民船十餘隻,趁連日大雨、清河水漲之機,增援宣光,遭到埋伏於左育清河兩岸的清軍夾擊,不能通過。次日,法軍捨舟登岸,分兩路進犯左育。清軍依托地營斃傷法軍百餘人,但因工事尚未全部構成,又遭敵人腹背夾擊,被迫撤出陣地。法軍立即上船,駛抵宣光,加強了城防力量。岑毓英強調必須先取宣光,滇桂各軍聯為一氣,才能相機進取,因而使黑旗軍和大量滇軍長期頓兵於堅城之下,不能東進,坐視法軍集中兵力專注諒山。

12月,清軍圍城部隊又得到補充。月初,唐景崧在龍州招募的四個營(二千人)經牧馬進抵宣光城外(後又擴編為六個營);月底,記名總兵丁槐所部十三小營(共三千人)出馬白關,經河陽(今河江)進至宣光。1885年1月中旬,岑毓英由文盤進扎館司,隨即派兵三千六百人由記名提督何秀林率領前往宣光方向,進一步加強圍城兵力。在此期間,宣光清軍重新調整了部署:由黑旗軍和何秀林部擔任阻援,唐景崧、丁槐(兼統張世榮部)兩部分駐城北和城南(均離城一公里左右),擔任攻城。

1月26日,唐、丁兩部合力奪取宣光城南法軍據點,法軍開東門出援,雙方展開激戰,彼此傷亡很重。後因何秀林部趕來增援,法軍又撤入城內。接著,清軍採用「滾草龍」的戰法1,於31日奪取了南門炮台,並殲敵二百餘人。此後,法軍被迫龜縮城中,由於水路被黑旗軍切斷,供應日缺,處境極艱,只好用玻璃瓶、竹筒等封裝求援信,投入清河順流而下,向端雄、河內告急。2月,清軍連續攻城,多次挖地道用地雷炸開城牆,從缺口突入城內,但因法軍阻擊火力較猛,均未成功。

波裡也為解宣光之圍,親率由諒山撤回的法軍第一旅溯河而上,2月27日於端雄登陸,與不久前派出的先遣部隊會合。

清軍偵知法軍大隊來援,立即由何秀林部撥一千人前往左育,協助黑旗軍阻援。另以覃修綱部二千人出扎臨洮府附近,待法軍攻左育時,向端雄前進,斷敵後路。3月2日,法軍分路進攻左育及對岸的同章。左育黑旗軍依托地營頑強抗擊,並引發地雷,多次打退法軍的衝擊,斃傷大量敵人。後由於防守同章的黃守忠部黑旗軍被敵擊潰1,法軍佔據對河高地,安設炮位,向左育黑旗軍輪番炮擊。劉永福所部黑旗軍傷亡近千人,不得不撤出左育陣地。新趕到的何秀林部也不支敗退。覃修綱部進至端雄,聞法軍已抵宣光,只得仍回臨洮、清波。

岑毓英見宣光法軍兵力大增,隨即命令疲憊不堪的圍城部隊撤至宣光附近山區休整;唐景崧所部六營則經占化撤往牧馬。西線清軍圍攻宣光的計劃半途而廢,東下河內的意圖隨之落空。據岑毓英奏稱:此次以近萬人攻城,「歷三十五、六晝夜,久雨泥滑,死者一千數百餘人,傷者二千餘人,疲憊不堪,不能不暫為休息。」2岑毓英明知「頓兵堅城,徒傷精銳」3,唐景崧也「明知攻堅,兵家下策也」,可是又強調「事急不得不攻,且城垂拔亦不肯松勁」4。不難看出,此次行動的失利,實屬作戰指導上的嚴重錯誤所致。以滇軍當時的兵力,一面圍宣光,一面沿河東進,威脅河內,使敵不敢增援宣光,是可能辦到的。此著不行,頓兵堅城,反為敵所牽制,置優勢兵力於無用。宣光既久攻不下,就應適時把作戰重點改為打援,援兵既挫,宣光不難攻下。此著又不用,結果喪失主動,為敵所敗。

四、清軍陸路大捷(參見附圖十五)

(一)臨洮敗敵

1885年3月,法軍既解宣光之圍,即以第一旅留守宣光,其餘部隊撤回端雄、河內等地。接著,波裡也企圖向興化以西紅河兩岸滇軍發動進攻,進一步改善法軍在北圻西線的態勢,保障主力繼續在東線發展進攻。岑毓英獲此情報,即令覃修綱部(此時約為四千人)嚴守夏和、清波、錦溪等紅河兩岸要點,令雲南農民軍竹春、陶美等部千餘人及越南義軍一部,與滇軍李應珍部共同防守臨洮府以東村落,劉永福則率黑旗軍進駐臨洮。

3月23日,法軍非洲兵千餘人及越南教民一批,由興化渡紅河,進攻臨洮東南的山圍社。在此防守的中越軍民聯合部隊堅守地營,沉著應戰。待敵接近時,槍炮齊鳴,並引發地雷,打退了進攻之敵。法軍連續幾次衝擊,守軍均依托工事,發揮近戰火力,頑強奮戰,斃傷不少敵人,守住了陣地。傍晚,正當法軍進退維谷之時,與劉永福有聯繫的越南義軍在村落四周遍插黑旗,用中國話齊聲喊殺。法軍以為突遭黑旗軍包圍,驚魂落魄,紛紛脫掉軍服,乘夜從附近的河溝泅水,偷偷向越池方向逃竄。守軍沒有發覺,未予追擊。

中越軍民在臨洮附近大敗法軍,斃傷敵軍數百人1,繳獲法軍紅白衣褲、軍帽等千餘件。這是西線戰場上取得的一次較大勝利。這次戰鬥的主要特點,是中越兩國軍民緊密配合,英勇戰鬥。另外,守軍充分利用地形,構築了比較適應當時作戰情況的野戰工事——地營,減煞了敵人的火力優勢,彌補了自己火力不強的弱點,也是這次取勝的一個重要原因。

唐景崧對滇軍構築地營一事,作了相當詳細的記載1,這表明滇軍在這方面有其獨到之處,至少在他看來,如此完善的地營是當時戰爭中的新鮮事物。

「野戰築城工事具有和軍隊同樣悠久的歷史。」「兵力上處於劣勢的軍隊,可藉以成功地抵抗優勢敵人,因而野戰工事能對戰局的結果起重大影響。」2隨著野戰炮兵的大量使用和火炮射速與彈丸威力的加大,僅憑地面工事遠遠不能適應戰爭的需要,從而迫使人們向地下發展,構築既能防護自己、又能攻擊敵人的地下工事。地營的出現和發展,正是戰爭發展的必然產物。在中法戰爭中,滇軍和黑旗軍一直重視這一作戰手段,「紮營之處,兵卒均荷鋤鏟刀鋸之類,掘地鋸木」3,修築基本上相當於今日有被覆的野戰掩體的地營,在各次戰鬥中都收到了較好的效果。

(二)鎮南關大捷(參見附圖十六)

在潘鼎新不戰而逃、東線法軍直逼廣西國門的情況下,龍州等地商民驚徙,游勇肆掠,難民蔽江而下,廣西全省大震,形勢十分嚴重。清廷以廣西關外各軍迭次失利,於2月17日電令馮子材幫辦廣西關外軍務。馮子材雖已年近七旬,但「久任廣西提督,三次出關,威惠素著,得桂、越人心」1。由於潘鼎新遠離前線,前敵將領公推馮為東線總指揮。2馮子材決心「保關克諒」,並相機收復北圻各城。他一面調整部署,令部下趕修工事,一面整頓軍紀,安定民心,迅速穩定和改善了防禦態勢。

與此同時,清政府通過總稅務司赫德的私人代表金登干1在巴黎與法國政府之間的秘密談判正在加緊進行。由於法軍在北圻東線佔領諒山之後,接著於3月3日在西線解了宣光之圍,法國政府急於趁勝迫和,以緩和國內人民對曠日持久的戰爭所表現的強烈不滿。為了保證它在和議中處於更加有利的地位,法國政府要求東線法軍繼續發展進攻。波裡也隨即於3月16日電告尼格裡:現在正與中國進行談判,若能對龍州有所動作,派北非騎兵前去,將大有裨益。你看有什麼辦法,可以使中國人相信我們不久就要向龍州進攻。2接著,波裡也向諒山方面增派援軍。尼格裡認為威脅龍州是「玩一種危險的把戲」3,但還是積極備戰,待命行動。

根據當面敵情和廣西中越邊境的地形條件,馮子材經過反覆勘察,選定關前隘(今隘口南)附近的有利地形構築防禦陣地。關前隘在鎮南關內約八華里處,東西兩面高山夾峙,中間為寬約二華里的隘口。東面的大青山高八百餘米,向南傾斜與小青山相連,再南為馬鞍山,一直延伸到鎮南關的東面。西面的鳳尾山高六百餘米,同樣向南傾斜,直至龍門關(一東西向峽口,有小路可通扣波),然後經一座大石山延伸到鎮南關的西面。關前隘南面的谷地寬二華里多,谷地南端有幾座小石山,往南直至鎮南關都是起伏不平的山丘,統稱橫坡嶺。馮子材命令部隊在關前隘附近築起一道土石長牆(長三里多,高約七尺,寬約四尺),橫跨東西兩嶺之間,牆外挖掘四尺寬的深塹,以利堅守,並在東西嶺上修築堡壘多座,構成一個較完整的山地防禦陣地體系。

在兵力部署上,馮子材親率所部馮軍擔任關前隘正面防禦,扼守長牆和山險要地;王孝祺部八個營屯於馮軍後面半華里處,作為正面防禦的第二梯隊;王德榜所部湘軍十個營屯於油隘,保障入關旁路的安全,並相機襲擊敵後;蘇元春及陳嘉所部桂軍十八營屯於幕府(關前隘之後五華里),作為總預備隊;魏綱所部鄂軍八個營駐平而關,控制由艽封(今七溪)至龍州的水道。此外,蔣宗漢部(楊玉科陣亡後,所部由蔣統領)及方友升部共十餘營屯於憑祥,潘鼎新率淮軍五營屯於海村,以鎮後路。加上駐龍州、新街等處部隊,東線清軍總兵力約達八十餘營。

8月9日,尼格裡派北非騎兵和越偽軍各一部,企圖由文淵練扣波進佔艽封、牧馬,繞出鎮南關之北,擺出一副威脅龍州、切斷唐景崧部(當時已由宣光撤至占化)和馬盛治部(駐新街)歸路的架勢。馮子材根據越南人民提供的情報,立即派駐龍州的馮軍五個營1前往扣波,蘇元春則率桂軍暨魏綱部前往艽封。8月13日,法軍進至艽封,見清軍已先期到達,便掉頭南撤。到達扣波的馮軍奮力攔擊,法軍敗回文淵。爾後,蘇元春部仍回幕府,魏綱部八營和馮軍五營則分別留守艽封、扣波。

3月21日,馮子材為打亂敵人的進攻部署,不顧潘鼎新等人的阻撓,決定先發制敵,毅然率王孝祺部出關夜襲法軍前哨據點文淵,一度衝入街心,斃傷不少敵人,並毀炮台兩座後主動撤回,取得了較大勝利。由於清軍的主動出擊,尼格裡感到自己已處於被動地位,為爭取主動,他不待援軍到齊,決定提前發起進攻。

3月23日晨,法軍第二旅主力一千餘人趁大霧偷偷進入鎮南關。上午10時30分,大霧開始消散,法軍便分兩路進攻:主力沿東嶺前進;另一路沿關前隘谷地前進,企圖在主力奪取大青山頂峰大堡之後,兩路前後夾擊,攻佔關前隘清軍陣地。此外,法軍一部近千人配置於鎮南關東南高地,作為預備隊,並向油隘方向擔任警戒。馮子材立即商請駐於幕府的蘇元春部前來接應,又通知王德榜部從側後截擊敵人。馮子材自率所部和王孝祺部奮力迎擊當面之敵。法軍在猛烈炮火掩護下,經過幾小時的拚死爭奪,佔領了尚未完工的東嶺五座堡壘(分別構築於小青山五個相連的山峰上)中的三座。馮子材見形勢逐漸危急,激昂地高呼:「法再入關,有何面目見粵民?何以生為!」2馮、王兩部將士在愛國熱情激勵下,誓與長牆共存亡,個個奮不顧身,英勇抗擊,阻止了敵人的前進。下午4時許,蘇元春、陳嘉等率部自幕府趕來增援。不久,蔣宗漢、方友升部也聞訊趕來。各部奮力抵抗,戰鬥甚為激烈,彼此勢均力敵,死傷相當。當天,王德榜部自油隘出擊法軍右翼,牽制了敵預備隊的機動,並一度切斷敵人運送軍火、糧食的交通線,有力地配合了東嶺的戰鬥。入夜,清軍進一步調整部署,由蘇元春部協助馮軍守長牆,王孝祺部守西嶺,陳嘉部守東嶺,蔣宗漢、方友升部扼守大青山頂峰。馮子材還派人持大令飛調駐扣波的五營馮軍前來抄襲法軍左翼。附近群眾連夜挑水送飯,趕運彈藥。將士們磨刀擦槍,修補工事,嚴陣以待。經過一番整頓,前線軍民更加同仇敵愾,決心與侵略者血戰到底。

3月24日晨,尼格裡指揮法軍分三路再次發起衝擊。在僥倖取勝的心理支配下,尼格裡首先派其副手陸軍中校愛爾明加率兵一部,利用大霧偷偷向大青山頂前進,企圖突然奪取大堡,控制東嶺制高點;但由於地形險峻,道路難行,法軍偷襲未逞,不得已沿原路退回。上午11時許,尼格裡見山頂久無動靜,以為偷襲部隊已不戰而佔領了山頂大堡,便命令以猛烈炮火轟擊清軍正面防禦工事,企圖掩護沿谷地前進的法軍接近長牆,配合東嶺法軍一舉突破關前隘陣地。馮子材立即傳令各部統領:「有退者,無論何將遇何軍,皆誅之!」1並於各路設卡,堵截逃兵。當敵人接近長牆時,馮子材持矛大呼,率領兩個兒子躍出長牆,衝入敵陣,展開白刃格鬥。全軍將士見主帥身先士卒,一齊大開柵門,向敵人衝去。當地人民群眾和部分散兵游勇也主動前來助戰,「伺便隨處狙擊」2。中午,從扣波趕來增援的五營馮軍在游擊楊瑞山、都司麥鳳標等率領下,由摩沙村(龍門關西口)衝進龍門關,突然出現在法軍側後,給進攻之敵以意想不到的打擊。經過一場激烈的殊死戰鬥,中路法軍狼狽退回谷地。在關前隘長牆激戰的同時,陳嘉、蔣宗漢相繼率部反覆爭奪被法軍佔領的東嶺三座堡壘。直到傍晚,王德榜部在擊潰敵之增援部隊及消滅其運輸隊後,從關外夾擊法軍右側後,配合東嶺守軍奪回了全部敵占堡壘。這時,王孝祺部也已擊退沿西嶺進攻之敵,並由西嶺包抄敵後。法軍三面被圍,傷亡甚眾,後援不及,彈藥將盡,開始全線潰散。於是,尼格裡不得不下令撤退,法軍丟下數百具屍體,狼狽逃回文淵。

馮子材指揮東線清軍取得了鎮南關大捷,共斃傷敵軍精銳近千人,繳獲大批槍炮、乾糧,大大鼓舞了中越兩國軍民的鬥志,沉重打擊了法國侵略者的氣焰。這是中法戰爭中關係全局的一戰。它不僅使北圻東線反攻轉敗為勝,而且使整個戰局發生了根本性的變化。「法人自謂入中國以來,從未受此大創。」13月27日晚,法軍慘敗的消息傳到巴黎,立刻在法國統治階級中引起巨大的震動和恐慌。他們害怕因此而動搖法國在遠東初步建立起來的殖民統治,因而群起抨擊茹費理的遠東政策。法國人民也紛起反對茹費理政府的殖民戰爭。3月29日,法軍在諒山慘敗的消息接踵傳至巴黎,茹費理內閣隨即於3月31日在一片責罵聲中垮台了。

東線法軍經鎮南關慘敗之後,人數不滿二千,在文淵稍事休整,主力即倉卒撤至諒山,和已經到達那裡的援兵會合,總數增加到四千五百人左右。馮子材為了不給潰敗之敵以喘息機會,於3月26日親率所部及王孝祺部出關進攻文淵,並通知王德榜部由小路抄襲敵之右翼。文淵守敵傾巢出戰,清軍「分路四面環攻,槍炮雨密」2。戰不多時,守敵頭目中彈落馬,餘眾潰逃,清軍立將文淵收復。

這時,越南義軍已在諒山通往那陽、屯梅等交通線上加緊襲擾,給法軍後方以很大威脅。尼格裡企圖堅守諒山,等待更多援兵到達後再次進犯鎮南關,做了如下部署:主力扼守驅驢北面的一個高地,以確保驅驢,屏蔽諒山;一部兵力配置於淇江(今奇窮河)南岸,分守通向谷松、屯梅的交通要道;將老弱殘兵編成「城堡班」,駐守諒山城垣碉堡。

馮子材鑒於諒山為越南北部軍事要地,「若不急先攻取,實難成破竹之勢」。並且認為,法軍連戰皆敗,心膽已寒,「與其明攻多損士卒,不如暗取包易見功」。因此,與蘇元春等密商,「以正兵明攻驅驢,出奇兵暗取諒山」。13月27日,馮子材派楊瑞山率所部繞道而進,乘夜渡過淇江,於次日黃昏潛至諒山,散伏城外各處。

3月28日,馮子材、蘇元春、王德榜、王孝祺各部次第向前挺進,分三路逼攻驅驢:馮子材、蘇元春率主力進攻正面;王孝祺部和馮軍一部進攻西面;王德榜部進攻東面。法軍依托驅驢北面高地的堅固工事,負隅頑抗,阻止了清軍的進攻。尼格裡鑒於其左翼和正面陣地工事堅固,而東面地形較難防守,決定由愛爾明加率軍一部,向東面的王德榜部發起反擊。下午2時許,馮、蘇兩部趁敵人調動兵力、正面防禦力量有所減弱之機,再次發起猛烈攻擊。激戰中,尼格裡胸部中彈重傷,接替指揮的愛爾明加隨即下令向淇江南岸撤退。諒山守敵在慌亂中砍斷浮橋,致使部分法軍在潰逃中落水溺死。之後,法軍退入諒山城,並立即部署分兩路向南撤退。

3月29日拂曉,清軍主力徒涉淇江,向諒山挺進。在此之前,埋伏於城外的楊瑞山部乘法軍熟睡之機,突然發起攻擊。城中法軍倉皇應戰,一片混亂。楊瑞山等「督率各營員弁、勇丁,蟻附而上,劈開城門,兵刃交下」2。法軍死傷纍纍,殘部向南逃竄。清軍追擊二十餘里,並邊進邊搜山,從山谷中俘獲不少敵人。

清軍在克復諒山的過程中,共斃傷法軍近千人,並繳獲大量軍械物資,僅楊瑞山部就奪獲大小火炮三十餘門。

諒山既克,清軍乘勝分東西兩路向南追擊。3月31日,東路陳嘉部及王德榜部攻克谷松,西路馮軍一部克復屯梅,進逼郎甲。法軍猶如驚弓之鳥,一口氣逃到郎甲、船頭一帶。

在這大好形勢鼓舞下,越南義軍的活動更加頻繁。北寧總督黃廷經集合各路義民二萬餘人,「建馮軍旗號,自願挑漿飯,作嚮導,隨軍助剿,或分道進攻」1。河內、海陽、太原、西貢等地人民也紛紛醞釀起義,盼望清軍早日揮戈南下,趕走法國侵略者。馮子材決定於4月中旬親率東線全軍進攻北寧、河內;唐景崧部也準備出牧馬,攻太原;廣東方面,準備派兵出欽州,沿北圻東海岸進攻廣安;會辦雲南軍務鮑超所部三十餘營生力軍正向龍州前進,隨時準備入越;西線滇軍也已克復廣威等地,正向興化發展進攻。但就在這時,清廷下達了妥脅求和的停戰撤兵令,徹底破壞了前線軍民乘勝進軍的作戰計劃。

《中國近代戰爭史》