open_line について
vim の 'o' と 'O' にカウントを与えると、その後のインサートモードで入力されたテキストがn回挿入される。
しかしそんな操作をしたくなることがどれだけあるだろうか。私ならそんなときは o か O でまず1行挿入し、
その行を yy でヤンクして [count]p で欲しい行数だけプットする。
むしろ、[count]o では n行の空行を挿入してインサートモードを開始してほしい。
なのでそのようにしてみた。
--- ../src.orig/normal.c Sat Apr 29 22:11:18 2006 +++ normal.c Sat Oct 21 22:46:18 2006 @@ -8078,9 +8078,15 @@ #endif 0, 0)) { + int i; + + for (i=0; i<cap->count1 - 1; i++) + open_line(FORWARD, + has_format_option(FO_OPEN_COMS) ? OPENLINE_DO_COM : + 0, 0); + /* When '#' is in 'cpoptions' ignore the count. */ - if (vim_strchr(p_cpo, CPO_HASH) != NULL) - cap->count1 = 1; + cap->count1 = 1; invoke_edit(cap, FALSE, cap->cmdchar, TRUE); } }
ところでこのソース中のコメントを見ても分かるとおり、'cpoptions' にフラグ '#' が入っていると、
カウントが無視されてしまう。この動作が POSIX で規定された仕様らしい。しかし nvi, elvis, vile
どれもカウントを受け付ける。POSIX の vi 仕様はオリジナルの vi とも異なる箇所があるらしいが、
いったいどうやって決めたのだろう?