老唐(姜文飾)是個花花公子,曾經參軍,是個戰鬥英雄。老梁(黃秋生飾)是他最好的朋友和同事,也是壹個多才多藝的人,很受女生歡迎。與此同時,他們愛上了唐的妻子(孔韋飾),她後來嫁給了老唐。老梁追了他三年他們訂婚了,但最後老唐只用壹封信就打動了孔威。孔韋嫁給了老唐,老梁很沮喪。她通過婚禮摸女人屁股,民風開放。這時是1958。與此同時,瘋媽(周韻飾)大著肚子,懷上了老唐的兒子。老唐因為生性浪漫,打著戰鬥英雄光環的幌子,騙過了自己的愛人——瘋媽媽,發生了關系。這時,老唐用了壹個化名:李。後來,老唐為了擺脫瘋狂的母親,編造了自己戰死的假消息。遺物裏有壹包信,但不是寫給瘋媽媽的,還有三根女人的辮子。瘋媽其實也不傻,知道自己被騙了,所以口口聲聲說“我知道我知道”,但又無可奈何,幹脆叫他阿廖沙來騙自己。於是瘋媽的悲劇開始了,可想而知,壹個未婚媽媽帶著壹個私生子在那個年代是如何生存的。她可能想過自殺,也可能生下兒子後有意扔下火車,但偉大的母愛阻止了她。她停下火車,瘋狂地沿著鐵軌跑去找她的兒子。
瘋媽和她的私生子隊長(房祖名飾),在小警察李書立和李從喜的帶領下,千裏迢迢來到老唐的老家,活了18年,期待著有壹天能等來老唐的歸來。但壹個沒有名分的女人,在那個壓抑的年代,只能通過裝傻來阻止別人的流言蜚語,或者拒絕接受現實,刻意活在自己的幻想世界裏。總之,另外,當初好心幫她的李殊,回來當誌願者後改變了主意(於是瘋媽告訴班長李殊已經死了),大概是被她吸引了。她的生活非常悲慘,妳可以想象。她每天爬上村頭的樹,期待奇跡出現。
1976年,奇跡真的發生了,老唐被送回了老家。所以瘋狂媽媽不再瘋狂了。老唐回來那天,她穿得整整齊齊,跟班長說再也不打他了,再也不爬樹,再也不挖坑了,叫他去村口接人。老唐確實回來了,但不是壹個人,帶著他的妻子,於是瘋媽媽悲慘的壹生走到了盡頭——她跳河自殺了。老唐沒有看到那個等了他18年的女人。
結婚後,老唐和妻子分居,老唐和老梁被分配到壹所大學當老師。老梁能彈壹手好吉他,深受女生喜愛,追求者眾多。但是,在看電影的時候,他摸了壹個女人的屁股。其實女方很佩服他,也很願意,但還是被誤認為是混混,被大家追殺,所以摔斷了腿,失去了尊嚴。終於查出了真正的流氓。老梁被洗清罪名後,自殺了。之前沒有自殺是因為不想屈辱的死去,現在只是笑著死去。但也可能是他殺,就是死在老唐和林醫生(陳沖飾)手裏,因為老梁在被追的那天不小心爆料了老唐和林醫生的私情。另外,老梁和唐的老婆也很有可能有曖昧關系。這個猜測源於那把獵槍,是老唐的。他本該交給妻子保管,卻去了老梁家。當時老唐說“我好像在新疆見過這把槍”(老梁和唐的老婆很像馮夢龍《三言二拍》裏“珍珠衫”的故事),這也增加了老梁被殺的可能性。
老梁去世後,老唐因故被送回老家(可能是因為他和林醫生的私情被曝光),唐的妻子陪伴著他。組長按照媽媽瘋媽媽的意思開著拖拉機去接他們。當他們回到村子的時候,瘋媽媽已經跳河自殺了。除了李殊,村裏其他人都不知道老唐其實是班長的父親(因為他把瘋媽媽叫成了嫂子,他怕另壹個人把真相告訴班長)。老唐每天帶著壹幫孩子打獵吹小號,其樂融融。唐的老婆被冷落,在壹個精神極度壓抑,沒有娛樂的年代,她很容易就和組長搞曖昧。唐的老婆告訴班長,老唐說她的肚子像天鵝絨。通奸的事被老唐無意中發現,他想用獵槍打死班長,但班長不懂天鵝絨是什麽。老唐有個原則,就是絕不趁人之危。為了讓班長死得明白,他去北京找天鵝絨。其實這也給了自己壹個借口和思考的時間,不然也不用走那麽遠去找了。我在北京找到壹個老朋友(崔健),崔健幫他分析,責任不在船長身上,也不在他妻子身上,而是在他自己身上。老唐想通了,決定不再買絨了,也不想殺班長了。但是船長自己走出村子,買了壹面天鵝絨的旗幟。天真的隊長告訴老唐,老婆的肚子不像天鵝絨。受到尊嚴的侮辱,老唐終於憤怒地開槍打死了班長。但他不知道,他自殺的是自己的兒子。易推,老唐也會因故意殺人罪被判死刑。
在那個特殊的年代,連空氣都壓抑,很多人因為各種原因死在這種極度壓抑的折磨中,比如影片中的這些人物。但是人類仍然繁榮昌盛,太陽照常升起...