ヤンクしたテキストもレジスタ1〜9に入れるハック
オリジナルの vi にはレジスタ 0 は存在せず、ヤンクしたテキストは
無名レジスタにのみ保存されるらしい。
小削除用レジスタ "- もないらしい。
どうもレジスタの挙動は複雑だと思っていたら、そんな理由があったのか。
一応、以下のパッチですべてのヤンク・削除したテキストがレジスタ0〜9
に保存され、シフトしていくようになる。
大してテストしていないので、バグ・副作用の可能性はある。
--- ../src.orig/ops.c Mon May 1 00:13:44 2006 +++ ops.c Sun Aug 6 20:31:19 2006 @@ -1629,12 +1629,12 @@ if (oap->regname != 0 || oap->motion_type == MLINE || oap->line_count > 1 || oap->use_reg_one) { - y_current = &y_regs[9]; - free_yank_all(); /* free register nine */ - for (n = 9; n > 1; --n) - y_regs[n] = y_regs[n - 1]; - y_previous = y_current = &y_regs[1]; - y_regs[1].y_array = NULL; /* set register one to empty */ + //y_current = &y_regs[9]; + //free_yank_all(); /* free register nine */ + //for (n = 9; n > 1; --n) + //y_regs[n] = y_regs[n - 1]; + //y_previous = y_current = &y_regs[1]; + //y_regs[1].y_array = NULL; /* set register one to empty */ if (op_yank(oap, TRUE, FALSE) == OK) did_yank = TRUE; } @@ -2719,6 +2719,17 @@ char_u *p; char_u *pnew; struct block_def bd; + + { + int n; + + y_current = &y_regs[9]; + free_yank_all(); + for (n = 9; n > 0; --n) + y_regs[n] = y_regs[n - 1]; + y_previous = y_current = &y_regs[0]; + y_regs[0].y_array = NULL; + } /* check for read-only register */ if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))