bufdo, windo, s の実行後にカーソル位置をもとに戻すハック

bufdo, windo の実行後にカーソル位置を元に戻す

--- ../src.orig/ex_cmds2.c	Mon Apr 17 19:19:07 2006
+++ ex_cmds2.c	Mon Aug 21 21:35:59 2006
@@ -2214,6 +2222,10 @@
 #endif
     char_u	*p_shm_save;
 
+    win_T* curwin_save = curwin;
+    buf_T* curbuf_save = curbuf;
+
+
 #ifndef FEAT_WINDOWS
     if (eap->cmdidx == CMD_windo)
     {
@@ -2351,6 +2363,9 @@
 					       curbuf->b_fname, TRUE, curbuf);
     }
 #endif
+
+    win_goto(curwin_save);
+    set_curbuf(curbuf_save, DOBUF_GOTO); 
 }
 
 /*

:substitute の実行後にカーソル位置を元に戻す

--- ../src.orig/ex_cmds.c	Sun Apr 23 03:56:56 2006
+++ ex_cmds.c	Mon Aug 21 21:49:11 2006
@@ -4968,7 +4968,7 @@
     vim_free(sub_firstline); /* may have to free allocated copy of the line */
 
     /* ":s/pat//n" doesn't move the cursor */
-    if (do_count)
+    //if (do_count)
 	curwin->w_cursor = old_cursor;
 
     if (sub_nsubs)

デフォルトではカーソル位置を戻さないようになってるのは vi との互換性のためなのかな。

C++ の内部には、脱出しようとしてもがいているはるかに小さく美しいエディタが存在する。
Stroustrup -- The Design and Evolution of C++

vim の内部には、脱出しようとしてもがいているはるかに小さく***なエディタが存在する」