Sunday, August 22, 2010

Re: How to open the latest modified file

Hi Christian !

On 8月20日, 下午7时19分, Christian Brabandt <cbli...@256bit.org> wrote:
> Hi eliweiq001!
>
> On Fr, 20 Aug 2010, eliweiq001 wrote:
>
>
>
>
>
> > On 8月20日, 下午4时35分, Christian Brabandt <cbli...@256bit.org> wrote:
> > > Hi eliweiq001!
>
> > > > And besides, when I
> > > > :call OpenLastModified(1)
>
> > > > there is an error:
>
> > > > Error detected while processing function OpenLastModified:
> > > > Line 5:
> > > > E684: list index out of range: -1
> > > > E15: Invalid expression: files[-1]
>
> > > What make you think, you were supposed to call it with the parameter 1?
> > > The optionally parameter to that function is supposed to be a path.
> > > Therefore the command :OpenLastModified was provided, that allows for
> > > tabcompleting a directory optionally.
>
> > > regards,
> > > Christian
>
> > Because I don't understand the function, I just copy it and use it.
>
> > When I type :call OpenL
> > and press Tab, it will change to :call OpenLastModified(
> > another Tab, it will change to :call OpenLastModified(1()
> > one more Tab, it will be :call
> > OpenLastModified(10()
> > one more Tab, it will be :call
> > OpenLastModified(100()
> > one more Tab, it will be :call
> > OpenLastModified(101(
> > ......
>
> > So I don't know what does it mean.
>
> > If I :call OpenLastModified()
> > it will say that Undefined variable: a:1 .........
>
> > If I put a directory to be the parameter, it will say Undefined
> > variable too.
>
> > Such as :call OpenLastModified(D:\) in windows, it will say
> > E121: Undefined variable: D:
> > E116: Invalid arguments for function OpenLastModified
>
> > Then I try :call OpenLastModified(.\) , it will say
> > E15: Invalid expression: .\)
> > E116: Invalid arguments for function OpenLastModified
>
> I see. There was 1 small problem. Use this slightly changed version
> (which only selects C-files):
>
> fun! OpenLastModified(...)
> let path=(!empty(a:1) ? a:1 : getcwd() )
> let files=split(glob(path . '/*.c', 1), '\n')
> call filter(files, '!isdirectory(v:val)')
> call sort(files, "CompareLastModified")
> if !empty(files)
> return ":tabe " . files[-1]
> else
> return ":echoerr 'No files found'"
> endif
> endfun
>
> func! CompareLastModified(a,b)
> return getftime(a:a) == getftime(a:b) ? 0 : getftime(a:a) > getftime (a:b) ? 1 : -1
> endfunc
>
> com! -complete=dir -nargs=? EditLastModified :exe OpenLastModified(<q-args>)
>
> So please in the command prompt type :EditLastModified followed by
> Carriage Return. This will open the last modified file from the current
> working directory (basically the directory that :pwd returns). You can
> however optionally open the last modified file from a different
> directory. Therefore you type:
> :EditLastModified followed by a space followed by a directory, e.g. D:\
> followed by a return, e.g:
> :EditLastModified D:\
> When using the 2nd form, you can use your Tab key to complete a
> directory.
>
> Sorry for the confusion.
>
> regards,
> Christian


I want to ask you something else.

:exe OpenLastModified(<q-args>)

You see, OpenLastModified is a function, but, why we can only use :exe
but not :call ?
I've tried :call but it won't work.

regards.
eliweiq001

--
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

No comments: