dabbrev-expand function could do the trick. Let's suppose you've already typed some words: emacs, emotion, emoji, ... The next time you'll type a word beginning by 'em', you can hit
M-/ and emacs will propose you to insert one of the already inserted words begining by 'em'. Keep hitting
M-/ and emacs will show you 'emoji', then 'emotion, then ...
You may also have a look to repeat-complex-command. The popular example being: you want to repeat the command
query-replace in many different buffers always using the same arguments, replace “pitt” by “patt”.
You run it once, go to a different window, and type
C-x ESC ESC to run it again.
And to finish, may I suggest repeat-insert? This el file will help you to do insertion, using some kind of logic. It is more like, "reapeat last insertion, but for each iteration, the arguments will change.
This example could be found in the el file:
;; You can also iterate over lists:
;; My desk is cluttered
;; My desk is a real mess
;; My desk is very hard to see
;; My desk is buried
;; from m-x insert-patterned
;; ";; My desk is %s"
;; (cluttered "a real mess" "very hard to see" buried)
I hope that will help.