[vim/vim] Add support fuzzy matching a list of dictionaries using either a key or a callback function (#6947)

110 views
Skip to first unread message

Yegappan Lakshmanan

unread,
Sep 13, 2020, 1:43:20 AM9/13/20
to vim/vim, Subscribed

You can view, comment on, or merge this pull request online at:

  https://github.com/vim/vim/pull/6947

Commit Summary

  • Add support fuzzy matching a list of dictionaries using either a key or a callback function

File Changes

Patch Links:


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

codecov[bot]

unread,
Sep 13, 2020, 2:07:28 AM9/13/20
to vim/vim, Subscribed

Codecov Report

Merging #6947 into master will increase coverage by 0.01%.
The diff coverage is 100.00%.

Impacted file tree graph

@@            Coverage Diff             @@

##           master    #6947      +/-   ##

==========================================

+ Coverage   88.55%   88.57%   +0.01%     

==========================================

  Files         148      148              

  Lines      161341   161366      +25     

==========================================

+ Hits       142882   142925      +43     

+ Misses      18459    18441      -18     
Impacted Files Coverage Δ
src/evalfunc.c 96.26% <ø> (ø)
src/search.c 91.96% <100.00%> (+0.09%) ⬆️
src/netbeans.c 76.29% <0.00%> (-0.30%) ⬇️
src/message.c 88.54% <0.00%> (+0.04%) ⬆️
src/channel.c 89.92% <0.00%> (+0.05%) ⬆️
src/gui_gtk_x11.c 58.73% <0.00%> (+0.09%) ⬆️
src/sign.c 94.94% <0.00%> (+0.17%) ⬆️
src/gui_gtk.c 31.67% <0.00%> (+0.27%) ⬆️
src/gui.c 63.45% <0.00%> (+0.69%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b806aa5...68f776f. Read the comment docs.

Prabir Shrestha

unread,
Sep 13, 2020, 5:04:12 PM9/13/20
to vim/vim, Subscribed

@prabirshrestha commented on this pull request.


In runtime/doc/eval.txt:

> @@ -7309,12 +7311,24 @@ matchend({expr}, {pat} [, {start} [, {count}]])			*matchend()*
 			GetText()->matchend('word')
 
 
-matchfuzzy({list}, {str})			*matchfuzzy()*
-		Returns a list with all the strings in {list} that fuzzy
-		match {str}. The strings in the returned list are sorted
-		based on the matching score. {str} is treated as a literal
-		string and regular expression matching is NOT supported.
-		The maximum supported {str} length is 256.
+matchfuzzy({list}, {str} [, {key}])

based on my comment here might be good to not support key but instead support expression with v:val which can be optimized to extract key. #6932 (comment)

Yegappan Lakshmanan

unread,
Sep 13, 2020, 5:13:40 PM9/13/20
to vim/vim, Push

@yegappan pushed 1 commit.

  • bc04c0c Convert third argument to matchfuzzy() into a dict


You are receiving this because you are subscribed to this thread.

View it on GitHub or unsubscribe.

Yegappan Lakshmanan

unread,
Sep 13, 2020, 9:56:56 PM9/13/20
to vim/vim, Push

@yegappan pushed 1 commit.

  • d3a8678 Rename callback to text_cb


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 13, 2020, 10:20:52 PM9/13/20
to vim/vim, Push

@yegappan pushed 1 commit.

  • f841124 Add additional error handling


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 13, 2020, 11:01:49 PM9/13/20
to vim/vim, Push

@yegappan pushed 1 commit.


You are receiving this because you are subscribed to this thread.

Prabir Shrestha

unread,
Sep 14, 2020, 3:53:03 PM9/14/20
to vim/vim, Subscribed

@prabirshrestha approved this pull request.

Yegappan Lakshmanan

unread,
Sep 15, 2020, 12:10:01 PM9/15/20
to vim/vim, Push

@yegappan pushed 1 commit.

  • 93166cf Add matchfuzzypos() function


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 15, 2020, 1:41:15 PM9/15/20
to vim/vim, Push

@yegappan pushed 1 commit.


You are receiving this because you are subscribed to this thread.

Prabir Shrestha

unread,
Sep 15, 2020, 1:43:13 PM9/15/20
to vim/vim, Subscribed

@prabirshrestha commented on this pull request.


In src/testdir/test_functions.vim:

> +  call assert_fails("let x = matchfuzzy(l, 'cam', 'random')", 'E715:')
+  call assert_equal([], matchfuzzy(l, 'day', {'text_cb' : {v -> []}}))
+  call assert_equal([], matchfuzzy(l, 'day', {'text_cb' : {v -> 1}}))
+  call assert_fails("let x = matchfuzzy(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
+  call assert_equal([], matchfuzzy(l, 'cam'))
+  call assert_fails("let x = matchfuzzy(l, 'cam', {'text_cb' : []})", 'E921:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : []})", 'E730:')
+  call assert_fails("let x = matchfuzzy(l, 'cam', test_null_dict())", 'E715:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : test_null_string()})", 'E475:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'text_cb' : test_null_function()})", 'E475:')
+
+  let l = [{'id' : 5, 'name' : 'foo'}, {'id' : 6, 'name' : []}, {'id' : 7}]
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 'name'})", 'E730:')
+
+  " Test for the fuzzymatchpos() function
+  call assert_equal([['curl', 'world'], [[2,3], [2,3]]], matchfuzzypos(['world', 'curl'], 'rl'))

missing tests for key and text_cb for matchfuzzypost


In src/testdir/test_functions.vim:

> +  call assert_fails("let x = matchfuzzy(l, 'cam', 'random')", 'E715:')
+  call assert_equal([], matchfuzzy(l, 'day', {'text_cb' : {v -> []}}))
+  call assert_equal([], matchfuzzy(l, 'day', {'text_cb' : {v -> 1}}))
+  call assert_fails("let x = matchfuzzy(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
+  call assert_equal([], matchfuzzy(l, 'cam'))
+  call assert_fails("let x = matchfuzzy(l, 'cam', {'text_cb' : []})", 'E921:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : []})", 'E730:')
+  call assert_fails("let x = matchfuzzy(l, 'cam', test_null_dict())", 'E715:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : test_null_string()})", 'E475:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'text_cb' : test_null_function()})", 'E475:')
+
+  let l = [{'id' : 5, 'name' : 'foo'}, {'id' : 6, 'name' : []}, {'id' : 7}]
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 'name'})", 'E730:')
+
+  " Test for the fuzzymatchpos() function
+  call assert_equal([['curl', 'world'], [[2,3], [2,3]]], matchfuzzypos(['world', 'curl'], 'rl'))

