O "|" é um comando de pipe. Alguns programas obtêm sua entrada de um pipe, como "menos" ou "mais".
Se você executar o seguinte comando:
$ ls -l | less
A saída de "ls" será canalizada através do pager, "less".
Se você quiser executar um comando, o outro da mesma linha sem o pipe, você usaria ";" ou "& &" (que é provavelmente o que você está procurando) em vez do pipe "|" comando.
Mais direto para sua pergunta, o que acontece é que seu comando está tentando mostrar o conteúdo de "cd" para vi.