diff --git a/src/arglist.c b/src/arglist.c
index b8f2e2a..b1a6a0b 100644
--- a/src/arglist.c
+++ b/src/arglist.c
@@ -817,7 +817,6 @@
 #endif
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the possible arguments of the
  * argedit and argdelete commands.
@@ -830,7 +829,6 @@
 
     return alist_name(&ARGLIST[idx]);
 }
-#endif
 
 /*
  * Get the file name for an argument list entry.
diff --git a/src/autocmd.c b/src/autocmd.c
index 7af5f56..17b1748 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -2422,7 +2422,6 @@
     return retval;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the list of autocommand group
  * names.
@@ -2507,7 +2506,6 @@
     return (char_u *)event_names[idx - augroups.ga_len].name;
 }
 
-#endif	// FEAT_CMDL_COMPL
 
 #if defined(FEAT_EVAL) || defined(PROTO)
 /*
diff --git a/src/buffer.c b/src/buffer.c
index 274dc67..c279c26 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2567,8 +2567,6 @@
     return match;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 /*
  * Find all buffer names that match.
  * For command line expansion of ":buf" and ":sbuf".
@@ -2673,8 +2671,6 @@
     return (count == 0 ? FAIL : OK);
 }
 
-#endif /* FEAT_CMDL_COMPL */
-
 /*
  * Check for a match on the file name for buffer "buf" with regprog "prog".
  */
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index c347c1a..1454fd2 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -18,17 +18,14 @@
 static void	set_expand_context(expand_T *xp);
 static int	ExpandFromContext(expand_T *xp, char_u *, int *, char_u ***, int);
 static int	expand_showtail(expand_T *xp);
-#ifdef FEAT_CMDL_COMPL
 static int	expand_shellcmd(char_u *filepat, int *num_file, char_u ***file, int flagsarg);
 static int	ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char *dirname[]);
 static int	ExpandPackAddDir(char_u *pat, int *num_file, char_u ***file);
-# if defined(FEAT_EVAL)
+#if defined(FEAT_EVAL)
 static int	ExpandUserDefined(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file);
 static int	ExpandUserList(expand_T *xp, int *num_file, char_u ***file);
-# endif
 #endif
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     static int
 sort_func_compare(const void *s1, const void *s2)
 {
@@ -39,7 +36,6 @@
     if (*p1 == '<' && *p2 != '<') return 1;
     return STRCMP(p1, p2);
 }
-#endif
 
     static void
 ExpandEscape(
@@ -504,7 +500,7 @@
 #endif
     xp->xp_numfiles = -1;
     xp->xp_files = NULL;
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+#if defined(FEAT_EVAL)
     xp->xp_arg = NULL;
 #endif
     xp->xp_line = NULL;
@@ -985,18 +981,14 @@
 #ifdef FEAT_EVAL
     if (use_ccline && ccline->cmdfirstc == '=')
     {
-# ifdef FEAT_CMDL_COMPL
 	// pass CMD_SIZE because there is no real command
 	set_context_for_expression(xp, str, CMD_SIZE);
-# endif
     }
     else if (use_ccline && ccline->input_fn)
     {
 	xp->xp_context = ccline->xp_context;
 	xp->xp_pattern = ccline->cmdbuff;
-# if defined(FEAT_CMDL_COMPL)
 	xp->xp_arg = ccline->xp_arg;
-# endif
     }
     else
 #endif
@@ -1131,9 +1123,7 @@
     char_u	***file,
     int		options)  // WILD_ flags
 {
-#ifdef FEAT_CMDL_COMPL
     regmatch_T	regmatch;
-#endif
     int		ret;
     int		flags;
 
@@ -1230,9 +1220,6 @@
 	return FAIL;
     }
 
-#ifndef FEAT_CMDL_COMPL
-    return FAIL;
-#else
     if (xp->xp_context == EXPAND_SHELLCMD)
 	return expand_shellcmd(pat, num_file, file, flags);
     if (xp->xp_context == EXPAND_OLD_SETTING)
@@ -1361,10 +1348,8 @@
     vim_regfree(regmatch.regprog);
 
     return ret;
