古代战争 · 战役复盘

虎牢之战与洛阳围城620—621:断粮的城市、远来的援军与降服之后

620—621年;文内月份采用原典旧历,三月与五月异文并存 · 河南洛阳、虎牢(武牢)、汜水,后续至河北洺州和长安 · 7 项来源

李世民在虎牢击败窦建德,只是洛阳围城过程的转折。粮道、拘押的家属、出降后的杀戮与遣散、河北再起兵相互连接;同时对照单雄信故事在正史和清代演义中的不同人物与结局。

返回资料目录
博客精选 · 原创整理与分析。史实、争议和创作建议分别标明;延伸书目不等于已经通读。

一、先把两座战场和两种时间分开

所谓虎牢一战擒两王,实际连接着持续数月的洛阳围攻、河北援军西进及战后的政治处置。唐军先围王世充,窦建德为保自己的夏国而来救援,随后在虎牢附近被俘,王世充才投降。本篇沿《资治通鉴》采用武德四年五月的会战时序;《旧唐书》王世充传却把擒建德系于三月,同卷窦建德传又记三月进据武牢、相持两月。这个差异必须保留,不能把所有记载改成同一天。旧、新唐书和通鉴是后出的编纂史,保存的材料也可能相互重合,七个阅读入口不等于七名现场证人。 旧唐书54 ↗ 新唐书85 ↗ 通鉴189 ↗

二、为什么洛阳还守得住

王世充原是隋将,击败李密后接收其军队与地盘,继而废黜杨侗,自立郑国。他并非在唐军一出现时就只剩一座孤城:亲族分守虎牢、襄阳等处,洛阳内也分城驻兵。窦建德控制河北,与唐、郑都有交涉,曾因王世充废隋君而绝交,又曾放还唐的宗室。到六二〇年,若唐吞下郑,夏就失去南面的缓冲。史书将救郑动机写成刘斌所陈的鼎足之势,还包括将来趁机吞郑、向关中发展;因此这场救援同时是自保和扩张,不能只用守信用或感情冲动解释。 旧唐书54两传 ↗ 通鉴188 ↗

三、包围不是从城墙脚下突然开始

六二〇年七月李世民东进,先抵新安、慈涧,双方在城外反复交战。唐军分兵据龙门、逼河内、断洛口粮道,另以舟师袭回洛、破坏河阳南桥。附近州县降唐后,唐方还允许部分既有官员留任,减少重新建立统治的阻力。对于洛阳,这意味着原来相连的城堡、渡口、粮仓逐渐不能互相支援;对于唐军,却仍有从关中向东输送的负担。王世充责问对方千里馈粮,史书虽以对话形式安排,也提示围城者不是站着等待而毫无消耗。 旧唐书2 ↗ 通鉴188七月至九月 ↗

四、家属被扣在宫城里

城内的强制开始于最后包围之前。《旧唐书》记,一人逃亡可能使全家被杀,相邻家庭也负连保责任;砍柴采集者的出入受限制。王世充把猜忌者及将领家属收在宫城,意在防止出征者投降。书中称被囚者不下万人,粮食不足,每日有人饿死,这些是史家的规模描述而非现存囚名册。另一面,唐方出征的屈突通也有两个儿子在洛阳,高祖曾当面问他如何处置这一顾虑。后来的忠臣故事集中于他的答话,家属本人却没有留下相同程度的声音,不能替他们补写同意或愿意牺牲。 旧唐书54 ↗ 通鉴188七月 ↗

五、粮价、浮泥饼与有名字的死者

《通鉴》把严重饥荒放在六二一年春围城段:绢匹只能换少量粟,衣饰珍玩失去原来的价值,草根树叶耗尽后,有人淘取浮泥,混入米屑做饼。《旧唐书》也记身体肿胀、腿脚软弱的人依靠在道路边,尚书郎卢君业、郭子高饿死。这是少数带姓名的饥荒例子,却不是他们亲笔留下的日记,书里没有他们的家人、最后餐食与对白。昔日入宫城的户数大幅减少,同样不能全换算为死亡人数:文本没有逐户区分逃散、迁走和死去。围城叙事应保留这些不同层次的未知。 旧唐书54王世充传 ↗ 通鉴189三月 ↗