can we also have a test case for multiple matches in the same item.

matchfuzzypos(['hello world hello world', 'hello', 'world]`, 'hello')

In src/testdir/test_functions.vim:

> +  call assert_equal([], matchfuzzy(l, 'day', {'text_cb' : {v -> []}}))
+  call assert_equal([], matchfuzzy(l, 'day', {'text_cb' : {v -> 1}}))
+  call assert_fails("let x = matchfuzzy(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
+  call assert_equal([], matchfuzzy(l, 'cam'))
+  call assert_fails("let x = matchfuzzy(l, 'cam', {'text_cb' : []})", 'E921:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : []})", 'E730:')
+  call assert_fails("let x = matchfuzzy(l, 'cam', test_null_dict())", 'E715:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : test_null_string()})", 'E475:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'text_cb' : test_null_function()})", 'E475:')
+
+  let l = [{'id' : 5, 'name' : 'foo'}, {'id' : 6, 'name' : []}, {'id' : 7}]
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 'name'})", 'E730:')
+endfunc
+
+" Test for the fuzzymatchpos() function
+func Test_matchfuzzypos()

missing tests for empty array. matchfuzzypos([], 'foo')

Prabir Shrestha

unread,
Sep 15, 2020, 1:44:15 PM9/15/20
to vim/vim, Subscribed

@prabirshrestha commented on this pull request.


In runtime/doc/eval.txt:

>  		   :echo v:oldfiles->matchfuzzy("test")
 <		results in a list of file names fuzzy matching "test". >
 		   :let l = readfile("buffer.c")->matchfuzzy("str")
 <		results in a list of lines in "buffer.c" fuzzy matching "str".
 
+matchfuzzypos({list}, {str} [, {dict}])			*matchfuzzypos()*

add example for dict or might be add a comment to refer to matchfuzzy dict option.

Prabir Shrestha

unread,
Sep 15, 2020, 1:50:13 PM9/15/20
to vim/vim, Subscribed

@prabirshrestha requested changes on this pull request.

added few comments.


In src/testdir/test_functions.vim:

> +  call assert_fails("let x = matchfuzzy(l, 'day', {'text_cb' : {a, b -> 1}})", 'E119:')
+  call assert_equal([], matchfuzzy(l, 'cam'))
+  call assert_fails("let x = matchfuzzy(l, 'cam', {'text_cb' : []})", 'E921:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : []})", 'E730:')
+  call assert_fails("let x = matchfuzzy(l, 'cam', test_null_dict())", 'E715:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : test_null_string()})", 'E475:')
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'text_cb' : test_null_function()})", 'E475:')
+
+  let l = [{'id' : 5, 'name' : 'foo'}, {'id' : 6, 'name' : []}, {'id' : 7}]
+  call assert_fails("let x = matchfuzzy(l, 'foo', {'key' : 'name'})", 'E730:')
+endfunc
+
+" Test for the fuzzymatchpos() function
+func Test_matchfuzzypos()
+  call assert_equal([['curl', 'world'], [[2,3], [2,3]]], matchfuzzypos(['world', 'curl'], 'rl'))
+  call assert_equal([['curl', 'world'], [[2,3], [2,3]]], matchfuzzypos(['world', 'one', 'curl'], 'rl'))

shouldn't this response be this instead? so that if there is multiple highlights it can still be represented correctly?

[
   [ "curl", "world", "curl world"],
   [
       [ [2,3] ],
       [ [2,3 ] ],
       [  [2,3], [7,8] ]
   ]
]

Yegappan Lakshmanan

unread,
Sep 15, 2020, 1:57:10 PM9/15/20
to vim_dev, reply+ACY5DGGH7SI33EEBCF...@reply.github.com, vim/vim, Subscribed
Hi,

The fuzzy matching currently looks for only the first match. If there are multiple matches in the same
string, it currently returns only the first match.

- Yegappan

 

vim-dev ML

unread,
Sep 15, 2020, 1:57:32 PM9/15/20
to vim/vim, vim-dev ML, Your activity

Hi,

On Tue, Sep 15, 2020 at 10:50 AM Prabir Shrestha <vim-dev...@256bit.org>
wrote:

> *@prabirshrestha* requested changes on this pull request.
>
> added few comments.
> ------------------------------
>
> In src/testdir/test_functions.vim
> <https://github.com/vim/vim/pull/6947#discussion_r488855126>:

Yegappan Lakshmanan

unread,
Sep 15, 2020, 2:09:46 PM9/15/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 6a0e4fe Add additional tests and update doc


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 16, 2020, 2:08:39 AM9/16/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 1da535d Add support fuzzy matching a list of dictionaries using either a key or a callback function and the matchfuzzypos() function.


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 17, 2020, 1:39:54 AM9/17/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • c48abb7 Use macros for the bonus and penalty scores


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 17, 2020, 1:40:13 AM9/17/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 2 commits.

  • 96532a5 Add support fuzzy matching a list of dictionaries using either a key or a callback function and the matchfuzzypos() function.
  • 0059707 Use macros for the bonus and penalty scores


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 17, 2020, 4:10:56 PM9/17/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • e6f595d Add additional tests and refactor the code


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 17, 2020, 7:50:38 PM9/17/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.


You are receiving this because you are subscribed to this thread.

Prabir Shrestha

unread,
Sep 17, 2020, 8:36:24 PM9/17/20
to vim/vim, vim-dev ML, Comment

@yegappan any plans to return multiple highlights for an item? Is it currently the limitation in the library?
Would be good if it supported it even if the library didnt support it so in future can update the library without updating the public api.


You are receiving this because you commented.

Yegappan Lakshmanan

unread,
Sep 17, 2020, 10:48:20 PM9/17/20
to vim_dev, reply+ACY5DGG6WPHPUSEARS...@reply.github.com, vim/vim, vim-dev ML, Comment
Hi,

On Thu, Sep 17, 2020 at 5:36 PM Prabir Shrestha <vim-dev...@256bit.org> wrote:

@yegappan any plans to return multiple highlights for an item? Is it currently the limitation in the library?
Would be good if it supported it even if the library didnt support it so in future can update the library without updating the public api.


I am not sure about the use case for returning multiple matches within a given
string. Why is it not good enough to just highlight the best match within a string?
How will highlighting multiple matches within a given string help a user?

For example, consider the case of searching for 'aa' in the string 'aaaaaaaa' (worst
case scenario). If all the matches are highlighted, then the entire string will be
highlighted, which doesn't add much value.

Regards,
Yegappan

vim-dev ML

unread,
Sep 17, 2020, 10:48:37 PM9/17/20
to vim/vim, vim-dev ML, Your activity

Hi,

On Thu, Sep 17, 2020 at 5:36 PM Prabir Shrestha <vim-dev...@256bit.org>
wrote:

> @yegappan <https://github.com/yegappan> any plans to return multiple

> highlights for an item? Is it currently the limitation in the library?
> Would be good if it supported it even if the library didnt support it so
> in future can update the library without updating the public api.
>

I am not sure about the use case for returning multiple matches within a
given
string. Why is it not good enough to just highlight the best match within a
string?
How will highlighting multiple matches within a given string help a user?

For example, consider the case of searching for 'aa' in the string
'aaaaaaaa' (worst
case scenario). If all the matches are highlighted, then the entire string
will be
highlighted, which doesn't add much value.

Regards,
Yegappan

Yegappan Lakshmanan

unread,
Sep 17, 2020, 11:53:16 PM9/17/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 27fb55a Use vim_islower() instead of islower()


You are receiving this because you are subscribed to this thread.

Prabir Shrestha

unread,
Sep 18, 2020, 4:23:13 PM9/18/20
to vim/vim, vim-dev ML, Comment

It is very common if you are trying to create a fuzzy matching for files.

Here is a real example where I'm searching for sys\dri\hosts. In this case I'm actually interested in hosts file and not sys. this means hosts needs to be highlighted.

image

In projects I can see this using as controller/feature/featuresA/component.tsx, controller/features/featuresA/service.tsx I might want to use featureA/service. which means I want both to highlight.


You are receiving this because you commented.

Yegappan Lakshmanan

unread,
Sep 18, 2020, 5:45:18 PM9/18/20
to vim_dev, reply+ACY5DGESZ7WDL5UVN4...@reply.github.com, vim/vim, vim-dev ML, Comment
Hi,

On Fri, Sep 18, 2020 at 1:23 PM Prabir Shrestha <vim-dev...@256bit.org> wrote:

It is very common if you are trying to create a fuzzy matching for files.

Here is a real example where I'm searching for sys\dri\hosts. In this case I'm actually interested in hosts file and not sys. this means hosts needs to be highlighted.


This is already supported. For example, using your sample input:

let f = ['System32\drivers\etc\lmhosts.sam', 'System32\drivers\mausbhost.sys', 'System32\drivers\etc\hosts.ics', 'System32\drivers\etc\hosts']
echo matchfuzzypos(f, 'Sys\dri\hosts')

produces the following output

[['System32\drivers\etc\hosts', 'System32\drivers\etc\hosts.ics', 'System32\driv
ers\etc\lmhosts.sam', 'System32\drivers\mausbhost.sys'], [[0, 1, 2, 8, 9, 10, 11
, 16, 21, 22, 23, 24, 25], [0, 1, 2, 8, 9, 10, 11, 16, 21, 22, 23, 24, 25], [0,
1, 2, 8, 9, 10, 11, 16, 23, 24, 25, 26, 27], [0, 1, 2, 8, 9, 10, 11, 16, 22, 23,
 24, 25, 27]]]