-#endif // FEAT_CMDL_COMPL
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Expand a list of names.
  *
@@ -1452,11 +1437,11 @@
 	    sort_strings(*file, *num_file);
     }
 
-# ifdef FEAT_CMDL_COMPL
+#if defined(FEAT_SYN_HL)
     // Reset the variables used for special highlight names expansion, so that
     // they don't show up when getting normal highlight names by ID.
     reset_expand_highlight();
-# endif
+#endif
 
     return OK;
 }
@@ -1890,9 +1875,7 @@
     *num_file = ga.ga_len;
     return OK;
 }
-#endif
 
-#if defined(FEAT_CMDL_COMPL) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Expand "file" for all comma-separated directories in "path".
  * Adds the matches to "ga".  Caller must init "ga".
@@ -1955,9 +1938,8 @@
 
     vim_free(buf);
 }
-#endif
 
-#if defined(FEAT_CMDL_COMPL) | defined(PROTO)
+#if defined(FEAT_EVAL) || defined(PROTO)
 /*
  * "getcompletion()" function
  */
@@ -2028,4 +2010,4 @@
     vim_free(pat);
     ExpandCleanup(&xpc);
 }
-#endif // FEAT_CMDL_COMPL
+#endif // FEAT_EVAL
diff --git a/src/cmdhist.c b/src/cmdhist.c
index 72b3998..683fc86 100644
--- a/src/cmdhist.c
+++ b/src/cmdhist.c
@@ -88,7 +88,6 @@
     NULL
 };
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the possible first
  * arguments of the ":history command.
@@ -112,7 +111,6 @@
 	return (char_u *)"all";
     return NULL;
 }
-#endif
 
 /*
  * init_history() - Initialize the command line history.
diff --git a/src/eval.c b/src/eval.c
index b30f404..bff5664 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -420,9 +420,7 @@
     hash_clear(&compat_hashtab);
 
     free_scriptnames();
-# if defined(FEAT_CMDL_COMPL)
     free_locales();
-# endif
 
     /* global variables */
     vars_clear(&globvarht);
@@ -1135,10 +1133,6 @@
     return retval;
 }
 
-#if defined(FEAT_CMDL_COMPL) \
-	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
-
-# if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Call Vim script function "func" and return the result as a string.
  * Returns NULL when calling the function fails.
@@ -1161,7 +1155,6 @@
     clear_tv(&rettv);
     return retval;
 }
-# endif
 
 /*
  * Call Vim script function "func" and return the result as a List.
@@ -1188,7 +1181,6 @@
 
     return rettv.vval.v_list;
 }
-#endif
 
 
 #ifdef FEAT_FOLDING
@@ -2994,8 +2986,6 @@
     vim_free(fi);
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
     void
 set_context_for_expression(
     expand_T	*xp,
@@ -3110,8 +3100,6 @@
     xp->xp_pattern = arg;
 }
 
-#endif /* FEAT_CMDL_COMPL */
-
 /*
  * ":unlet[!] var1 ... " command.
  */
@@ -3509,8 +3497,6 @@
 }
 #endif
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 /*
  * Local string buffer for the next two functions to store a variable name
  * with its prefix. Allocated in cat_prefix_varname(), freed later in
@@ -3630,8 +3616,6 @@
     return NULL;
 }
 
-#endif /* FEAT_CMDL_COMPL */
-
 /*
  * Return TRUE if "pat" matches "text".
  * Does not use 'cpo' and always uses 'magic'.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index d328f87..a296428 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -573,9 +573,7 @@
     {"getcmdpos",	0, 0, 0,	  f_getcmdpos},
     {"getcmdtype",	0, 0, 0,	  f_getcmdtype},
     {"getcmdwintype",	0, 0, 0,	  f_getcmdwintype},
-#if defined(FEAT_CMDL_COMPL)
     {"getcompletion",	2, 3, 0,	  f_getcompletion},
-#endif
     {"getcurpos",	0, 0, 0,	  f_getcurpos},
     {"getcwd",		0, 2, 0,	  f_getcwd},
     {"getenv",		1, 1, 0,	  f_getenv},
@@ -981,8 +979,6 @@
     {"xor",		2, 2, 0,	  f_xor},
 };
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 /*
  * Function given to ExpandGeneric() to obtain the list of internal
  * or user defined function names.
@@ -1034,8 +1030,6 @@
     return get_user_var_name(xp, ++intidx);
 }
 
-#endif /* FEAT_CMDL_COMPL */
-
 /*
  * Find internal function "name" in table "global_functions".
  * Return index, or -1 if not found
@@ -5845,9 +5839,7 @@
 #ifdef FEAT_CLIPBOARD
 	"clipboard",
 #endif
-#ifdef FEAT_CMDL_COMPL
 	"cmdline_compl",
-#endif
 	"cmdline_hist",
 #ifdef FEAT_COMMENTS
 	"comments",
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index c0bf0e9..71b9d06 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3242,15 +3242,15 @@
     }
 }
 
-# if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 static char_u	**locales = NULL;	/* Array of all available locales */
 