六、城外的战斗与被使用的婴儿

六二一年二月,王世充仍尝试在谷水一带决战。唐方步兵渡水接敌,骑兵由北邙方向加入,双方多次散而复合,郑军失败后才更加依赖城守。不能由此倒推此前数月没有抵抗。更早的千金堡事件尤其显示普通人的处境:《通鉴》记罗士信用携带婴儿的人假扮洛阳逃民,趁堡兵出门时突入,并写下“屠之”。这些婴儿没有姓名,人数与后来命运也不能从这段补出。故事把逃难者的外观变成诱骗工具,同时揭示唐军胜利材料中仍留下的暴力,并非只有郑方使平民受苦。 旧唐书2二月战斗 ↗ 通鉴188十月、次年二月 ↗

七、援军沿河到来,唐军也争论是否退兵

窦建德击败孟海公后,吸收其军及徐圆朗部众,沿河向西推进。史书区分十余万实际合军的说法与号称三十万,不能把宣传总数当精确编制。粮船逆黄河而上,使援军与被围城市接通成为现实威胁。唐营因此出现撤回谷州或解围据险的建议。李世民采取分军方案:李元吉、屈突通等继续围洛阳,自己带一部赴虎牢。《旧唐书》本纪说步骑三千五百,这只是东出的一部,不是整场洛阳战争全部唐军,也不能与援方号称三十万直接组成简单的兵力比。 旧唐书54 ↗ 旧唐书2 ↗ 通鉴189 ↗

八、援军被卡住之后

到达并不等于已经救入城中。虎牢扼住西进通路,窦军停留,交锋不顺,唐骑还袭击其运粮队,擒获张青特。旧唐书说部分将领在前一场胜仗已有所获,想回洺州,援军内部并非人人都希望无限延长战争。凌敬提出渡河北进、威胁唐后方以解洛阳之围;曹氏也赞成改变进路。王世充使者则不断催救,另有以金玉影响诸将的记载。这里存在救援时限、已有战利品和联盟承诺的冲突。那些成段进言是史家保留的政治叙事,不能写成记者当场逐句记录。 旧唐书54窦建德传 ↗ 新唐书85 ↗ 通鉴189四月 ↗

九、从牧马消息到饥渴的阵列

《通鉴》记窦方得知唐军草料不足、可能把马放到河北,准备趁机袭击;李世民顺势留马于河洲,引其出兵。窦军从板渚向汜水展开,沿河与山地布阵。唐将观阵后的判断被写得十分确定,但对阵中士卒,确实可读到另一种时间:从早上等待至中午,开始坐下,争着喝水,渐有收退迹象。不能把这些叙述进一步算成每人断水多少小时,也没有可靠证据重建每一队的站位。援军先经历久停和粮运受扰,随后又长时间临敌列阵,书中的疲惫不是凭空出现的。 旧唐书2 ↗ 通鉴189五月 ↗

十、破阵和被俘,并非所有人同一结局

唐军轻骑试探,继而出战,其他军队跟进;李世民与数将穿过敌阵,展开旗帜,窦军回看阵后而惊溃。《旧唐书》本纪与列传对进退回合的写法不完全一样,不宜拼成无缝逐分钟过程。窦建德受伤,藏匿牛口一带,被白士让、杨武威捕获。《通鉴》称追奔三十里、斩首三千余、俘五万并当日放散;这些整数只能按作者报告保留,不能视作核过名册。将领本人被送往唐方,曹氏、齐善行则带部分骑兵逃回河北,普通被俘者和统治家属的归途从这里已经分开。 旧唐书54 ↗ 旧唐书2 ↗ 通鉴189 ↗

十一、洛阳受降之后仍有杀人与财物分配

