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.
And as for your question, the answer is ... yes. Sure. Why not? That's what we already do in nearly all IDEs.