Open GoogleCodeExporter opened 9 years ago
Something nice would be to have a simple
%tag foo
placeholder (like %title)
which could be included on individual generated html files, based on templates.
The important addition would be to enable to *also* automatically reference the
%tag in some kind of tag index file when the html is generated via <leader>wh.
This index file (tags.vw or whatever) would be later interpreted via its own
template.
With some extra work from the user (on the templates), this would allow the
generation of output that enables simple navigation via tags (like in wordpress
and such) on the generated html site, while keeping vimwiki working as now,
which means: really well.
Original comment by dkhorn...@gmail.com
on 16 Jun 2012 at 8:15
My headers typically contain pairs, in [yaml](http://www.yaml.org/) format:
NAME: VALUE
e.g.
Tags: tag1, tag2, ...
I have previously searched for tags using the same code as VimwikiSearch code,
but as I recall, this expended unnecessary effort searching the entire contents
of the files in your wiki, and not just the headers.
In principle, this could be sped-up by tweaking the arguments to "lvimgrep" ;
e.g. using ":1lvimgrep" to restrict the "maximum number of matches" that are
returned. (see :help vimgrep).
Here is the code I had previously used. It hasn't been tested recently. Is
this helpful?
- S.
``` vim
" *:VimwikiTagsearch*
" *:VWT* /pattern/
" Search for /^Tags: *\(pattern\)$/ in all files of current wiki.
" This is useful for maintaining "Tags" metadata on across
" all wiki pages. Navigate matches using same commands
" as for VimwikiSearch. Example: "VWT xxx\|yyy"
exe 'au FileType vimwiki command! -buffer -nargs=* VimwikiTagsearch lvimgrep "^Tags: .*\(<args>\)" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
exe 'au FileType vimwiki command! -buffer -nargs=* VWT lvimgrep "^Tags: .*\(<args>\)" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
" *:VimwikiUntagged*
" *:VWU*
" Search for /^Tags: *$/ in all files of current wiki.
" This is useful for maintaining "Tags" metadata on across
" all wiki pages. Navigate matches using same commands
" as for VimwikiSearch.
exe 'au FileType vimwiki command! -buffer VimwikiUntagged lvimgrep "^Tags: *$" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
exe 'au FileType vimwiki command! -buffer VWU lvimgrep "^Tags: *$" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
Original comment by `stu.andrews` on 17 Jun 2012 at 6:06
@stu.andrews: this seems very helpful. I'll test it as soon as I have some time
off (i.e. not in the next couple of days).
Original comment by dkhorn...@gmail.com
on 17 Jun 2012 at 3:25
Here's what I did in order to implement tags for now:
1) looked for references to %title everywhere in the vimwiki package and
duplicated the behaviour for %tag :
1.1) in syntax/vimwiki.vim :
syntax match VimwikiPlaceholder /^\s*%tag\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
" highlights %tag lines in the same way as %title lines
1.2) in autoload/vimwiki/html.vim :
" get tag.
function! s:process_tag(placeholders, default_tag) "{{{
if !empty(a:placeholders)
for [placeholder, row, idx] in a:placeholders
let [type, param] = placeholder
if type == 'tag' && !empty(param)
return param
endif
endfor
endif
return a:default_tag
endfunction "}}}
" tag -- placeholder
if !processed
if line =~ '^\s*%tag'
let processed = 1
let param = matchstr(line, '^\s*%tag\s\zs.*')
let state.placeholder = ['tag', param]
endif
endif
" (...)
let tag = s:process_tag(placeholders, fnamemodify(a:wikifile, ":t:r"))
call map(html_lines, 'substitute(v:val, "%tag%", "'. tag .'", "g")')
" %tag won't appear in html contents and first %tag can be used in html template
2) Implemented stu.andrews' suggestion with the %tag syntax, in
ftplugin/vimwiki.vim :
exe 'au FileType vimwiki command! -buffer -nargs=* VimwikiTagsearch lvimgrep "^%tag .*\(<args>\)" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
exe 'au FileType vimwiki command! -buffer -nargs=* VWT lvimgrep "^%tag .*\(<args>\)" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
exe 'au FileType vimwiki command! -buffer VimwikiUntagged lvimgrep "^%tag *$" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
exe 'au FileType vimwiki command! -buffer VWU lvimgrep "^%tag *$" '.
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
The final result of all this is that I can "header" my vimwiki files as:
%title foo
%tag var
and then the tag line is nicely highlighted, it's easy to search by tag from
within vimwiki (stu.andrews' code), and html exports can place the first (main)
tag in evidence depending on the template.
Still to do : write a script to go through all files and build a tag index
(list of tags with direct links to files that contain them, very useful for
html output, as it will allow tag navigation from within resulting website)
Original comment by dkhorn...@gmail.com
on 19 Jun 2012 at 3:40
I have found this very helpful. However the search commands (VWT, etc) only
work for me when I delete the autocommand filetype specification (au FileType
vimwiki); when I leave them in VWT returns "Not an editor command: VWT". Might
someone have an idea how to fix this?
Original comment by reynolds...@gmail.com
on 3 Jul 2015 at 12:08
Original issue reported on code.google.com by
numbch...@gmail.com
on 13 Jun 2012 at 2:41