唐军将窦建德等押至洛阳城下,王世充获知救兵败亡,考虑突围南走而不能得到将领支持,最终率官属出降。史书记唐军分守市肆、禁止侵掠,也记封收府库、赏赐军队与处死郑方部分官将。太宗本纪所记处死人数与列传、通鉴列举十余人的方式并不一致,本篇不求出一个貌似精确的统一总数。所谓城中无敢侵掠,是胜方史叙中的军令及评价,不能扩成每位居民都平安获救的证明;被错误囚禁者获释,与政治敌人被处死,是同时存在的战后行为。 旧唐书54 ↗ 旧唐书2 ↗ 通鉴189五月 ↗

十二、单雄信与无法兑现的同死之誓

《通鉴》记李世勣为好友单雄信求免,甚至愿交出官爵,仍未获准。离去时,叙事让他以照顾妻子儿女解释不能同死,又以割股肉给友人吃的行为回应旧誓。这段足以说明后世“义”与臣属责任冲突的故事基础,却不能因此宣称肉的动作有独立旁证,更不能把在场者扩大为所有瓦岗旧友。此处家属受到承诺的保护,读者却没有得到他们后来每日生活的完整记录。忠义故事最响亮的常是男子临别的话,真正依靠承诺继续生活的人,往往只剩“妻子”二字。 通鉴189单雄信段 ↗

十三、清代小说怎样重写刑场

《隋唐演义》第六十回把求情者扩成徐懋功、秦叔宝、程知节三人,安排饮酒探监、秦母与单家女眷到场,又让三人轮流割肉,并以秦怀玉向单雄信拜岳父收束婚约。这些亲属、对白和动作构成完整文学场面,却不是由《通鉴》可以逐项证明的事实。小说还说窦建德获赦为僧,而史书明确写被杀;第五十八回又写曹后自缢、刘黑闼被斩,与正史中曹氏返河北、刘黑闼随后起兵相冲突。保留小说全文的意义正是让读者看见改编,而非让动人的细节偷偷替换史料的结局。 隋唐演义58 ↗ 隋唐演义60 ↗

十四、河北的库帛与想散去的军队

齐善行回到洺州时,余众一度想另立窦建德养子,或抢掠居民向海边逃去。《通鉴》让齐善行阻止这一方案,把府库中的帛搬到街上分给将卒,历时三昼夜,并用兵守住坊巷,要求领过的人离去,不得再进居民家里。这里的财物既是军队的报酬,也成为解散部队的办法。曹氏与官属奉印玺归唐,不意味着每个旧军人都与统治者同步抵达长安;一些人已分散返乡。所谓居民免于一次抢掠,与此后是否能够谋生,是两件不同的事,现有这段只能证明史家所记的具体处置。 旧唐书54 ↗ 通鉴189五月 ↗

十五、获胜后的河北并没有立即安静

窦建德后来在长安被处死,王世充得到免死并拟流放,却又被仇家独孤修德杀害。通鉴还记赦令之后仍有人被迁徙,经孙伏伽指出前后不信,朝廷才同意停止相关处置。夏的旧将中有人盗匿库物、归乡后侵扰百姓,唐吏依法追究或加以鞭打;旧将又因征召和窦建德被杀而惊惧,最终拥刘黑闼重新起兵。本文不把所有反抗者一律洗成受害人,也不把朝廷所写的罪名视作每一个人的完整动机。战场上的遣散,既没有让国家冲突消失,也没有自动解决军人与地方居民的关系。 旧唐书54篇末 ↗ 通鉴189七月 ↗

十六、运粮者的负担在赦令中留下了痕迹

战争结束的另一种记录不在庆功描写里,而在赋役减免。《通鉴》记朝廷给一般百姓一年的复免,又因陕、鼎、函、虢、虞、芮六州转输劳费及幽州长期受战事影响,另给两年。这里没有一位赶车人的完整回忆,却能看见胜利背后被承认的运输成本。作者若以此构思民夫家庭,能够有据地写制度造成的长期离家与劳役背景;具体谁被征、送了多少粮、何日返家仍须虚构标识。不能把史书一句“山东悉平”当成这些人也同时得到结清报酬、找回亲属和恢复田地。 通鉴189七月赦令 ↗

十七、杜楚客求免叔父的另一场争执

