I had some trouble but I was able to try ido.el. At first, emacs that
came with cygwin didn't start at all, even when I had X running, so I
downloaded it separately from gnu.org. I installed ido.el directly under
lisp directory, as I don't know how to put it in a user directory. Next
I had trouble understanding how to invoke it. Once I figured out that I
need to use M-x, I was able to try it. See below for my response.

On Thu, 10 Aug 2006 at 10:38pm, Eddy Zhao wrote:

> Hi Hari:
>
>    I detailed compared ido.el and lookupfile.vim today, below are some
> of the ido features that I personally think more convenient than the
> current
> lookupfile plugin:
>
>  - Ido don't need user to generate & update tagfile (and don't have things
>    like LookupFile_MinPatLength and performance balance)

As I explained before, the basic lookup mode is designed to be a lookup
in a full index. However, the plugin comes with a few other means to
lookup, and a generic extension mechanism to add more means. The version
I attached with my previous email includes a new mode which works
similar to ido.el.

>  - Ido can locate file by keyword (not regexp). For Example user only need
>    to input keyword "c" to locate file "my_cccc" from file "my_aaaa",
>    "my_bbbb",  "my_cccc" in the current directory. User don't need to locate
>    file by regexp everytime (though ido DO support regexp based locating, I
>    find myself almost never used that feature. User's file locating pattern
is
>    more keyword based, NOT regexp based !!).

This is totally in the control of the new function that I added (see
below for an improved version), and I think it already behaves this way.
It may interpret some characters as filename-wildcards, as recognized by
glob(), so we might need to protect them (but there are not many of
them).

>  - Ido will automatically complete the filename under the current input
>    focus while user is inputing keyword, and at the same time it will show
>    other candidate filename list that match the keyword. These two features
>    have a lot of advantages:
>
>      * User can more quickly detect that the target file is already located
>        using the current keyword subset
>
>      * User can more quickly detect that no file will be located using the
>        current keyword subset (and further-keyword-based-on-that-subset)
>
>      * User don't need to press TAB to check the matched filenames, all
>         happened automatically

I think all this is covered.

>
>   - Ido can locate file in any directory (not only file in the current
> directory,
>     user only need to prefix directory path, and directory patch could be
>     completed by TAB)

Covered as well.

>
>   - Ido can highlight the keyword in the matched filenames

This can't be done, as I am using the Vim7 completion popup, and it
doesn't support highlighting. However, I worked around by wrapping the
pattern with asterisks (in the new function below), so it kind of works,
though not that easy to read.

>
>   The above features make ido very effecient, could lookupfile be
> modified to achieve the same effect?  I think lookupfile is a very
> important plugin that could affect the whole vim community's editing
> effeciency. If you want to know anything more about ido's feature, pls
> let me know, I'll investigate and feedback. And I strongly recommend
> you to try ido once.
>
>
> Thanks for look into that
> Eddy

Replace the s:LookupWalk function in the plugin/lookupfile.vim with
the one below and try it out. Let me know if this meets your needs. If
you read a bit about Vim scripting basics, you can start playing around
with this function to make the matches look better (e.g, if '/' should
be separate or as part of 'abbr'). See help on |complete-items| on how
the map works.

function! s:LookupWalk(pattern)
  " Determine the parent dir.
  let parent = matchstr(a:pattern, '^.*/')
  let pattern = strpart(a:pattern, len(parent))
  let files = glob(parent.((pattern != '') ? '*'.pattern.'*' : '*'))
  let fl = split(files, "\<NL>")
  let entries = []
  for f in fl
    let word = isdirectory(f)?f."/":f
    let fname = matchstr(f, '[^/]*$')
    call add(entries, {
          \ 'word': word,
          \ 'abbr': fname,
          \ 'menu': substitute(fname, '\V'.pattern, '*&*', ''),
          \ 'kind': (isdirectory(f)?'/':' '),
          \ })
  endfor
  return entries
endfunction

-- 
Thanks,
Hari


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to