-#  ifndef MSWIN
+# ifndef MSWIN
 static int	did_init_locales = FALSE;
 
-/* Return an array of strings for all available locales + NULL for the
- * last element.  Return NULL in case of error. */
+/*
+ * Return an array of strings for all available locales + NULL for the
+ * last element.  Return NULL in case of error.
+ */
     static char_u **
 find_locales(void)
 {
@@ -3289,7 +3289,7 @@
     ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
     return (char_u **)locales_ga.ga_data;
 }
-#  endif
+# endif
 
 /*
  * Lazy initialization of all available locales.
@@ -3351,6 +3351,5 @@
 	return NULL;
     return locales[idx];
 }
-# endif
 
 #endif
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a9ae299..a64a0b4 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3323,10 +3323,8 @@
     char_u		*cmd, *arg;
     int			len = 0;
     exarg_T		ea;
-#ifdef FEAT_CMDL_COMPL
     int			compl = EXPAND_NOTHING;
     int			delim;
-#endif
     int			forceit = FALSE;
     int			usefilter = FALSE;  /* filter instead of file name */
 
@@ -3432,13 +3430,7 @@
 	else if (cmd[0] >= 'A' && cmd[0] <= 'Z')
 	{
 	    ea.cmd = cmd;
-	    p = find_ucmd(&ea, p, NULL, xp,
-#if defined(FEAT_CMDL_COMPL)
-		    &compl
-#else
-		    NULL
-#endif
-		    );
+	    p = find_ucmd(&ea, p, NULL, xp, &compl);
 	    if (p == NULL)
 		ea.cmdidx = CMD_SIZE;	// ambiguous user command
 	}
@@ -3662,14 +3654,11 @@
 	    {
 		xp->xp_context = EXPAND_ENV_VARS;
 		++xp->xp_pattern;
-#if defined(FEAT_CMDL_COMPL)
 		/* Avoid that the assignment uses EXPAND_FILES again. */
 		if (compl != EXPAND_USER_DEFINED && compl != EXPAND_USER_LIST)
 		    compl = EXPAND_ENV_VARS;
-#endif
 	    }
 	}
-#if defined(FEAT_CMDL_COMPL)
 	/* Check for user names */
 	if (*xp->xp_pattern == '~')
 	{
@@ -3685,7 +3674,6 @@
 		++xp->xp_pattern;
 	    }
 	}
-#endif
     }
 
 /*
@@ -3759,8 +3747,7 @@
 	    }
 	    return skipwhite(arg);
 
-#ifdef FEAT_CMDL_COMPL
-# ifdef FEAT_SEARCH_EXTRA
+#ifdef FEAT_SEARCH_EXTRA
 	case CMD_match:
 	    if (*arg == NUL || !ends_excmd(*arg))
 	    {
@@ -3774,7 +3761,7 @@
 		}
 	    }
 	    return find_nextcmd(arg);
-# endif
+#endif
 
 /*
  * All completion for the +cmdline_compl feature goes here.
@@ -4143,8 +4130,6 @@
 	    xp->xp_pattern = arg;
 	    break;
 
-#endif /* FEAT_CMDL_COMPL */
-
 	default:
 	    break;
     }
