I think the proposal is nice, and particularly appreciate the attention to detail with defer and repopulating an inout after moving from it.
I agree with the general concerns above. move isn't a function and breaks composition in weird ways, it is built-in.
I think that Xiaodi's suggestion is good, given that operators feel more "built in".
I'd throw out <*
or <=
or <<
or <@
as other examples for consideration, e.g.:
var y = x
longAlgorithmUsing(&y)
// We no longer use y after this point, so move it when we pass it off to
// the last use.
consumeFinalY(<*y)
...
_ = <*x
Both connote "pulling the value out of the RHS".
-Chris