I think you're misunderstanding what piping(|) to less is doing.
xxd a.out, will show the hex output of a.out on the terminal.
xxd a.out | less, will simply send the output from xxd to less so you can scroll through it on the command line
What I think you mean to do is xxd a.out > file_to_open_in_vi.txt. This will actually dump your xxd output into a text file that you can then open with vi.