commit a01290160c5e7543d04ae713eac0d4754e782616
parent c7436a44cf0849822b669c9b10d766a8a8f5e5bb
Author: Ivan Tishchenko <ivan.tishchenko@dsr-company.con>
Date: Mon, 5 Jan 2015 01:29:42 +0300
Support for omni completion of tags
Diffstat:
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim
@@ -2087,6 +2087,16 @@ function! vimwiki#base#write_tags_metadata(metadata) "{{{
call writefile(entries, metadata_path)
endfunction " }}}
+" vimwiki#base#get_tags
+" Returns list of unique tags found in metadata
+function! vimwiki#base#get_tags(metadata) "{{{
+ let tags = {}
+ for entry in a:metadata
+ let tags[entry.tagname] = 1
+ endfor
+ return keys(tags)
+endfunction " }}}
+
" }}}
" Command completion functions {{{
diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim
@@ -49,9 +49,25 @@ function! Complete_wikifiles(findstart, base)
return startofinlinelink
endif
endif
+ let startoftag = match(line, ':\zs[^:[:space:]]*$')
+ if startoftag != -1
+ return startoftag
+ endif
return -1
else
- if a:base !~ '#'
+ " Completion works for wikilinks/anchors, and for tags. So first we have
+ " to find out what we're about to complete.
+ let column = col('.')
+ let line = getline('.')[:(column - len(a:base))]
+ let char_before_start = line[-1:-1]
+ if char_before_start == ':'
+ " Tags completion
+ let metadata = vimwiki#base#load_tags_metadata()
+ let tags = vimwiki#base#get_tags(metadata)
+ call filter(tags,
+ \ "v:val[:" . (len(a:base)-1) . "] == '" . substitute(a:base, "'", "''", '') . "'" )
+ return tags
+ elseif a:base !~ '#'
" we look for wiki files
if a:base =~# '^wiki\d:'