It sounds like you have the "a" flag set in 'guioptions'
. What this does is cause Vim to take control of the window manager's global selection mechanism with the effect that Visually selected text is available for pasting to other applications as well as Vim. The other effect of this flag is to associate register *
with this global selection.
Anytime you make or expand a Visual selection the global selection (and register *
) is updated. Combined with 'clipboard
' having value "unnamed", which ties the unnamed register ("
) to *
(and +
in non-X systems), you'll see the behavior you describe: put
draws from *
(== the global selection == the Visual selection), with the result that the Visual selection is overwritten with itself.
See if :set guioptions-=a
changes the behavior.