@@ -5554,7 +5539,6 @@
     return OK;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the list of command names.
  */
@@ -5565,7 +5549,6 @@
 	return get_user_command_name(idx);
     return cmdnames[idx].cmd_name;
 }
-#endif
 
     static void
 ex_colorscheme(exarg_T *eap)
@@ -9178,7 +9161,6 @@
 	semsg(_(e_invarg2), eap->arg);
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the possible arguments of the
  * ":behave {mswin,xterm}" command.
@@ -9204,9 +9186,7 @@
 	return (char_u *)"clear";
     return NULL;
 }
-#endif
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     char_u *
 get_mapclear_arg(expand_T *xp UNUSED, int idx)
 {
@@ -9214,7 +9194,6 @@
 	return (char_u *)"<buffer>";
     return NULL;
 }
-#endif
 
 static int filetype_detect = FALSE;
 static int filetype_plugin = FALSE;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 24cce5b..6418ffe 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -894,9 +894,7 @@
     {
 	xpc.xp_context = ccline.xp_context;
 	xpc.xp_pattern = ccline.cmdbuff;
-# if defined(FEAT_CMDL_COMPL)
 	xpc.xp_arg = ccline.xp_arg;
-# endif
     }
 #endif
 
diff --git a/src/feature.h b/src/feature.h
index a8ae376..1c5128a 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -105,6 +105,7 @@
  * +virtualedit		'virtualedit' option and its implementation
  * +user_commands	Allow the user to define his own commands.
  * +multi_byte		Generic multi-byte character handling.
+ * +cmdline_compl	completion of mappings/abbreviations in cmdline mode.
  *
  * Obsolete:
  * +tag_old_static	Old style static tags: "file:tag  file  ..".
@@ -177,14 +178,6 @@
 # define FEAT_INS_EXPAND
 #endif
 
-/*
- * +cmdline_compl	completion of mappings/abbreviations in cmdline mode.
- *			Takes a few Kbyte of code.
- */
-#ifdef FEAT_NORMAL
-# define FEAT_CMDL_COMPL
-#endif
-
 #ifdef FEAT_NORMAL
 # define VIM_BACKTICK		/* internal backtick expansion */
 #endif
diff --git a/src/globals.h b/src/globals.h
index a07ab40..61cb2b2 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -356,12 +356,10 @@
 EXTERN int	scroll_region INIT(= FALSE); // term supports scroll region
 EXTERN int	t_colors INIT(= 0);	    // int value of T_CCO
 
-#ifdef FEAT_CMDL_COMPL
 // Flags to indicate an additional string for highlight name completion.
 EXTERN int include_none INIT(= 0);	// when 1 include "None"
 EXTERN int include_default INIT(= 0);	// when 1 include "default"
 EXTERN int include_link INIT(= 0);	// when 2 include "link" and "clear"
-#endif
 
 /*
  * When highlight_match is TRUE, highlight a match, starting at the cursor
diff --git a/src/highlight.c b/src/highlight.c
index 0181327..db65ffc 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -3499,8 +3499,6 @@
     return OK;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 static void highlight_list(void);
 static void highlight_list_two(int cnt, int attr);
 
@@ -3577,10 +3575,6 @@
     ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
 }
 
-#endif // FEAT_CMDL_COMPL
-
-#if defined(FEAT_CMDL_COMPL) || (defined(FEAT_SYN_HL) && defined(FEAT_EVAL)) \
-    || defined(FEAT_SIGNS) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the list of group names.
  */
@@ -3605,7 +3599,6 @@
     if (skip_cleared && idx < highlight_ga.ga_len && HL_TABLE()[idx].sg_cleared)
 	return (char_u *)"";
 
-#ifdef FEAT_CMDL_COMPL
     if (idx == highlight_ga.ga_len && include_none != 0)
 	return (char_u *)"none";
     if (idx == highlight_ga.ga_len + include_none && include_default != 0)
