contentEditable isn't very cross-platform, comes with its own set of keybindings, and it's difficult to decorate the text you're working on as you type without glitching things.
I'm also skeptical about canvas, so when I implemented my own jsvi years ago (at http://src.internetconnection.net/vi and now at http://geocar.sdf1.org/vi ) I didn't use canvas. It works everywhere but chrome (which won't let me capture escape), and it produces the same results all the way back to MSIE6.
In retrospect, I would've had an easier time overriding keystrokes on a textarea.
I'm also skeptical about canvas, so when I implemented my own jsvi years ago (at http://src.internetconnection.net/vi and now at http://geocar.sdf1.org/vi ) I didn't use canvas. It works everywhere but chrome (which won't let me capture escape), and it produces the same results all the way back to MSIE6.
In retrospect, I would've had an easier time overriding keystrokes on a textarea.