After the Robins received a stiff examination early on, Jay Emmanuel-Thomas gave City the lead. Joe Bryan then added a second and Matt Smith netted his 12th in as many games as Steve Cotterill's men move clear of Swindon Town, who were beaten at playoff-chasing Oldham Athletic.
The Lilywhites move to within three points of third-placed MK Dons, who were beaten by Bradford City on Monday.
Doncaster Rovers were also in imperious form as they hit five against Crawley Town, with Andy Butler, Richie Wellens, Nathan Tyson, Harry Forrester and Curtis Main all getting on the scoresheet as the Vikings move into the top half of the table.
Rovers are just behind Walsall, who had to withstand a second-half fightback from Rochdale at Bescot Stadium. Goals from Peter Vincenti and Ashley Eastman proved in vain as Keith Hill's slumped to a 3-2 defeat.
Crewe Alexandra moved further away from relegation trouble as a solitary Nicky Ajose goal saw the Railwaymen past fellow strugglers Yeovil Town, while Leyton Orient remain rooted to the bottom of the table after Balint Bajner's strike gave Notts County victory at Brisbane Road.
Results in full: Barnsley 1–2 Fleetwood Town, Bristol City 3–1 Port Vale, Chesterfield 0–2 Preston North End, Coventry City 1–1 Scunthorpe United, Crawley Town 0–5 Doncaster Rovers, Crewe Alexandra 1–0 Yeovil Town, Leyton Orient 0–1 Notts County, Oldham Athletic 2–1 Swindon Town, Peterborough United 1–2 Gillingham, Sheffield United 4–1 Colchester United, Walsall 3–2 Rochdale