vi の ex コマンドはおそろしく不規則でパースが困難らしい。

ex.c にはこんなことが書いてあった。

 * For the fun of it, if you want to see if a vi clone got the ex argument
 * parsing right, try:
 *
 *  echo 'foo|bar' > file1; echo 'foo/bar' > file2;
 *  vi
 *  :edit +1|s/|/PIPE/|w file1| e file2|1 | s/\//SLASH/|wq
 *
 * or:  vi
 *  :set|file|append|set|file
 *
 * For extra credit, try them in a startup .exrc file.
 *
 * PUBLIC: int ex_cmd __P((SCR *));
 */

vim は正しく処理できた。