I've been bouncing back and forth between Vim and Emacs for some time, and lately I've been trying to reconcile the abilities of one with the other.  Specifically, I'm wondering if there is something in Emacs analogous to the following Vim capabilities.

1) Omni-completion.  Here, if you're happily typing something and come across a name, function call, etc, that you have typed before, in Vim you can press Ctrl+N to see what can go with what you've typed so far.  Moreover, in many cases, it does this intelligently, taking syntax into account.
2) Redo-last-change.  In Vim, if you make a change, pressing "." will make the change again.  Is there something analogous in Emacs, aside from defining a macro?

Thanks!