洛阳受降还改变着同一家人的生死关系。《通鉴》记杜淹曾在王世充政权中陷害杜如晦兄弟,兄长被杀,杜楚客被关押到几乎饿死。唐军入城后,杜淹反而面临死罪。楚客向如晦求救,认为若兄长再杀叔父,一门内部便相互残害至尽;他以自尽相争,如晦才请求李世民赦免杜淹。这个具名片段也经过史家选择,楚客的逐字话语不能当现存供词,却清楚展示获胜者亲属并非只有一致的复仇愿望。它与单雄信的求情失败并置,能呈现两种有据的战后决定;无需另外编造一个仁慈命令,使所有家庭获得相同结局。 通鉴189杜楚客段 ↗

时间线

620年七月(旧历)唐军东进新安、慈涧,逐步攻取周边要点。
620年秋冬郑方州县陆续归唐,窦建德决定援郑。
621年二月至三月(旧历)洛阳城外大战与进一步围困;窦军西进,唐军分赴虎牢。
621年五月(通鉴时序)窦建德被俘,王世充随后降;旧唐王世充传系擒窦于三月,正文保留差异。
621年七月以后(通鉴时序)窦被处死,王世充被仇家杀害;河北旧将拥刘黑闼起兵。

争议与证据边界

  • 旧唐书54王世充传三月擒窦与新唐、通鉴五月不同;同卷窦传有三月进军再经两月,不据网络转录擅自校改。
  • 本纪还师列六月,通鉴至长安列七月;未强造一条无异文日程。
  • 各书的兵数、俘虏数和处死人数并非现存名册,且来源可能共享。
  • 单雄信割股故事出于史叙,小说扩充的女眷、婚约、获赦为僧和柴绍夫妻参战不得当作已证实史实。
  • 普通饥民与运输者没有完整第一人称材料,不把有名官员的死法推广为每户经历。

小说创作切入点(分析建议)

  • 把围城者的转输、城内家属拘押和援军想归乡放在不同人物位置,保留各自所知有限。
  • 分别使用早期史叙和清代小说的刑场故事,不把两套角色合成一个真实见证。

来源与阅读说明

[S1] 《旧唐书》卷54维基文库(古旧原作转录) · 古籍 · 核查 2026-10-08实际读两传全文与史臣评论;后晋成书,网络转录未逐字校影印。
[S2] 《旧唐书》卷2·太宗本纪上维基文库(古旧原作转录) · 古籍 · 核查 2026-10-08实际读武德三年七月围洛至四年末、五年征刘黑闼段及前后上下文;贞观诸年未通读。
[S3] 《新唐书》卷85·王窦传维基文库(古旧原作转录) · 古籍 · 核查 2026-10-08实际读王世充主要段与窦建德后半援郑至灭亡及评赞;北宋编纂,与旧史共享材料,不算独立目击。
[S4] 《资治通鉴》卷188维基文库(古旧原作转录) · 古籍 · 核查 2026-10-08实读620年七月至621年二月围洛相关连续段,尤其千金堡、粮运与玄甲;别的战区仅上下文,不称整卷精读。
[S5] 《资治通鉴》卷189维基文库(古旧原作转录) · 古籍 · 核查 2026-10-08实读三月至五月虎牢/洛阳主线与齐善行,七月还京、赦令、独孤修德、河北再起兵至八月开头;卷余未通读。
[S6] 《隋唐演义》第58回维基文库(古旧原作转录) · 历史演义 · 核查 2026-10-08实读开篇至建德被擒、乐寿安抚和徐懋功寻访贾润甫段;后半婚姻议论未精读。清代小说,不作为621年事实旁证。
[S7] 《隋唐演义》第60回维基文库(古旧原作转录) · 历史演义 · 核查 2026-10-08实读开篇求情、探监、刑场、家属、送葬段至曹后安葬和木兰返乡部分;余下罗成婚书情节未精读。

延伸书目

  • 司马光、胡三省:《资治通鉴考异及胡三省注本》。延伸校勘书目;本轮主要读网络正文,尚未逐项核所有考异与注。