On Thu, Feb 07, 2008 at 10:20:27PM +0100, Bram Moolenaar wrote:
> 
> James Vega wrote:
> 
> > On Wed, Feb 06, 2008 at 09:43:33PM +0100, Bram Moolenaar wrote:
> > > The main reason to do it this way is that when a startup script contains
> > > "set nocp" the following lines often depend on this.  If one would start
> > > "vim -C" and the -C would cause the "set nocp" line to be ignored, the
> > > rest of the script would be misinterpreted.  Especially for ":map"
> > > commands with things like "<C-A>".  With 'nocompatible' this means
> > > CTRL-A, with 'compatible' this is 5 separate characters.
> > 
> > The initial bug was specifically that "vim -C" with "set nocp" in a
> > startup script resulted in a Vim session that didn't have 'compatible'
> > set as per the man page.  I notice that the help for -C indicates the
> > ":set nocompatible" command will override -C so maybe it would be
> > sufficient to add this to the man page as well.  A similar note should
> > be added to the help/man page for -N.
> > 
> > This would be a simpler solution, although I still think that if the
> > user is specifically requesting (no)compatible mode at the command line,
> > they should be able to deal with side-effects it may have on startup
> > scripts.
> 
> Well, a possible solution would be to do "set compatible" after all the
> startup stuff is done.  I suppose that would work as expected.

Attached patch to do so.
-- 
GPG Key: 1024D/61326D40 2003-09-02 James Vega <[EMAIL PROTECTED]>
Index: vim/src/main.c
===================================================================
--- vim/src/main.c.orig
+++ vim/src/main.c
@@ -37,6 +37,9 @@
 #define	WIN_VER	    2	    /* "-O" vertically split windows */
 #define	WIN_TABS    3	    /* "-p" windows on tab pages */
 
+#define SET_CP   1  /* "-C" set compatible */
+#define SET_NOCP 2  /* "-N" set nocompatible */
+
 /* Struct for various parameters passed between main() and other functions. */
 typedef struct
 {
@@ -89,6 +92,7 @@
 #ifdef FEAT_DIFF
     int		diff_mode;		/* start with 'diff' set */
 #endif
+    int		option_cp;		/* 0, SET_CP, SET_NOCP */
 } mparm_T;
 
 /* Values for edit_type. */
@@ -641,6 +645,13 @@
     }
 #endif
 
+    /* -N/-C given on the command-line.  Now that the startup files are done
+     * being sourced, we set the option. */
+    if (params.option_cp == SET_CP)
+	change_compatible(TRUE);
+    else if (params.option_cp == SET_NOCP)
+	change_compatible(FALSE);
+
 #ifdef SPAWNO		/* special MSDOS swapping library */
     init_SPAWNO("", SWAP_ANY);
 #endif
@@ -1751,7 +1762,7 @@
 		break;
 
 	    case 'C':		/* "-C"  Compatible */
-		change_compatible(TRUE);
+		parmp->option_cp = SET_CP;
 		break;
 
 	    case 'e':		/* "-e" Ex mode */
@@ -1824,7 +1835,7 @@
 		break;
 
 	    case 'N':		/* "-N"  Nocompatible */
-		change_compatible(FALSE);
+		parmp->option_cp = SET_NOCP;
 		break;
 
 	    case 'n':		/* "-n" no swap file */

Attachment: signature.asc
Description: Digital signature

Reply via email to