On 9/14/09, Daniel Fetchinson <fetchin...@googlemail.com> wrote: >>> >>> I'm regularly doing :split filename1 followed by :split filename2 >>> >>> followed by :split filename3 and was trying to do :split filename* >>> >>> but >>> >>> this didn't work. The goal would be to split the window in as many >>> >>> pieces as the number of files that match filename* and have each of >>> >>> the matching files in it's own split window. >>> >>> >>> >>> Basically I'm trying to automate :split filename1 :split filename2 >>> >>> :split filename3 etc etc. >>> >>> >>> >>> Is there a way to do this? >>> >> >>> >> You can do >>> >> >>> >> :args filename* >>> >> >>> >> to set the argument list to that set of files, then >>> >> >>> >> :all >>> >> >>> >> to open each file in the argument list in a new window. >>> > >>> > Wow, this is great, thanks! If I would have known this in the last 10 >>> > years..... :) >>> >>> This in itself is pretty cool, but now I'd like to make something even >>> cooler by hooking up a custom function to do this. This is where I'm >>> currently failing. What I'd like to see is when I type >>> >>> :msplit filename* >>> >>> then this should be equivalent to >>> >>> :args filename* >>> :all >>> >>> where of course msplit stands for multiple split. I don't really know >>> how vim functions work, so far I was always copy-pasting already >>> working stuff and only modified them for myself. So based on this >>> limited experience what I tried was >>> >>> function! Msplit( expr ) >>> args a:expr >>> all >>> endfunction >>> >>> but this (maybe trivially) doesn't work. What would be the way to do >>> this? >> >> First of all, it would help to know precisely what you mean by >> "doesn't work". It would also help to know how you got from typing >> ":msplit filename*" to calling Msplit(). Otherwise we're all left >> guessing what you might have done and how it might have failed. > > Sorry, you are right, I was not clear. So when I define > > function! Msplit( expr ) > args a:expr > all > endfunction > > and then I do either of the following, > > (1) :call Msplit( 'filename*' ) > (2) :call Msplit( "filename*" ) > (3) :call Msplit( filename* ) > > (you can already see that I'm more or less guessing here) then what I get > is, > > (1) vim opens a new empty file called 'a:expr' > (2) same as (1) > (3) vim says 'Invalid expression' and 'Invalid arguments for function > Msplit' > > So this is what I meant when I said it doesn't work. > >> That being said, here's my guess at what went wrong and a possible >> solution. >> >> The string "filename*" is converted to a string of file names by the >> process of filename expansion. This works only in certain contexts. >> I don't know what all those contexts are. To make this work in a >> function, I think you'd either have to use the glob() function in >> your function to expand a:expr to a set of file names, or use a >> :command that would expand "filename*" before passing all the >> resulting names to Msplit(). >> >> I think it would be easiest to just implement this as a command >> without the use of a function, like this: >> >> command! -nargs=+ Msplit args <args><bar>all > > This works wonderfully, thank you very much! > > I realize that I'm asking for too much, but just in case somebody > finds this also useful, let me ask what makes :Msplit and :split > different from the point of view of Tab-completion? When the command > :split is followed by a string of characters (filenames) and one > presses Tab, vim will autocomplete them based on existing file names. > However in its current form :Msplit doesn't do this, I guess because > nobody told it to do so :) Is there a way to tell vim "try to > Tab-autocomplete the arguments of this command"?
Based on Hari's example I figured this autocompletion thingy out. The version that I like the best so far is, based on Tim's and Hari's ideas, command! -complete=file -nargs=+ Msplit for fname in split(glob("<args>"),'\n')<bar> exec 'sp '.escape(fname, ' \\')<bar> endfor Thanks for everybody's help! Cheers, Daniel -- Psss, psss, put it down! - http://www.cafepress.com/putitdown --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_use" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---