vi is to computing what an 18-wheeler with an non-synchronised manual gearbox is to driving.
Sure, there are case where you need it, but it is counter-intuitive and old-fashioned to anyone who has ever used a modern, end user tool.
The problem with teaching vi is motivation. They're not just struggling with the concept of weird-sounding key shortcuts, they're struggling to understand why they need to learn such a tool when it is an apparently insanely difficult way to do something ANY editor has a standardised way of doing. And that "understanding" problem comes in the way of learning.
So hold back on teaching vi until they are motivated to learn it (e.g when they need to change a config file over a terminal connection).
Your comparison with variables is IMHO faulty - the concept of variables is much easier to understand, and it is much easier to be motivated to learn it.
I learned my way around variables at 14, no sweat. At 20, (3 programming languages later) I was introduced to vi and but at 35 I still avoid using it unless I absolutely have to.