I've come here for three years 应该是不太好的,因为come是一个动作不是一个状态,可以说I came here three years ago,但是不能说过去三年一直在come(因为用的过去完成时)。相反,I have been here for htree years就完全没有问题。
又比如,I have kept this for three years,这里过去完成时表示过去三年一直保留这个东西。也可以说I put this here three years ago,因为put是一个动作,而kept可以表示一个状态。