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 */
signature.asc
Description: Digital signature

