Earlier quoted context omitted.
I've grown up on vi and later emacs, but VSCode is no joke. It does almost everything, and most of it better, and more intuitively. There's no reason to torture yourself with counting characters, words or lines in order to get the delete command correct in one go.
The single most intuitive ah-ha moment I’ve had in Vi was the change verb. Change In : ci( means “change the text within parentheses.” Change unTil : ct& means “change the text until an ampersand.” And so on. It just makes sense. VSCode never had moments like that for me. It’s fine, sure, but it wasn’t anything special.
"i(" is a selector (see ":help object-select"), and it also works with "y" or "d" or even in visual mode. Likewise "t" is a movement that can even be used on its own.
There's also a sibling to "i", "a", that includes the delimiter used, and "t" is a valid delimiter for HTML or XML tags.