@@ -149,6 +149,7 @@ static void f_exists(typval_T *argvars, typval_T *rettv);
149149static void f_exp (typval_T * argvars , typval_T * rettv );
150150#endif
151151static void f_expand (typval_T * argvars , typval_T * rettv );
152+ static void f_expandcmd (typval_T * argvars , typval_T * rettv );
152153static void f_extend (typval_T * argvars , typval_T * rettv );
153154static void f_feedkeys (typval_T * argvars , typval_T * rettv );
154155static void f_filereadable (typval_T * argvars , typval_T * rettv );
@@ -646,6 +647,7 @@ static struct fst
646647 {"exp" , 1 , 1 , f_exp },
647648#endif
648649 {"expand" , 1 , 3 , f_expand },
650+ {"expandcmd" , 1 , 1 , f_expandcmd },
649651 {"extend" , 2 , 3 , f_extend },
650652 {"feedkeys" , 1 , 2 , f_feedkeys },
651653 {"file_readable" , 1 , 1 , f_filereadable }, /* obsolete */
@@ -3790,6 +3792,35 @@ f_expand(typval_T *argvars, typval_T *rettv)
37903792 }
37913793}
37923794
3795+ /*
3796+ * "expandcmd()" function
3797+ * Expand all the special characters in a command string.
3798+ */
3799+ static void
3800+ f_expandcmd (typval_T * argvars , typval_T * rettv )
3801+ {
3802+ exarg_T eap ;
3803+ char_u * cmdstr ;
3804+ char * errormsg = NULL ;
3805+
3806+ rettv -> v_type = VAR_STRING ;
3807+ cmdstr = vim_strsave (tv_get_string (& argvars [0 ]));
3808+
3809+ memset (& eap , 0 , sizeof (eap ));
3810+ eap .cmd = cmdstr ;
3811+ eap .arg = cmdstr ;
3812+ eap .argt |= NOSPC ;
3813+ eap .usefilter = FALSE;
3814+ eap .nextcmd = NULL ;
3815+ eap .cmdidx = CMD_USER ;
3816+
3817+ expand_filename (& eap , & cmdstr , & errormsg );
3818+ if (errormsg != NULL && * errormsg != NUL )
3819+ emsg (errormsg );
3820+
3821+ rettv -> vval .v_string = cmdstr ;
3822+ }
3823+
37933824/*
37943825 * "extend(list, list [, idx])" function
37953826 * "extend(dict, dict [, action])" function
0 commit comments