Dad jokes are fun

V, 13 bytes

cEHi<esc>A, <C-r>" V!

Try it online!

Inspired by tsh's answer

This takes advantage of the fact that I'm is yanked from the start of the string when deleting the text from the start, and pastes it to the end with <C-r>" while in insert mode.

C (gcc), 59 42 33 bytes

-17 bytes thanks to @Conor O'Brien noticing that the import wasn't necessary

-9 bytes thanks to @tsh pointing out a shorter, UB way of writing the function

a(x){printf("Hi%s, I'm C!",x+3);}

Try it online!

Chops off the first 3 characters of the input (removes I'm) and surrounds it with the desired text.

V, 13 bytes

cEHi<Esc>A, <C-O>p V!

Try it online!

New to V. Just knew it about 30 minutes ago. Anyway, this language is chosen just because its name only cost 1 byte. I'm not sure how to send <End> key in V. Most vim environment would accept <End> as a replacement of <Esc>A in this example. But, you know, V is 2 characters shorter than vim. :)

Thanks to @Candy Gumdrop, saves 1 byte.