diff --git a/src/option.c b/src/option.c
index eec8fe0..b71093b 100644
--- a/src/option.c
+++ b/src/option.c
@@ -505,7 +505,7 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {
-#if (defined(WIN3264)) && !defined(FEAT_GUI_W32)
+#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
 			    (char_u *)128L,
 #else
 			    (char_u *)224L,
@@ -575,7 +575,7 @@
     {"background",  "bg",   P_STRING|P_VI_DEF|P_RCLR,
 			    (char_u *)&p_bg, PV_NONE,
 			    {
-#if (defined(WIN3264)) && !defined(FEAT_GUI)
+#if (defined(MSWIN)) && !defined(FEAT_GUI)
 			    (char_u *)"dark",
 #else
 			    (char_u *)"light",
@@ -1309,7 +1309,7 @@
 #ifdef FEAT_QUICKFIX
 			    (char_u *)&p_gp, PV_GP,
 			    {
-# ifdef WIN3264
+# ifdef MSWIN
 			    /* may be changed to "grep -n" in os_win32.c */
 			    (char_u *)"findstr /n",
 # else
@@ -1739,7 +1739,7 @@
     {"lines",	    NULL,   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
 			    (char_u *)&Rows, PV_NONE,
 			    {
-#if defined(WIN3264)
+#if defined(MSWIN)
 			    (char_u *)25L,
 #else
 			    (char_u *)24L,
@@ -1751,7 +1751,7 @@
 #else
 			    (char_u *)NULL, PV_NONE,
 #endif
-#ifdef FEAT_GUI_W32
+#ifdef FEAT_GUI_MSWIN
 			    {(char_u *)1L, (char_u *)0L}
 #else
 			    {(char_u *)0L, (char_u *)0L}
@@ -1897,7 +1897,7 @@
     {"mouse",	    NULL,   P_STRING|P_VI_DEF|P_FLAGLIST,
 			    (char_u *)&p_mouse, PV_NONE,
 			    {
-#if defined(WIN3264)
+#if defined(MSWIN)
 				(char_u *)"a",
 #else
 				(char_u *)"",
@@ -2260,7 +2260,7 @@
 			    (char_u *)&p_report, PV_NONE,
 			    {(char_u *)2L, (char_u *)0L} SCTX_INIT},
     {"restorescreen", "rs", P_BOOL|P_VI_DEF,
-#ifdef WIN3264
+#ifdef MSWIN
 			    (char_u *)&p_rs, PV_NONE,
 #else
 			    (char_u *)NULL, PV_NONE,
@@ -2363,7 +2363,7 @@
 #ifdef VMS
 			    (char_u *)"-",
 #else
-# if defined(WIN3264)
+# if defined(MSWIN)
 			    (char_u *)"",	/* set in set_init_1() */
 # else
 			    (char_u *)"sh",
@@ -2429,7 +2429,7 @@
     {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
 			    (char_u *)&p_sxe, PV_NONE,
 			    {
-#if defined(WIN3264)
+#if defined(MSWIN)
 			    (char_u *)"\"&|<>()@^",
 #else
 			    (char_u *)"",
@@ -2720,7 +2720,7 @@
 #endif
 			    SCTX_INIT},
     {"termwintype", "twt",  P_STRING|P_ALLOCED|P_VI_DEF,
-#if defined(WIN3264) && defined(FEAT_TERMINAL)
+#if defined(MSWIN) && defined(FEAT_TERMINAL)
 			    (char_u *)&p_twt, PV_NONE,
 			    {(char_u *)"", (char_u *)NULL}
 #else
@@ -2795,7 +2795,7 @@
 #endif
 			    {(char_u *)"", (char_u *)0L} SCTX_INIT},
     {"toolbar",     "tb",   P_STRING|P_ONECOMMA|P_VI_DEF|P_NODUP,
-#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
+#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
 			    (char_u *)&p_toolbar, PV_NONE,
 			    {(char_u *)"icons,tooltips", (char_u *)0L}
 #else
@@ -2857,7 +2857,7 @@
     {"undolevels",  "ul",   P_NUM|P_VI_DEF,
 			    (char_u *)&p_ul, PV_UL,
 			    {
-#if defined(UNIX) || defined(WIN3264) || defined(VMS)
+#if defined(UNIX) || defined(MSWIN) || defined(VMS)
 			    (char_u *)1000L,
 #else
 			    (char_u *)100L,
@@ -3033,7 +3033,7 @@
 			    (char_u *)&p_wmw, PV_NONE,
 			    {(char_u *)1L, (char_u *)0L} SCTX_INIT},
     {"winptydll", NULL,	    P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
-#if defined(WIN3264) && defined(FEAT_TERMINAL)
+#if defined(MSWIN) && defined(FEAT_TERMINAL)
 			    (char_u *)&p_winptydll, PV_NONE, {
 # ifdef _WIN64
 			    (char_u *)"winpty64.dll",
@@ -3209,7 +3209,7 @@
 #ifdef FEAT_SIGNS
 static char *(p_scl_values[]) = {"yes", "no", "auto", NULL};
 #endif
-#if defined(WIN3264) && defined(FEAT_TERMINAL)
+#if defined(MSWIN) && defined(FEAT_TERMINAL)
 static char *(p_twt_values[]) = {"winpty", "conpty", "", NULL};
 #endif
 
@@ -3306,7 +3306,7 @@
     if (((p = mch_getenv((char_u *)"SHELL")) != NULL && *p != NUL)
 #if defined(MSWIN)
 	    || ((p = mch_getenv((char_u *)"COMSPEC")) != NULL && *p != NUL)
-# ifdef WIN3264
+# ifdef MSWIN
 	    || ((p = (char_u *)default_shell()) != NULL && *p != NUL)
 # endif
 #endif
@@ -3575,7 +3575,7 @@
 
     didset_options2();
 
-# if defined(WIN3264) && defined(FEAT_GETTEXT)
+# if defined(MSWIN) && defined(FEAT_GETTEXT)
     /*
      * If $LANG isn't set, try to get a good value for it.  This makes the
      * right language be used automatically.  Don't do this for English.
@@ -3658,7 +3658,7 @@
 	    }
 #endif
 
-#if defined(WIN3264) && !defined(FEAT_GUI)
+#if defined(MSWIN) && !defined(FEAT_GUI)
 	    /* Win32 console: When GetACP() returns a different value from
 	     * GetConsoleCP() set 'termencoding'. */
 	    if (GetACP() != GetConsoleCP())
@@ -3687,7 +3687,7 @@
 		    p_tenc = empty_option;
 	    }
 #endif
-#if defined(WIN3264)
+#if defined(MSWIN)
 	    /* $HOME may have characters in active code page. */
 	    init_homedir();
 #endif
@@ -3922,7 +3922,7 @@
     set_number_default("window", Rows - 1);
 
     /* For DOS console the default is always black. */
-#if !((defined(WIN3264)) && !defined(FEAT_GUI))
+#if !((defined(MSWIN)) && !defined(FEAT_GUI))
     /*
      * If 'background' wasn't set by the user, try guessing the value,
      * depending on the terminal name.  Only need to check for terminals
@@ -3965,7 +3965,7 @@
     static char_u *
 term_bg_default(void)
 {
-#if defined(WIN3264)
+#if defined(MSWIN)
     /* DOS console is nearly always black */
     return (char_u *)"dark";
 #else
@@ -3990,7 +3990,7 @@
     void
 set_init_3(void)
 {
-#if defined(UNIX) || defined(WIN3264)
+#if defined(UNIX) || defined(MSWIN)
 /*
  * Set 'shellpipe' and 'shellredir', depending on the 'shell' option.
  * This is done after other initializations, where 'shell' might have been
@@ -4025,7 +4025,7 @@
 	 */
 	if (	   fnamecmp(p, "csh") == 0
 		|| fnamecmp(p, "tcsh") == 0
-# if defined(WIN3264)	/* also check with .exe extension */
+# if defined(MSWIN)	// also check with .exe extension
 		|| fnamecmp(p, "csh.exe") == 0
 		|| fnamecmp(p, "tcsh.exe") == 0
 # endif
@@ -4034,7 +4034,7 @@
 # if defined(FEAT_QUICKFIX)
 	    if (do_sp)
 	    {
-#  ifdef WIN3264
+#  ifdef MSWIN
 		p_sp = (char_u *)">&";
 #  else
 		p_sp = (char_u *)"|& tee";
@@ -4058,7 +4058,7 @@
 		    || fnamecmp(p, "zsh-beta") == 0
 		    || fnamecmp(p, "bash") == 0
 		    || fnamecmp(p, "fish") == 0
-# ifdef WIN3264
+# ifdef MSWIN
 		    || fnamecmp(p, "cmd") == 0
 		    || fnamecmp(p, "sh.exe") == 0
 		    || fnamecmp(p, "ksh.exe") == 0
@@ -4074,7 +4074,7 @@
 # if defined(FEAT_QUICKFIX)
 		if (do_sp)
 		{
-#  ifdef WIN3264
+#  ifdef MSWIN
 		    p_sp = (char_u *)">%s 2>&1";
 #  else
 		    p_sp = (char_u *)"2>&1| tee";
@@ -4092,7 +4092,7 @@
     }
 #endif
 
-#if defined(WIN3264)
+#if defined(MSWIN)
     /*
      * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
      * 'shell' option.
@@ -5553,7 +5553,7 @@
     (void)compile_cap_prog(curwin->w_s);
     (void)did_set_spell_option(TRUE);
 #endif
-#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
+#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
     (void)opt_strings_flags(p_toolbar, p_toolbar_values, &toolbar_flags, TRUE);
 #endif
 #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK)
@@ -6403,7 +6403,7 @@
 		}
 	    }
 
-#if defined(WIN3264)
+#if defined(MSWIN)
 	    /* $HOME may have characters in active code page. */
 	    if (varp == &p_enc)
 		init_homedir();
@@ -6810,7 +6810,7 @@
 	{
 	    out_str(T_ME);
 	    redraw_later(CLEAR);
-#if defined(WIN3264) && !defined(FEAT_GUI_W32)
+#if defined(MSWIN) && !defined(FEAT_GUI_MSWIN)
 	    /* Since t_me has been set, this probably means that the user
 	     * wants to use this as default colors.  Need to reset default
 	     * background/foreground colors. */
@@ -7228,7 +7228,7 @@
 #endif
 
 
-#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32)
+#if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_MSWIN)
     /* 'toolbar' */
     else if (varp == &p_toolbar)
     {
@@ -7498,7 +7498,7 @@
 		errmsg = e_invarg;
 	}
     }
-# if defined(WIN3264)
+# if defined(MSWIN)
     // 'termwintype'
     else if (varp == &p_twt)
     {