@@ -3616,12 +3609,10 @@
     if (idx == highlight_ga.ga_len + include_none + include_default + 1
 							 && include_link != 0)
 	return (char_u *)"clear";
-#endif
     if (idx >= highlight_ga.ga_len)
 	return NULL;
     return HL_TABLE()[idx].sg_name;
 }
-#endif
 
 #if defined(FEAT_GUI) || defined(PROTO)
 /*
diff --git a/src/if_cscope.c b/src/if_cscope.c
index d248396..8e3a9bf 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -79,8 +79,6 @@
     (void)semsg(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage);
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 static enum
 {
     EXP_CSCOPE_SUBCMD,	/* expand ":cscope" sub-commands */
@@ -189,8 +187,6 @@
     }
 }
 
-#endif /* FEAT_CMDL_COMPL */
-
 /*
  * Find the command, print help if invalid, and then call the corresponding
  * command function.
diff --git a/src/map.c b/src/map.c
index 9ee64f2..0257cb7 100644
--- a/src/map.c
+++ b/src/map.c
@@ -982,7 +982,6 @@
     return FALSE;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Used below when expanding mapping/abbreviation names.
  */
@@ -1198,7 +1197,6 @@
     *num_file = count;
     return (count == 0 ? FAIL : OK);
 }
-#endif // FEAT_CMDL_COMPL
 
 /*
  * Check for an abbreviation.
diff --git a/src/menu.c b/src/menu.c
index 5cdf501..29f58c7 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -43,9 +43,7 @@
 #endif
 
 static int menu_is_hidden(char_u *name);
-#if defined(FEAT_CMDL_COMPL) || (defined(FEAT_GUI_MSWIN) && defined(FEAT_TEAROFF))
 static int menu_is_tearoff(char_u *name);
-#endif
 
 #if defined(FEAT_MULTI_LANG) || defined(FEAT_TOOLBAR)
 static char_u *menu_skip_part(char_u *p);
@@ -1234,8 +1232,6 @@
     }
 }
 
-#ifdef FEAT_CMDL_COMPL
-
 /*
  * Used when expanding menu names.
  */
@@ -1555,7 +1551,6 @@
 
     return str;
 }
-#endif /* FEAT_CMDL_COMPL */
 
 /*
  * Skip over this element of the menu path and return the start of the next
@@ -1864,8 +1859,6 @@
     return (name[0] == ']') || (menu_is_popup(name) && name[5] != NUL);
 }
 
-#if defined(FEAT_CMDL_COMPL) \
-	|| (defined(FEAT_GUI_MSWIN) && defined(FEAT_TEAROFF))
 /*
  * Return TRUE if the menu is the tearoff menu.
  */
@@ -1878,7 +1871,6 @@
     return FALSE;
 #endif
 }
-#endif
 
 #if defined(FEAT_GUI) || defined(FEAT_TERM_POPUP_MENU) || defined(PROTO)
 
diff --git a/src/misc1.c b/src/misc1.c
index 7df3954..0277c9e 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -14,7 +14,7 @@
 #include "vim.h"
 #include "version.h"
 
-#if defined(FEAT_CMDL_COMPL) && defined(MSWIN)
+#if defined(MSWIN)
 # include <lm.h>
 #endif
 
@@ -24,10 +24,8 @@
 #define URL_SLASH	1		/* path_is_url() has found "://" */
 #define URL_BACKSLASH	2		/* path_is_url() has found ":\\" */
 
-/* All user names (for ~user completion as done by shell). */
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+// All user names (for ~user completion as done by shell).
 static garray_T	ga_users;
-#endif
 
 /*
  * Count the size (in window cells) of the indent in the current line.
@@ -1715,13 +1713,11 @@
     vim_free(homedir);
 }
 
-# ifdef FEAT_CMDL_COMPL
     void
 free_users(void)
 {
     ga_clear_strings(&ga_users);
 }
-# endif
 #endif
 
 /*
@@ -2366,7 +2362,6 @@
 #endif
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain an environment variable name.
  */
@@ -2532,7 +2527,6 @@
     }
     return result;
 }