Using the matching positions in the above output, you can highlight the characters like shown
below in your example.

Regards,
Yegappan

vim-dev ML

unread,
Sep 18, 2020, 5:45:37 PM9/18/20
to vim/vim, vim-dev ML, Your activity
> <https://user-images.githubusercontent.com/287744/93641752-aae6c700-f9b1-11ea-92df-8113c97664b9.png>

>
> In projects I can see this using as
> controller/feature/featuresA/component.tsx,
> controller/features/featuresA/service.tsx I might want to use
> featureA/service. which means I want both to highlight.
>
>
>


You are receiving this because you are subscribed to this thread.

Prabir Shrestha

unread,
Sep 18, 2020, 6:43:47 PM9/18/20
to vim/vim, vim-dev ML, Comment

If I want to 100 matches with each items having 2 highlights and only want to highlight 39:49 items do I need to loop through all the highlights which is 200 iterations or I can just ask for items[39:49] and iterate only 20 higlights?

I'm looking something like ios api for virtualization.


You are receiving this because you commented.

Yegappan Lakshmanan

unread,
Sep 18, 2020, 10:30:16 PM9/18/20
to vim_dev, reply+ACY5DGFQKCLFDXJCUO...@reply.github.com, vim/vim, vim-dev ML, Comment
Hi,

