空行のインデントを自動削除しないハック

Kaoriya 掲示板より

3621.オートインデントONのとき、空白行のインデントを自動削除させない方法は?


VIM 6.4を使わせて頂いています。


VIMのオートインデントでは、インデントされている行の末尾で改行し、次の行を空行とするためにそのまま再度改行すると、空行とした行のインデントが自動的に削除されます。


この、空行のインデントの自動削除を行わないようにすることはできるでしょうか?

misc1.c の open_line() を次のように変えれば自動削除が行われなくなる模様。
確かに Python なんかでは自動削除されない方が望ましいかも。

--- ../src.orig/misc1.c	2006-05-01 00:30:02.001000000 +0900
+++ misc1.c	2006-09-27 14:48:27.125000000 +0900
@@ -1371,8 +1371,8 @@
 	    /* truncate current line at cursor */
 	    saved_line[curwin->w_cursor.col] = NUL;
 	    /* Remove trailing white space, unless OPENLINE_KEEPTRAIL used. */
-	    if (trunc_line && !(flags & OPENLINE_KEEPTRAIL))
-		truncate_spaces(saved_line);
+	    //if (trunc_line && !(flags & OPENLINE_KEEPTRAIL))
+		//truncate_spaces(saved_line);
 	    ml_replace(curwin->w_cursor.lnum, saved_line, FALSE);
 	    saved_line = NULL;
 	    if (did_append)

ついでに で抜けたときもオートインデントを削除しないようにするには

--- ../src.orig/edit.c	2006-06-24 05:03:37.001000000 +0900
+++ edit.c	2006-09-27 15:07:14.781250000 +0900
@@ -6203,7 +6203,7 @@
 		if (gchar_cursor() == NUL && curwin->w_cursor.col > 0)
 		    --curwin->w_cursor.col;
 		cc = gchar_cursor();
-		if (!vim_iswhite(cc))
+		//if (!vim_iswhite(cc))
 		    break;
 		(void)del_char(TRUE);
 	    }

Vim7.0には 'cpo' に I というフラグがあるが、これはインサートモード中でカーソルを動かしたときに関係するらしい。