前田です。

At Sat, 28 Apr 2001 02:04:59 +0900,
nobu.nakada / nifty.ne.jp wrote:
> +	if (!NIL_P(line)) {
> +	    ml_replace(i, (char_u *) STR2CSTR(line), 1);
> 
>   String 以外でというと ex_rubydo()のこの STR2CSTR()がくさいよ
> うな気がします。ml_replace() の仕様を知らないので外してたらすい
> ませんが、第二引数の文字列をコピーせずにポインタをずっと持って
> いるんだとしたら、ここは strdup() かなにかすべきだと思います。
> line が String だとしても、$_ を変更した時点で GC される可能性
> がありますから、やはりまずいはずです。

いや、ml_replace()は第3引数が真だと文字列をコピーします。

原因はPUSH_TAG&EXEC_TAGしてない環境で例外が上がってるせいですね。
添付のパッチで直ると思います。

-- 
前田 修吾

--- if_ruby.c.orig Sun Apr 29 00:41:39 2001 +++ if_ruby.c Sun Apr 29 00:43:57 2001 @@ -326,6 +326,10 @@ } line = rb_lastline_get(); if (!NIL_P(line)) { + if (TYPE(line) != T_STRING) { + EMSG("$_ must be an instance of String"); + return; + } ml_replace(i, (char_u *) STR2CSTR(line), 1); changed(); #ifdef SYNTAX_HL