-#endif
 
 /*
  * Replace home directory by "~" in each space or comma separated file name in
@@ -3868,7 +3862,6 @@
 }
 #endif
 
-#if defined(FEAT_SEARCHPATH) || defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Sort "gap" and remove duplicate entries.  "gap" is expected to contain a
  * list of file names in allocated memory.
@@ -3890,7 +3883,6 @@
 	    --gap->ga_len;
 	}
 }
-#endif
 
 /*
  * Return TRUE if "p" contains what looks like an environment variable.
@@ -4246,7 +4238,9 @@
 }
 #endif /* !NO_EXPANDPATH */
 
-#if defined(VIM_BACKTICK) || defined(FEAT_EVAL) || defined(PROTO)
+#if defined(VIM_BACKTICK) || defined(FEAT_EVAL) \
+	|| (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+	|| defined(PROTO)
 
 #ifndef SEEK_SET
 # define SEEK_SET 0
diff --git a/src/misc2.c b/src/misc2.c
index db3687d..9fd8dfd 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1108,9 +1108,7 @@
     free_all_marks();
     alist_clear(&global_alist);
     free_homedir();
-# if defined(FEAT_CMDL_COMPL)
     free_users();
-# endif
     free_search_patterns();
     free_old_sub();
     free_last_insert();
@@ -3041,7 +3039,6 @@
     return 0;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     char_u *
 get_key_name(int i)
 {
@@ -3049,7 +3046,6 @@
 	return NULL;
     return  key_names_table[i].name;
 }
-#endif
 
 #if defined(FEAT_MOUSE) || defined(PROTO)
 /*
diff --git a/src/option.c b/src/option.c
index 65403b5..2d4803e 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3045,13 +3045,8 @@
 			    (char_u *)&p_wim, PV_NONE,
 			    {(char_u *)"full", (char_u *)0L} SCTX_INIT},
     {"wildoptions", "wop",  P_STRING|P_VI_DEF,
-#ifdef FEAT_CMDL_COMPL
 			    (char_u *)&p_wop, PV_NONE,
 			    {(char_u *)"", (char_u *)0L}
-#else
-			    (char_u *)NULL, PV_NONE,
-			    {(char_u *)NULL, (char_u *)0L}
-#endif
 			    SCTX_INIT},
     {"winaltkeys",  "wak",  P_STRING|P_VI_DEF,
 #ifdef FEAT_WAK
@@ -3228,9 +3223,7 @@
 #ifdef FEAT_CRYPT
 static char *(p_cm_values[]) = {"zip", "blowfish", "blowfish2", NULL};
 #endif
-#ifdef FEAT_CMDL_COMPL
 static char *(p_wop_values[]) = {"tagfile", NULL};
-#endif
 #ifdef FEAT_WAK
 static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
 #endif
@@ -6510,14 +6503,12 @@
 	    errmsg = e_invarg;
     }
 
-#ifdef FEAT_CMDL_COMPL
     /* 'wildoptions' */
     else if (varp == &p_wop)
     {
 	if (check_opt_strings(p_wop, p_wop_values, TRUE) != OK)
 	    errmsg = e_invarg;
     }
-#endif
 
 #ifdef FEAT_WAK
     /* 'winaltkeys' */
@@ -11846,7 +11837,6 @@
     p_imsearch = curbuf->b_p_imsearch;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 static int expand_option_idx = -1;
 static char_u expand_option_name[5] = {'t', '_', NUL, NUL, NUL};
 static int expand_option_flags = 0;
@@ -12276,7 +12266,6 @@
     *num_file = 1;
     return OK;
 }
