1909年考入陕西陆军小学。1911年入西北大学预科,后转入陕西陆军测量学校学习。1917年秋在陕西靖国军司令部任科员。1919年到北京,在冯玉祥部第十六混成旅任上尉参谋。
1921年任少校参谋、教官。1924年入西北军杨虎城部任排长、教官。1926年11月在国民军联军第十军二师混成团任团长。
1929年11月任国民党军第十七路军十七师五十一旅旅长。
1930年12月所部进驻汉中。1936年,曾向杨虎城建议联共反蒋抗日。西安事变时,他兼任西安市公安局长,受命负责指挥西安市内的军事行动。事变后,调任渭北警备司令、第十七师师长。1937年初接受中共陕西省委派干部到所部进行统一战线的工作。七七事变后,率十七师参加河北保定新安镇阻击战和漕河、阜河对日作战,10月率部在娘子关激战十三昼夜,重创日军。1937年底到延安会见毛泽东,表示拥护中共主张,接受中共领导。1938年1月所部开赴晋东南,接受第二战区东路军朱德、彭德怀指挥,先后在山西洪洞、长治、晋城、垣曲地区进行抗日游击作战,配合八路军在晋东南反日军“九路围攻”。同年夏升任第三十八军军长,8月率部进驻平陆县,在中条山地区坚持抗日作战,两年零四个月中曾指挥所部挫败了日军十一次“扫荡”,同时全面开展了改造部队的工作。1942年秘密加入中国共产党。1946年8月被国民党当局撤销了第三集团军总司令职务,调到南京。他利用“出国考察水利”的准备时间,摆脱了国民党特务的监视,在董必武的精心安排下,于1947年3月到达晋冀鲁豫解放区。1948年1月任中国人民解放军西北野战军(后为第一野战军暨西北军区)副司令员,为解放西北做出了贡献。中华人民共和国成立后,历任青海省人民政府主席,中共陕西省委常委、陕西省省长。是第二、第三届全国人大常委会委员,第一、二、三届国防委员会委员。