From f4bd841a4c72c1cbd6373395c968e463dcf5798f Mon Sep 17 00:00:00 2001 From: Tinmarino Date: Fri, 17 Mar 2023 22:05:47 -0300 Subject: [PATCH] Tags: improve VimwikiSearchTags which was not using user configuration (issue #1316) (v2) --- autoload/vimwiki/tags.vim | 18 ++++++++++ doc/vimwiki.txt | 3 +- ftplugin/vimwiki.vim | 2 +- test/tag.vader | 71 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 2 deletions(-) diff --git a/autoload/vimwiki/tags.vim b/autoload/vimwiki/tags.vim index e66c7cf..bc4a509 100644 --- a/autoload/vimwiki/tags.vim +++ b/autoload/vimwiki/tags.vim @@ -449,3 +449,21 @@ function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort let taglist = vimwiki#tags#get_tags() return join(taglist, "\n") endfunction + + +function! vimwiki#tags#search_tags(tag_pattern) abort + " See #1316 and rxTags in vars.vim + let tf = vimwiki#vars#get_syntaxlocal('tag_format') + + " Craft regex + let rx_this_tag = '/' + let rx_this_tag .= tf.pre . '\@<=' . tf.pre_mark + let rx_this_tag .= '\%(' . tf.in . tf.sep . '\)*' + let rx_this_tag .= a:tag_pattern + let rx_this_tag .= '\%(' . tf.sep . tf.in . '\)*' + let rx_this_tag .= tf.post_mark . tf.post . '\@=' + let rx_this_tag .= '/' + + " Search in current wiki folder + return vimwiki#base#search(rx_this_tag) +endfunction diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt index aa984ea..c54ad4c 100644 --- a/doc/vimwiki.txt +++ b/doc/vimwiki.txt @@ -4029,7 +4029,8 @@ New:~ Fixed:~ * Issue #1229: Bug: VimwikiGoto without argument creates empty page * Issue #1316: Permit tags in heading - * Issue #1270: VimwikiAddHeaderLevel map (3=) was broken by a previous + and improve |VimwikiSearchTags| and |VimwikiRebuildTags| + * Issue #1270: |VimwikiAddHeaderLevel| map (3=) was broken by a previous refactoring commit diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim index 13a28d7..0885903 100644 --- a/ftplugin/vimwiki.vim +++ b/ftplugin/vimwiki.vim @@ -363,7 +363,7 @@ command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day() " tags commands command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '') command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags - \ VimwikiSearchTags VimwikiSearch /::/ + \ VimwikiSearchTags call vimwiki#tags#search_tags() command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags \ VimwikiGenerateTagLinks call vimwiki#tags#generate_tags(1, ) command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags diff --git a/test/tag.vader b/test/tag.vader index 3315c86..7a90ac0 100644 --- a/test/tag.vader +++ b/test/tag.vader @@ -482,3 +482,74 @@ Expect (Single tags toc): Execute (Clean file for tag #1316): call system("rm $HOME/testmarkdown/.vimwiki_tags") call system("rm $HOME/testmarkdown/Test-Tag-issue-1316.md") + + +Execute (Change delimiter #first_tag #vim #mo as for issue #1316 (2) {{{1): + let g:vimwiki_tag_format = {'pre_mark': '#\w\@=', 'post_mark': '', 'sep': '[#[:space:]]\+', 'in': '[^#:[:space:]]\+' } + unlet g:vimwiki_syntaxlocal_vars + call vimwiki#vars#init() + edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md + AssertEqual $HOME . '/testmarkdown/Test-Tag-issue-1316-bis.md', expand('%') + AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax') + AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') + + +Do (Create File Content with #tag1 #tag2 as for issue #1316): + :edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\ + I +# Line1: Heading + # A header\ +# Line2: Tag not in header + bla #first_tag\ +# Line3: Tag in header + #vim #mono\ +# Line4: empty + \ +# Line5: dummy content + Words here. + \ + :write\ + :VimwikiRebuildTags!\ + gg + + +Execute (Assert some file info for #1316): + edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md + AssertEqual $HOME . '/testmarkdown/Test-Tag-issue-1316-bis.md', expand('%') + AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax') + AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr') + AssertEqual 'VimwikiTag', SyntaxAt(2, 6) + + +Do (Append something at first_tag): + :edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\ +# Some bug with loclist for vim7.3 and vim8.0 + :if v:version > 810\ + VimwikiSearchTags first_tag\ + else\ + 2\ + endif\ + A Content1\ + + +Do (Append something at mono tag): + :edit $HOME/testmarkdown/Test-Tag-issue-1316-bis.md\ + :if v:version > 810\ + VimwikiSearchTags mono\ + else\ + 3\ + endif\ + A Content2\ + + +Expect (Content appended at tags): + # A header + bla #first_tag Content1 + #vim #mono Content2 + + Words here. + + +Execute (Clean file for tag #1316): + call system("rm $HOME/testmarkdown/.vimwiki_tags") + call system("rm $HOME/testmarkdown/Test-Tag-issue-1316-bis.md")