-#endif
 
 /*
  * Get the value for the numeric or string option *opp in a nice format into
diff --git a/src/option.h b/src/option.h
index 71a599e..0461a64 100644
--- a/src/option.h
+++ b/src/option.h
@@ -926,9 +926,7 @@
 extern char_u	*p_vfile;	// 'verbosefile'
 #endif
 EXTERN int	p_warn;		// 'warn'
-#ifdef FEAT_CMDL_COMPL
 EXTERN char_u	*p_wop;		// 'wildoptions'
-#endif
 EXTERN long	p_window;	// 'window'
 #if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(LINT) \
 	|| defined (FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON)
diff --git a/src/sign.c b/src/sign.c
index 9a7ca21..7628fce 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -1878,7 +1878,6 @@
 	sign_undefine(first_sign, NULL);
 }
 
-# if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 static enum
 {
     EXP_SUBCMD,		// expand :sign sub-commands
@@ -2107,7 +2106,6 @@
 	}
     }
 }
-# endif
 
 /*
  * Define a sign using the attributes in 'dict'. Returns 0 on success and -1 on
diff --git a/src/structs.h b/src/structs.h
index 97b1299..41f6036 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -555,7 +555,7 @@
     int		xp_context;		// type of expansion
     char_u	*xp_pattern;		// start of item to expand
     int		xp_pattern_len;		// bytes in xp_pattern before cursor
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+#if defined(FEAT_EVAL)
     char_u	*xp_arg;		// completion function
     sctx_T	xp_script_ctx;		// SCTX for completion function
 #endif
diff --git a/src/syntax.c b/src/syntax.c
index 3d06f44..154b759 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6302,7 +6302,6 @@
 	    || win->w_s->b_keywtab_ic.ht_used > 0);
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 
 static enum
 {
@@ -6409,7 +6408,6 @@
     return NULL;
 }
 
-#endif /* FEAT_CMDL_COMPL */
 
 /*
  * Function called for expression evaluation: get syntax ID at file position.
@@ -6569,7 +6567,6 @@
     }
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Function given to ExpandGeneric() to obtain the possible arguments of the
  * ":syntime {on,off,clear,report}" command.
@@ -6586,7 +6583,6 @@
     }
     return NULL;
 }
-#endif
 
 typedef struct
 {
diff --git a/src/tag.c b/src/tag.c
index ec44516..64b3057 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -3859,7 +3859,6 @@
     VIM_CLEAR(item->user_data);
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     int
 expand_tags(
     int		tagnames,	/* expand tag names */
@@ -3907,7 +3906,6 @@
     }
     return ret;
 }
-#endif
 
 #if defined(FEAT_EVAL) || defined(PROTO)
 /*
diff --git a/src/term.c b/src/term.c
index 2dc6cbd..7c2111b 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4299,7 +4299,6 @@
     return NULL;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     char_u *
 get_termcode(int i)
 {
@@ -4307,7 +4306,6 @@
 	return NULL;
     return &termcodes[i].name[0];
 }
-#endif
 
     void
 del_termcode(char_u *name)
@@ -6700,7 +6698,6 @@
 }
 #endif
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
 /*
  * Translate an internal mapping/abbreviation representation into the
  * corresponding external one recognized by :map/:abbrev commands.
@@ -6775,7 +6772,6 @@
     ga_append(&ga, NUL);
     return (char_u *)(ga.ga_data);
 }
-#endif
 
 #if (defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))) || defined(PROTO)
 static char ksme_str[20];
diff --git a/src/usercmd.c b/src/usercmd.c
index f43a0a5..c6bf7fe 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -23,9 +23,7 @@
     cmd_addr_T	uc_addr_type;	// The command's address type
 # ifdef FEAT_EVAL
     sctx_T	uc_script_ctx;	// SCTX where the command was defined
-#  ifdef FEAT_CMDL_COMPL
     char_u	*uc_compl_arg;	// completion argument if any
-#  endif
 # endif
 } ucmd_T;
 
@@ -55,7 +53,7 @@
 #if defined(FEAT_CSCOPE)
     {EXPAND_CSCOPE, "cscope"},
 #endif
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+#if defined(FEAT_EVAL)
     {EXPAND_USER_DEFINED, "custom"},
     {EXPAND_USER_LIST, "customlist"},
 #endif
@@ -185,17 +183,15 @@
 		    eap->useridx = j;
 		    eap->addr_type = uc->uc_addr_type;
 
-# ifdef FEAT_CMDL_COMPL
 		    if (complp != NULL)
 			*complp = uc->uc_compl;
-#  ifdef FEAT_EVAL
+# ifdef FEAT_EVAL
 		    if (xp != NULL)
 		    {
 			xp->xp_arg = uc->uc_compl_arg;
 			xp->xp_script_ctx = uc->uc_script_ctx;
 			xp->xp_script_ctx.sc_lnum += sourcing_lnum;
 		    }
-#  endif
 # endif
 		    // Do not search for further abbreviations
 		    // if this is an exact match.
@@ -232,8 +228,6 @@
     return p;
 }
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
     char_u *
 set_context_in_user_cmd(expand_T *xp, char_u *arg_in)
 {
@@ -384,8 +378,6 @@
     return EXPAND_NOTHING;
 }
 
-#endif // FEAT_CMDL_COMPL
-
 /*
  * List user commands starting with "name[name_len]".
  */
