aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pilling <robpilling@gmail.com>2019-11-13 22:00:11 +0000
committerRob Pilling <robpilling@gmail.com>2019-11-13 22:00:11 +0000
commit807e4039cb209539dc71aacbd1718666c18d4552 (patch)
treea0b7739e9339279b0767262f274b825e0ebc5a72
parent18c5f6ab9fa58a69d02a7993dd3ff6f0b9882f26 (diff)
downloadrneovim-807e4039cb209539dc71aacbd1718666c18d4552.tar.gz
rneovim-807e4039cb209539dc71aacbd1718666c18d4552.tar.bz2
rneovim-807e4039cb209539dc71aacbd1718666c18d4552.zip
Sort man pages by relevance during goto_tag()
-rw-r--r--runtime/autoload/man.vim21
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'
\ }
\ })