On Tuesday, March 19, 2013 9:52:09 AM UTC-4, Ben Fritz wrote:
> On Monday, March 18, 2013 5:39:14 PM UTC-5, FlashBurn wrote:
> > I want to create a list of files that my project is using. This list will 
> > be stored in a file and subsequently will be used by cscope.
> > 
> 
> OK, so the task is to write to a file.
> 
> > Here is what I have so far:
> > 
> > function! BuildFileList()
> >   s:dir_list = ['dir1', 'dir2', 'dir3']
> >   s:output_file = 'cscope.files'
> >   redir! > s:output_file
> 
> Here other responses have assumed you are wanting to write to a variable. 
> But, you've said you want to write to a file. So your problem is the classing 
> "didn't realize you can't use variables on the cmd line" problem. To use a 
> variable name in most ex commands, you need to build a string and then 
> execute it rather than inserting the variable name directly. In your case, 
> like this:
> 
>   execute "redir! > ".s:output_file
> 
> As Gary points out, it can be more efficient not to use redir at all, but 
> rather to call the writefile function to write directly from a script.
> 
> >   for dir in s:dir_list
> >     glob(dir.'*.[ch]')
> >   endfor
> 
> Here you're attempting to call the glob() function, which returns (but does 
> NOT display) a list. Since you have an active redirection, you should be 
> displaying the output to capture it in the redirection. To accomplish this, 
> use the "echo" command:
> 
>     echo glob(dir.'*.[ch]')
> 
> An alternate, better approach is to not use the redirection at all. You can 
> either store the result of glob into a string or list, or just pass the 
> result into the writefile function. See Gary's response.
> 
> > redir END
> > endfunction
> > 
> > silent call BuildFileList
> > 
> 
> I'm amazed this function call works. I always thought you need to add 
> parentheses at the end like "call BuildFileList()", but apparently it works 
> enough to execute the function and give you error messages! I just learned 
> something...which I will probably continue to not use.
> 

Oops, as it turns out I didn't copy my code properly. This function call 
doesn't work without the parentheses. 

> > I'm getting the following errors when I execute this function:
> > E190: Cannot open "s:output_file" for writing
> > E486: Pattern not found: dir."*.[ch]"
> > 
> > Obviously there is something wrong with the way I use redir and glob, but I 
> > can't get my finger on it. Does anybody know what am I doing wrong?
> > 
> 
> Yup, with both. Good insight :-)

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to