@@ -622,7 +614,7 @@
     char_u	**compl_arg UNUSED)
 {
     char_u	*arg = NULL;
-# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+# if defined(FEAT_EVAL)
     size_t	arglen = 0;
 # endif
     int		i;
@@ -634,7 +626,7 @@
 	if (value[i] == ',')
 	{
 	    arg = &value[i + 1];
-# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+# if defined(FEAT_EVAL)
 	    arglen = vallen - i - 1;
 # endif
 	    valend = i;
@@ -663,7 +655,7 @@
 	return FAIL;
     }
 
-# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+# if defined(FEAT_EVAL)
     if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
 							       && arg != NULL)
 # else
@@ -674,7 +666,7 @@
 	return FAIL;
     }
 
-# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+# if defined(FEAT_EVAL)
     if ((*complp == EXPAND_USER_DEFINED || *complp == EXPAND_USER_LIST)
 							       && arg == NULL)
     {
@@ -930,7 +922,7 @@
 	    }
 
 	    VIM_CLEAR(cmd->uc_rep);
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+#if defined(FEAT_EVAL)
 	    VIM_CLEAR(cmd->uc_compl_arg);
 #endif
 	    break;
@@ -964,9 +956,7 @@
 #ifdef FEAT_EVAL
     cmd->uc_script_ctx = current_sctx;
     cmd->uc_script_ctx.sc_lnum += sourcing_lnum;
-# ifdef FEAT_CMDL_COMPL
     cmd->uc_compl_arg = compl_arg;
-# endif
 #endif
     cmd->uc_addr_type = addr_type;
 
@@ -974,7 +964,7 @@
 
 fail:
     vim_free(rep_buf);
-#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+#if defined(FEAT_EVAL)
     vim_free(compl_arg);
 #endif
     return FAIL;
@@ -1074,7 +1064,7 @@
 	cmd = USER_CMD_GA(gap, i);
 	vim_free(cmd->uc_name);
 	vim_free(cmd->uc_rep);
-# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+# if defined(FEAT_EVAL)
 	vim_free(cmd->uc_compl_arg);
 # endif
     }
@@ -1115,7 +1105,7 @@
 
     vim_free(cmd->uc_name);
     vim_free(cmd->uc_rep);
-# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+# if defined(FEAT_EVAL)
     vim_free(cmd->uc_compl_arg);
 # endif
 
diff --git a/src/userfunc.c b/src/userfunc.c
index bdd5c37..5abea1c 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2793,8 +2793,6 @@
 }
 #endif
 
-#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-
 /*
  * Function given to ExpandGeneric() to obtain the list of user defined
  * function names.
@@ -2838,8 +2836,6 @@
     return NULL;
 }
 
-#endif /* FEAT_CMDL_COMPL */
-
 /*
  * ":delfunction {name}"
  */
diff --git a/src/version.c b/src/version.c
index 0ddfabf..eb4106f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -158,11 +158,7 @@
 #else
 	"-clipboard",
 #endif
-#ifdef FEAT_CMDL_COMPL
 	"+cmdline_compl",
-#else
-	"-cmdline_compl",
-#endif
 	"+cmdline_hist",
 #ifdef FEAT_CMDL_INFO
 	"+cmdline_info",
@@ -770,6 +766,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1887,
+/**/
     1886,
 /**/
     1885,
