diff --git a/src/optionstr.c b/src/optionstr.c
index ae584d0..85405ed 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -687,7 +687,7 @@
 			    ? "/\\*?[|;&<>\r\n" : "/\\*?[<>\r\n")) != NULL)
 	  || ((get_option_flags(opt_idx) & P_NDNAME)
 		    && vim_strpbrk(*varp, (char_u *)"*?[|;&<>\r\n") != NULL))
-	errmsg = e_invarg;
+	errmsg = e_invalid_argument;
 
     // 'term'
     else if (varp == &T_NAME)
@@ -732,14 +732,14 @@
 	else
 	{
 	    if (opt_strings_flags(bkc, p_bkc_values, flags, TRUE) != OK)
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 	    if ((((int)*flags & BKC_AUTO) != 0)
 		    + (((int)*flags & BKC_YES) != 0)
 		    + (((int)*flags & BKC_NO) != 0) != 1)
 	    {
 		// Must have exactly one of "auto", "yes"  and "no".
 		(void)opt_strings_flags(oldval, p_bkc_values, flags, TRUE);
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 	    }
 	}
     }
@@ -756,7 +756,7 @@
     else if (varp == &curwin->w_p_briopt)
     {
 	if (briopt_check(curwin) == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -771,7 +771,7 @@
 	if (init_chartab() == FAIL)
 	{
 	    did_chartab = TRUE;	    // need to restore it below
-	    errmsg = e_invarg;	    // error in value
+	    errmsg = e_invalid_argument;	    // error in value
 	}
     }
 
@@ -797,7 +797,7 @@
 				  || gvarp == &curwin->w_allbuf_opt.wo_culopt)
     {
 	if (**varp == NUL || fill_culopt_flags(*varp, curwin) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'colorcolumn'
@@ -814,7 +814,7 @@
 	{
 	    if (s[1] == NUL || ((s[2] != ',' || s[3] == NUL) && s[2] != NUL))
 	    {
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 		break;
 	    }
 	    if (s[2] == NUL)
@@ -827,14 +827,14 @@
     else if (varp == &p_hl)
     {
 	if (highlight_changed() == FAIL)
-	    errmsg = e_invarg;	// invalid flags
+	    errmsg = e_invalid_argument;	// invalid flags
     }
 
     // 'nrformats'
     else if (gvarp == &p_nf)
     {
 	if (check_opt_strings(*varp, p_nf_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_SESSION
@@ -842,19 +842,19 @@
     else if (varp == &p_ssop)
     {
 	if (opt_strings_flags(p_ssop, p_ssop_values, &ssop_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	if ((ssop_flags & SSOP_CURDIR) && (ssop_flags & SSOP_SESDIR))
 	{
 	    // Don't allow both "sesdir" and "curdir".
 	    (void)opt_strings_flags(oldval, p_ssop_values, &ssop_flags, TRUE);
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	}
     }
     // 'viewoptions'
     else if (varp == &p_vop)
     {
 	if (opt_strings_flags(p_vop, p_ssop_values, &vop_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -862,14 +862,14 @@
     else if (varp == &p_sbo)
     {
 	if (check_opt_strings(p_sbo, p_scbopt_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'ambiwidth'
     else if (varp == &p_ambw || varp == &p_emoji)
     {
 	if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else if (set_chars_option(curwin, &p_fcs) != NULL)
 	    errmsg = _(e_conflicts_with_value_of_fillchars);
 	else
@@ -920,21 +920,21 @@
 #endif
 	}
 	else
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'wildmode'
     else if (varp == &p_wim)
     {
 	if (check_opt_wim() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'wildoptions'
     else if (varp == &p_wop)
     {
 	if (check_opt_strings(p_wop, p_wop_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_WAK
@@ -943,7 +943,7 @@
     {
 	if (*p_wak == NUL
 		|| check_opt_strings(p_wak, p_wak_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 # ifdef FEAT_MENU
 #  ifdef FEAT_GUI_MOTIF
 	else if (gui.in_use)
@@ -962,7 +962,7 @@
     else if (varp == &p_ei)
     {
 	if (check_ei() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'encoding', 'fileencoding', 'termencoding' and 'makeencoding'
@@ -976,7 +976,7 @@
 	    else if (vim_strchr(*varp, ',') != NULL)
 		// No comma allowed in 'fileencoding'; catches confusing it
 		// with 'fileencodings'.
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 	    else
 	    {
 		// May show a "+" in the title now.
@@ -1029,7 +1029,7 @@
 		{
 		    semsg(_("E950: Cannot convert between %s and %s"),
 			    p_tenc, p_enc);
-		    errmsg = e_invarg;
+		    errmsg = e_invalid_argument;
 		}
 	    }
 
@@ -1069,7 +1069,7 @@
     else if (varp == &p_imak)
     {
 	if (!im_xim_isvalid_imactivate())
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -1077,7 +1077,7 @@
     else if (varp == &curbuf->b_p_keymap)
     {
 	if (!valid_filetype(*varp))
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    int	    secure_save = secure;
@@ -1129,7 +1129,7 @@
 	if (!curbuf->b_p_ma && !(opt_flags & OPT_GLOBAL))
 	    errmsg = e_cannot_make_changes_modifiable_is_off;
 	else if (check_opt_strings(*varp, p_ff_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    // may also change 'textmode'
@@ -1151,7 +1151,7 @@
     else if (varp == &p_ffs)
     {
 	if (check_opt_strings(p_ffs, p_ff_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    // also change 'textauto'
@@ -1186,9 +1186,9 @@
 	else
 	    p = p_cm;
 	if (check_opt_strings(p, p_cm_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else if (crypt_self_test() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    // When setting the global value to empty, make it "zip".
@@ -1257,7 +1257,7 @@
 		}
 		if (x2 != ':' || x3 == -1 || (*p != NUL && *p != ','))
 		{
-		    errmsg = e_invarg;
+		    errmsg = e_invalid_argument;
 		    break;
 		}
 		if (*p == NUL)
@@ -1271,7 +1271,7 @@
 	    {
 		if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
 		{
-		    errmsg = e_invarg;
+		    errmsg = e_invalid_argument;
 		    break;
 		}
 		if (p[3] == NUL)
@@ -1356,7 +1356,7 @@
     {
 	verbose_stop();
 	if (*p_vfile != NUL && verbose_open() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_VIMINFO
@@ -1643,7 +1643,7 @@
 	// that.
 	mch_setmouse(FALSE);
 	if (opt_strings_flags(p_ttym, p_ttym_values, &ttym_flags, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	    check_mouse_termcode();
 	if (termcap_active)
@@ -1656,14 +1656,14 @@
     {
 	if (*p_sel == NUL
 		|| check_opt_strings(p_sel, p_sel_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'selectmode'
     else if (varp == &p_slm)
     {
 	if (check_opt_strings(p_slm, p_slm_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_BROWSE
@@ -1672,7 +1672,7 @@
     {
 	if (check_opt_strings(p_bsdir, p_bsdir_values, FALSE) != OK
 		&& !mch_isdir(p_bsdir))
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -1680,7 +1680,7 @@
     else if (varp == &p_km)
     {
 	if (check_opt_strings(p_km, p_km_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    km_stopsel = (vim_strchr(p_km, 'o') != NULL);
@@ -1692,7 +1692,7 @@
     else if (varp == &p_mousem)
     {
 	if (check_opt_strings(p_mousem, p_mousem_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 #if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU) && (XmVersion <= 1002)
 	else if (*p_mousem != *oldval)
 	    // Changed from "extend" to "popup" or "popup_setpos" or vv: need
@@ -1705,21 +1705,21 @@
     else if (varp == &p_swb)
     {
 	if (opt_strings_flags(p_swb, p_swb_values, &swb_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'debug'
     else if (varp == &p_debug)
     {
 	if (check_opt_strings(p_debug, p_debug_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'display'
     else if (varp == &p_dy)
     {
 	if (opt_strings_flags(p_dy, p_dy_values, &dy_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	    (void)init_chartab();
 
@@ -1729,7 +1729,7 @@
     else if (varp == &p_ead)
     {
 	if (check_opt_strings(p_ead, p_ead_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_CLIPBOARD
@@ -1748,7 +1748,7 @@
 
 	if ((is_spellfile && !valid_spellfile(*varp))
 	    || (!is_spellfile && !valid_spelllang(*varp)))
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	    errmsg = did_set_spell_option(is_spellfile);
     }
@@ -1761,19 +1761,19 @@
     else if (varp == &(curwin->w_s->b_p_spo))
     {
 	if (**varp != NUL && STRCMP("camel", *varp) != 0)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
     // 'spellsuggest'
     else if (varp == &p_sps)
     {
 	if (spell_check_sps() != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
     // 'mkspellmem'
     else if (varp == &p_msm)
     {
 	if (spell_check_msm() != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -1781,14 +1781,14 @@
     else if (gvarp == &p_bh)
     {
 	if (check_opt_strings(curbuf->b_p_bh, p_bufhidden_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // When 'buftype' is set, check for valid value.
     else if (gvarp == &p_bt)
     {
 	if (check_opt_strings(curbuf->b_p_bt, p_buftype_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    if (curwin->w_status_height)
@@ -1876,7 +1876,7 @@
     else if (varp == &p_cot)
     {
 	if (check_opt_strings(p_cot, p_cot_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	    completeopt_was_set();
     }
@@ -1887,7 +1887,7 @@
     {
 	if (check_opt_strings(p_csl, p_csl_values, FALSE) != OK
 		|| check_opt_strings(curbuf->b_p_csl, p_csl_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -1896,7 +1896,7 @@
     else if (varp == &curwin->w_p_scl)
     {
 	if (check_opt_strings(*varp, p_scl_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	// When changing the 'signcolumn' to or from 'number', recompute the
 	// width of the number column if 'number' or 'relativenumber' is set.
 	if (((*oldval == 'n' && *(oldval + 1) == 'u')
@@ -1913,7 +1913,7 @@
     {
 	if (opt_strings_flags(p_toolbar, p_toolbar_values,
 			      &toolbar_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    out_flush();
@@ -1928,7 +1928,7 @@
     else if (varp == &p_tbis)
     {
 	if (opt_strings_flags(p_tbis, p_tbis_values, &tbis_flags, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    out_flush();
@@ -1961,15 +1961,15 @@
 	if (VIM_ISDIGIT(*p_bs))
 	{
 	    if (*p_bs > '3' || p_bs[1] != NUL)
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 	}
 	else if (check_opt_strings(p_bs, p_bs_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
     else if (varp == &p_bo)
     {
 	if (opt_strings_flags(p_bo, p_bo_values, &bo_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'tagcase'
@@ -1993,14 +1993,14 @@
 	    *flags = 0;
 	else if (*p == NUL
 		|| opt_strings_flags(p, p_tc_values, flags, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'casemap'
     else if (varp == &p_cmp)
     {
 	if (opt_strings_flags(p_cmp, p_cmp_values, &cmp_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_DIFF
@@ -2008,7 +2008,7 @@
     else if (varp == &p_dip)
     {
 	if (diffopt_changed() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -2018,7 +2018,7 @@
     {
 	if (check_opt_strings(*varp, p_fdm_values, FALSE) != OK
 		|| *curwin->w_p_fdm == NUL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    foldUpdateAll(curwin);
@@ -2033,7 +2033,7 @@
 	if (p == NULL)
 	    errmsg = N_("E536: comma required");
 	else if (p == *varp || p[1] == NUL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else if (foldmethodIsMarker(curwin))
 	    foldUpdateAll(curwin);
     }
@@ -2047,13 +2047,13 @@
     else if (varp == &p_fdo)
     {
 	if (opt_strings_flags(p_fdo, p_fdo_values, &fdo_flags, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
     // 'foldclose'
     else if (varp == &p_fcl)
     {
 	if (check_opt_strings(p_fcl, p_fcl_values, TRUE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
     // 'foldignore'
     else if (gvarp == &curwin->w_allbuf_opt.wo_fdi)
@@ -2081,7 +2081,7 @@
 	else
 	{
 	    if (opt_strings_flags(ve, p_ve_values, flags, TRUE) != OK)
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 	    else if (STRCMP(p_ve, oldval) != 0)
 	    {
 		// Recompute cursor position in case the new 've' setting
@@ -2105,7 +2105,7 @@
 			|| vim_strchr((char_u *)CSQF_FLAGS, p[1]) == NULL
 			|| (p[2] != NUL && p[2] != ','))
 		{
-		    errmsg = e_invarg;
+		    errmsg = e_invalid_argument;
 		    break;
 		}
 		else if (p[2] == NUL)
@@ -2131,14 +2131,14 @@
     else if (varp == &p_rop)
     {
 	if (!gui_mch_set_rendering_options(p_rop))
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
     else if (gvarp == &p_ft)
     {
 	if (!valid_filetype(*varp))
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    value_changed = STRCMP(oldval, *varp) != 0;
@@ -2153,7 +2153,7 @@
     else if (gvarp == &p_syn)
     {
 	if (!valid_filetype(*varp))
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	{
 	    value_changed = STRCMP(oldval, *varp) != 0;
@@ -2171,7 +2171,7 @@
     {
 	if (*curwin->w_p_twk != NUL
 				  && string_to_key(curwin->w_p_twk, TRUE) == 0)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
     // 'termwinsize'
     else if (varp == &curwin->w_p_tws)
@@ -2182,7 +2182,7 @@
 	    if (p == curwin->w_p_tws
 		    || (*p != 'x' && *p != '*')
 		    || *skipdigits(p + 1) != NUL)
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 	}
     }
     // 'wincolor'
@@ -2193,7 +2193,7 @@
     else if (varp == &p_twt)
     {
 	if (check_opt_strings(*varp, p_twt_values, FALSE) != OK)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 # endif
 #endif
@@ -2220,7 +2220,7 @@
 		    continue;
 		if (*cp == ',' && cp > *varp && *(cp-1) != ',')
 		    continue;
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 		break;
 	    }
 	    if (errmsg == NULL)
@@ -2232,7 +2232,7 @@
 			vim_free(oldarray);
 		}
 		else
-		    errmsg = e_invarg;
+		    errmsg = e_invalid_argument;
 	    }
 	}
     }
@@ -2258,7 +2258,7 @@
 		    continue;
 		if (*cp == ',' && cp > *varp && *(cp-1) != ',')
 		    continue;
-		errmsg = e_invarg;
+		errmsg = e_invalid_argument;
 		break;
 	    }
 	    if (errmsg == NULL)
@@ -2274,7 +2274,7 @@
 #endif
 		}
 		else
-		    errmsg = e_invarg;
+		    errmsg = e_invalid_argument;
 	    }
 	}
     }
@@ -2285,14 +2285,14 @@
     else if (varp == &p_pvp)
     {
 	if (parse_previewpopup(NULL) == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 # ifdef FEAT_QUICKFIX
     // 'completepopup'
     else if (varp == &p_cpp)
     {
 	if (parse_completepopup(NULL) == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
 	else
 	    popup_close_info();
     }
@@ -2390,21 +2390,21 @@
     else if (gvarp == &p_cfu)
     {
 	if (set_completefunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'omnifunc'
     else if (gvarp == &p_ofu)
     {
 	if (set_omnifunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'thesaurusfunc'
     else if (gvarp == &p_tsrfu)
     {
 	if (set_thesaurusfunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -2414,14 +2414,14 @@
     else if (gvarp == &p_imaf)
     {
 	if (set_imactivatefunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
     // 'imstatusfunc'
     else if (gvarp == &p_imsf)
     {
 	if (set_imstatusfunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -2429,7 +2429,7 @@
     else if (varp == &p_opfunc)
     {
 	if (set_operatorfunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 
 #ifdef FEAT_QUICKFIX
@@ -2437,7 +2437,7 @@
     else if (varp == &p_qftf)
     {
 	if (qf_process_qftf_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
@@ -2446,7 +2446,7 @@
     else if (gvarp == &p_tfu)
     {
 	if (set_tagfunc_option() == FAIL)
-	    errmsg = e_invarg;
+	    errmsg = e_invalid_argument;
     }
 #endif
 
