While I do love vim, its own high level of internal implementation brokenness doesn't really have much bearing on how one implements this sort of thing in a real multi-language IDE.
And as for your question, the answer is ... yes. Sure. Why not? That's what we already do in nearly all IDEs.