On Fri, Sep 18, 2020 at 3:43 PM Prabir Shrestha <vim-dev...@256bit.org> wrote:

If I want to 100 matches with each items having 2 highlights and only want to highlight 39:49 items do I need to loop through all the highlights which is 200 iterations or I can just ask for items[39:49] and iterate only 20 higlights?


In the list (second item) returned by matchfuzzypos() you can use list slices to
get only the matching positions for specific strings. For example, if there
are 100 matching strings and you want to highlight only strings 39 to 49,
then you can slice the second list using 39:49 and use only those items
for highlighting.

- Yegappan

vim-dev ML

unread,
Sep 18, 2020, 10:30:35 PM9/18/20
to vim/vim, vim-dev ML, Your activity
> <https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview?language=objc>
> for virtualization.
>
>
>


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 19, 2020, 2:44:49 AM9/19/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 3234028 Add support for fuzzy matching multibyte characters


You are receiving this because you are subscribed to this thread.

Yegappan Lakshmanan

unread,
Sep 19, 2020, 2:45:15 AM9/19/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 2 commits.

  • 4b0d905 Add support fuzzy matching a list of dictionaries using either a key or a callback function and the matchfuzzypos() function.
  • 714ef10 Add support for fuzzy matching multibyte characters

Yegappan Lakshmanan

