1)这句是虚拟语气的固定用法
根据句意,可知是对过去的虚拟,所以
if从句用had done ,主句用would/should/could/might have done
2) 我觉得这句应该用would have done,即为would have had a pleasant trip
因为But for 是含蓄条件句,也要用虚拟,此处应为对过去虚拟.
译为:要不是···,他们本可能···.
在虚拟中,would do是对现在,将来的虚拟,用于主句;
would have done 是对过去的虚拟,用于主句.
PS:我的记忆里,貌似没有would had had 这种说法,would后面要加原型吧
3)come属于趋向性动词,用现在进行时表一般将来时,尤其有近期内就要发生的意思
译为:车马上就来了.
will be doing 是将来进行时,表示将来某个时间点或时间段正在发生的事.
这里是说不通的.
而且这是一种常见用法,看得多了就自然能接受了.
有帮到你么?不懂再问