There are a few vimprovements that I miss when using vi(1)
• text-objects like
ci"
or
da(
are incredibly powerful, especially when combined with the dot-operator to repeat the change
• the far more powerful regular-expressions (things like positive/negative look-ahead/-behind)
• the ability to evaluate expressions in replacements like :%s/\d\+/\=submatch(1)/g lets me do some amazingly-powerful edits on a regular basis
• insert-mode completion (being able to do things like type control+p in Insert mode to search backwards for a word matching what I've started to type)
For more info, the corresponding vim help targets are
:help text-objects
:help pattern
:help sub-replace-\=
:help ins-completion
(I regularly use both vi(1) and vim depending on what the editing calls for)