diff options
author | Rob Pilling <robpilling@gmail.com> | 2019-11-13 22:00:11 +0000 |
---|---|---|
committer | Rob Pilling <robpilling@gmail.com> | 2019-11-13 22:00:11 +0000 |
commit | 807e4039cb209539dc71aacbd1718666c18d4552 (patch) | |
tree | a0b7739e9339279b0767262f274b825e0ebc5a72 | |
parent | 18c5f6ab9fa58a69d02a7993dd3ff6f0b9882f26 (diff) | |
download | rneovim-807e4039cb209539dc71aacbd1718666c18d4552.tar.gz rneovim-807e4039cb209539dc71aacbd1718666c18d4552.tar.bz2 rneovim-807e4039cb209539dc71aacbd1718666c18d4552.zip |
Sort man pages by relevance during goto_tag()
-rw-r--r-- | runtime/autoload/man.vim | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim index 078ccbb429..6c74617aca 100644 --- a/runtime/autoload/man.vim +++ b/runtime/autoload/man.vim @@ -381,14 +381,23 @@ function! man#init_pager() abort endfunction function! man#goto_tag(pattern, flags, info) abort - let [sect, name] = man#extract_sect_and_name_ref(a:pattern) + let [l:sect, l:name] = man#extract_sect_and_name_ref(a:pattern) - let candidates = s:get_paths(sect, name) + let l:paths = s:get_paths(l:sect, l:name) + let l:structured = [] - return map(candidates, { - \ _, path -> { - \ 'name': s:extract_sect_and_name_path(path)[1], - \ 'filename': 'man://' . path, + for l:path in l:paths + let l:n = s:extract_sect_and_name_path(l:path)[1] + let l:structured += [{ 'name': l:n, 'path': l:path }] + endfor + + " sort by relevance - exact matches first, then the previous order + call sort(l:structured, { a, b -> a.name ==? l:name ? -1 : b.name ==? l:name ? 1 : 0 }) + + return map(l:structured, { + \ _, entry -> { + \ 'name': entry.name, + \ 'filename': 'man://' . entry.path, \ 'cmd': '1' \ } \ }) |