unread,
Sep 19, 2020, 2:53:55 AM9/19/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 8755649 Remove redundant definition of li

Prabir Shrestha

unread,
Sep 19, 2020, 3:31:20 AM9/19/20
to vim/vim, vim-dev ML, Comment

Now it makes sense. I was looking for range but seems like you are giving character positions so should be possible to do it.

For this text System32\\drivers\\mausbhost.sys when I search for Sys\dri\hosts I get 0, 1, 2, 8, 9, 10, 11, 16, 22, 23, 24, 25, 27. If I want to use prop_add I need to calculate the length on my own as I most likely want to avoid adding prop_add for each character.

let matches = [ 0, 1, 2, 8, 9, 10, 11, 16, 22, 23, 24, 25, 27 ]

call prop_add(lnum, 0, { 'length': 3 })
call prop_add(lnum, 8, { 'length': 4 })
call prop_add(lnum, 16, { 'length': 1 })
call prop_add(lnum, 22, { 'length': 4 })
call prop_add(lnum, 27, { 'length': 1 })

might be what I need now is another function to convert it to range.

let matches = [ 0, 1, 2, 8, 9, 10, 11, 16, 22, 23, 24, 25, 27 ]
let matchrange = matchpos2range(matches) 
" matchrange = [[0, 3], [8, 4], [16, 1], [22, 4], [27, 1]]

for range in matchrange
    call prop_add(lnum, range[0], { 'length': range[1] })
endfor


You are receiving this because you commented.

bfrg

unread,
Sep 19, 2020, 3:44:37 AM9/19/20
to vim/vim, vim-dev ML, Comment

Here's a very simple command that I used for testing matchaddpos():

if prop_type_get('test')->empty()
    call prop_type_add('test', {'highlight': 'Title'})
endif

function s:fuzzyfind(bang, mod, ...) abort
    if a:0 != 2
        return
    endif

    const files = systemlist('cd ' .. a:1 .. '; find -type f | sed "s/^\.\///"')
    const matches = matchfuzzypos(files, a:2)
    const info = printf('%s [dir: %s]', a:2, fnamemodify(a:1, ':~:.'))

    if empty(matches)
        return
    endif

    silent execute a:mod 'new' fnameescape(info)
    setlocal buftype=nofile noswapfile bufhidden=wipe
    call setline(1, matches[0])

    if a:bang
        for i in len(matches[1])->range()[: winheight(0) - 1]
            call len(matches[1][i])
                    \ ->range()
                    \ ->map({_,j ->
                    \   prop_add(i + 1, matches[1][i][j] + 1, {
                    \     'length': 1,
                    \     'type': 'test',
                    \     'bufnr': bufnr('%')
                    \   })
                    \ })
        endfor
    endif
    setlocal nomodifiable
endfunction

command -nargs=+ -bang -complete=dir Fuzzy call s:fuzzyfind(<bang>0, <q-mods>, <f-args>)

Yegappan Lakshmanan

unread,
Sep 19, 2020, 8:42:22 PM9/19/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 5a58577 Add support fuzzy matching a list of dictionaries using either a key or a callback function and the matchfuzzypos() function. Add support for fuzzy matching multibyte characters.

Yegappan Lakshmanan

unread,
Sep 20, 2020, 2:01:44 AM9/20/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

Yegappan Lakshmanan

unread,
Sep 20, 2020, 7:10:58 PM9/20/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • a940fba Add support fuzzy matching a list of dictionaries using either a key or a callback function and the matchfuzzypos() function. Add support for fuzzy matching multibyte characters.

Yegappan Lakshmanan

unread,
Sep 21, 2020, 11:51:11 PM9/21/20
to vim/vim, vim-dev ML, Push

@yegappan pushed 1 commit.

  • 0e1bee5 Move the fuzzy matching tests to a separate test file

Bram Moolenaar

unread,
Sep 22, 2020, 2:34:24 PM9/22/20
to vim/vim, vim-dev ML, Comment

Closed #6947 via 4f73b8e.

Reply all
Reply to author
Forward
0 new messages