the copy part looks good to me (first 2 commits)
handling of separators in completion still lacks a couple of items
`dir "a+<TAB>` differs from native
`dir a,<TAB>` differs from native
`dir a"<TAB>` differs from native
note there are characters (other than '+') that native (tested on Win10 only) uses for file separation: '\', '&', '(', ')', '/', '!', '~', '{', '}', '[', ']' and surprisingly '^' (as ^ is an escape character)
what is not supported as separator:
'<', '>' how strange!!! you want a filename after a redirection!
'|' (that's strange I would have expected & and | to behave similarly)
and `dir a><TAB>` the '>' is swallowed by completion... not sure we want that (esp. since you'd expect to type a filename after a redirection operator)