Vigil wrote:

> On Sun, 25 Mar 2007, Bram Moolenaar wrote:
> 
> > You apparently really want to pass ${*} to the shell command.  The help
> > for makeprg explains replacing $* with the name of the file, but you use
> > "%" for that.
> 
> My help says that $* is replaced with the arguments, which I take to
> mean -T in my example:
> 
>          The placeholder "$*" can be given (even multiple times) to specify
>          where the arguments will be included
> 
> It doesn't say anything about the filename. Maybe it needs to
> distinguish which arguments it is referring to.

Sorry, "$*" is indeed replaced by the ":make" arguments, not the file name.

> > This probably also works:
> >
> >    setlocal makeprg=/usr/share/vim/vim70/tools/efm_perl.pl\ -c\ -w\ $*
> 
> Nope. When I replace efm_perl.pl with efm_perl2.pl, a simple script that 
> outputs the arguments it was called with, and I have
> 
>       set makeprg=~/.vim/tools/efm_perl2.pl\ -c\ -w\ ${*}\ %
> 
> and I call ":make" on the file that I have open ('binary.pl'), efm_perl2.pl 
> outputs
> 
>       Called with: -c -w binary.pl
>
> When I call it with ":make -T", it outputs
> 
>       Called with: -c -w binary.pl -T

What happens here is that ${*} is changed by the shell to an empty
string.  Then % is changed to the file name, and the other arguments
follow, since you don't use $*.  If you leave out ${*} you get the same
result.

> Now, if I change the makeprg thus:
> 
>       set makeprg=~/.vim/tools/efm_perl2.pl\ -c\ -w\ $*
> 
> and call ":make":
> 
>       Called with: -c -w
> 
> and ":make -T":
> 
>       Called with: -c -w -T
> 
> As you can see, the filename of the current buffer is not passed to the 
> makeprg.

No, but the argument is.  Thus these two are equivalent:

        set makeprg=~/.vim/tools/efm_perl2.pl\ -c\ -w\ % $*
        set makeprg=~/.vim/tools/efm_perl2.pl\ -c\ -w\ %

Because when $* is not used you get the arguments anyway.

> Further experimentation reveals that the order of "%\ ${*}" or "${*}\
> %" makes no difference to the arguments that efm_perl2.pl is passed,
> nor their order.  Indeed, ${*} is superfluous, but it does seem that I
> need % to substitute both the filename AND any arguments I give to
> :make.
> 
> $* and all variations of braces in and around it, just doesn't work.
> 
>       This option may contain '%' and '#' characters, which are
>       expanded like when used in a command-line.
> 
> I think that needs explaining a bit more. To me, % is used when
> specifying the entire range of the file on the vim command line, and #
> prints lines with their respective line numbers :/

This refers to using them in an argument.  That should be mentioned,
I'll adjust the text.

-- 
It is illegal for anyone to give lighted cigars to dogs, cats, and other
domesticated animal kept as pets.
                [real standing law in Illinois, United States of America]

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Reply via email to