vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 8f6768d7e658576f442d7d3bfec0d9e51b1452d3
parent 8097083f46a96093204284bad4cfc847bdd9218c
Author: EinfachToll <istjanichtzufassen@googlemail.com>
Date:   Tue, 18 Feb 2014 14:47:42 +0100

Update the doc and make some fixes regarding anchors

Solve #10

Diffstat:
Mautoload/vimwiki/base.vim | 67++++++++++++++++++++++++++++++++++++-------------------------------
Mautoload/vimwiki/html.vim | 7++++++-
Mdoc/vimwiki.txt | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Mftplugin/vimwiki.vim | 24+++++++++++++++---------
Mplugin/vimwiki.vim | 3++-
5 files changed, 124 insertions(+), 67 deletions(-)

diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -663,7 +663,8 @@ function! vimwiki#base#get_links(pat) "{{{ return string-list for files return globlinks endfunction "}}} -function! s:jump_to_anchor(anchor) +" s:jump_to_anchor +function! s:jump_to_anchor(anchor) "{{{ let oldpos = getpos('.') call cursor(1, 1) @@ -684,7 +685,7 @@ function! s:jump_to_anchor(anchor) endif let oldpos = getpos('.') endfor -endfunction +endfunction "}}} " vimwiki#base#edit_file function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ @@ -947,8 +948,6 @@ function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort "{{ endif endfunction "}}} -" }}} - " WIKI link following functions {{{ " vimwiki#base#find_next_link function! vimwiki#base#find_next_link() "{{{ @@ -1487,38 +1486,45 @@ function! vimwiki#base#RemoveHeaderLevel() "{{{ endif endfunction " }}} -"creates or updates TOC in current file -function! vimwiki#base#table_of_contents() - let old_cursor_pos = getpos('.') - let bullet = vimwiki#lst#default_symbol().' ' - let rx_bullet = vimwiki#u#escape(bullet) - let toc_line = 0 - let whitespaces = '' +" a:create == 1: creates or updates TOC in current file +" a:create == 0: update if TOC exists +function! vimwiki#base#table_of_contents(create) - " delete old TOC + " look for existing TOC let toc_header = '^\s*'.substitute(g:vimwiki_rxH1_Template, '__Header__', - \ '\='."'".g:vimwiki_toc_string."'", '').'\s*$' + \ '\='."'".g:vimwiki_toc_header."'", '').'\s*$' + let toc_line = 0 let lnum = 1 while lnum <= &modelines + 2 && lnum <= line('$') - let line_content = getline(lnum) - if line_content =~# toc_header - let toc_line = lnum - 1 - let whitespaces = matchstr(line_content, '^\s*') - let tl = lnum - while 1 - let tl += 1 - if tl > line('$') || getline(tl) !~ '^\s*'.rx_bullet.g:vimwiki_rxWikiLink.'\s*$' - silent exe lnum.','.string(tl-1).'delete _' - break - endif - endwhile + if getline(lnum) =~# toc_header + let toc_line = lnum break endif let lnum += 1 endwhile + if !a:create && toc_line <= 0 + return + endif + + let old_cursor_pos = getpos('.') + let bullet = vimwiki#lst#default_symbol().' ' + let rx_bullet = vimwiki#u#escape(bullet) + let whitespaces = matchstr(getline(toc_line), '^\s*') + + " delete old TOC + if toc_line > 0 + let endoftoc = toc_line+1 + while endoftoc <= line('$') && getline(endoftoc) =~ '^\s*'.rx_bullet.g:vimwiki_rxWikiLink.'\s*$' + let endoftoc += 1 + endwhile + silent exe toc_line.','.string(endoftoc-1).'delete _' + else + let toc_line = 1 + endif + " collect new headers - let toc_lines = [] + let headers = [] let headers_levels = [['', 0], ['', 0], ['', 0], ['', 0], ['', 0], ['', 0]] for lnum in range(1, line('$')) let line_content = getline(lnum) @@ -1546,17 +1552,16 @@ function! vimwiki#base#table_of_contents() let h_text = h_number.' '.h_text endif - call add(toc_lines, [h_level, h_complete_id, h_text]) + call add(headers, [h_level, h_complete_id, h_text]) endfor " write new TOC - call append(toc_line, whitespaces . substitute(g:vimwiki_rxH1_Template, - \ '__Header__', '\='."'".g:vimwiki_toc_string."'", '')) - let toc_line += 1 + call append(toc_line-1, whitespaces . substitute(g:vimwiki_rxH1_Template, + \ '__Header__', '\='."'".g:vimwiki_toc_header."'", '')) let startindent = repeat(' ', vimwiki#lst#get_list_margin()) let indentstring = repeat(' ', &shiftwidth) - for [lvl, link, desc] in toc_lines + for [lvl, link, desc] in headers let esc_link = substitute(link, "'", "''", 'g') let esc_desc = substitute(desc, "'", "''", 'g') let link = substitute(g:vimwiki_WikiLinkTemplate2, '__LinkUrl__', diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim @@ -961,7 +961,7 @@ function! s:process_tag_h(line, id) "{{{ let h_id = s:safe_html_anchor(h_text) let centered = (a:line =~ '^\s') - if h_text != g:vimwiki_toc_string + if h_text != g:vimwiki_toc_header let a:id[h_level-1] = [h_text, a:id[h_level-1][1]+1] @@ -1325,6 +1325,11 @@ endfunction " }}} function! vimwiki#html#Wiki2HTML(path_html, wikifile) "{{{ + if VimwikiGet('auto_toc') >= 1 + call vimwiki#base#table_of_contents(0) + noautocmd update + endif + let starttime = reltime() " start the clock let done = 0 diff --git a/doc/vimwiki.txt b/doc/vimwiki.txt @@ -698,6 +698,9 @@ il A single list item. Open previous day diary link if available. Mapped to <C-Up>. +*:VimwikiTOC* + Create or update the Table of Contents for the current wiki file. + See |vimwiki-toc| ============================================================================== 5. Wiki syntax *vimwiki-syntax* @@ -1257,24 +1260,6 @@ To turn folding on/off check |g:vimwiki_folding|. 7. Placeholders *vimwiki-placeholders* ------------------------------------------------------------------------------ -%toc Table of Contents *vimwiki-toc* *vimwiki-table-of-contents* - -You can add 'table of contents' to your HTML page generated from wiki one. -Just place > - -%toc - -into your wiki page. -You can also add a caption to your 'toc': > - -%toc Table of Contents - -or > - -%toc Whatever - - ------------------------------------------------------------------------------- %title Title of the page *vimwiki-title* When you htmlize your wiki page, the default title is the filename of the @@ -1614,6 +1599,29 @@ If you don't feel like typing the whole stuff, type just [[Todo# and then For jumping inside a single file, you can omit the file in the link: > [[#pay rise]] + +------------------------------------------------------------------------------ +Table of Contents *vimwiki-toc* *vimwiki-table-of-contents* + +You can add a 'table of contents' to your wiki file. +Use the commando |:VimwikiTOC| to create the magic header > + = Contents = +at the top of your file and create a list of all the headers in the current +file as links, so you can directly jump to specific parts of the file. + +For the indentation, the value of *vimwiki-option-list_margin* is used. + +If you don't want the TOC so sit in the very first line, e.g. if you have a +modeline there, put the magic header in the second or third line and run +:VimwikiTOC to update the TOC. + +If your language is not english, set the option |g:vimwiki_toc_header| to your +favorite translation. + +If you want to keep the TOC up to date automatically, use the option +|vimwiki-option-auto_toc|. + + ============================================================================== 12. Options *vimwiki-options* @@ -1741,6 +1749,21 @@ corresponding wiki page is saved: > This will keep your HTML files up to date. + +*vimwiki-option-auto_toc* +------------------------------------------------------------------------------ +Set this option to a value greater than 0 to automatically update the Table of +Contents: > + let g:vimwiki_list = [{'path': '~/my_site/', 'auto_toc': 1}] + +Value Description~ +0 Don't update it automatically. +1 Update when the wiki file is converted to HTML. +2 Update when the wiki file is saved. + +Default: 0 + + *vimwiki-option-index* ------------------------------------------------------------------------------ Key Default value~ @@ -2005,11 +2028,11 @@ list_margin -1 Description~ Width of left-hand margin for lists. When negative, the current |shiftwidth| is used. This affects the appearance of the generated links (see -|:VimwikiGenerateLinks|) and the behavior of the list manipulation commands -|:VimwikiListChangeLevel| and the local mappings |vimwiki_glstar|, -|vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl.|, |vimwiki_gl-|, |vimwiki_gl1|, -|vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, |vimwiki_glI| and -|vimwiki_i_<C-L>_<C-M>|. +|:VimwikiGenerateLinks|), the Table of contents (|vimwiki-toc|) and the +behavior of the list manipulation commands |:VimwikiListChangeLevel| and the +local mappings |vimwiki_glstar|, |vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl.|, +|vimwiki_gl-|, |vimwiki_gl1|, |vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, +|vimwiki_glI| and |vimwiki_i_<C-L>_<C-M>|. Note: if you use MediaWiki syntax, you probably would like to set this option to 0, because every indented line is considered verbatim text. @@ -2023,7 +2046,7 @@ Global options are configured using the following pattern: > let g:option_name = option_value ------------------------------------------------------------------------------ +------------------------------------------------------------------------------ *g:vimwiki_hl_headers* Highlight headers with =Reddish=, ==Greenish==, ===Blueish=== colors. @@ -2241,7 +2264,7 @@ similar to 'local:' and 'file:' schemes, but are always opened with Vim: > endfunction " }}} ------------------------------------------------------------------------------ +------------------------------------------------------------------------------ *VimwikiWikiIncludeHandler* Vimwiki includes the contents of a wiki-include URL as an image by default. @@ -2518,6 +2541,15 @@ let g:vimwiki_diary_months = { \ 10: 'October', 11: 'November', 12: 'December' \ } +------------------------------------------------------------------------------ +*g:vimwiki_toc_header* + +A string with the magic header that tells vimwiki where the Table of Contents +is located in the file. You can change it to the appropriate word in your +mother tongue like this: > + let g:vimwiki_toc_header = 'Inhalt' + +The default is 'Contents'. ============================================================================== 13. Help *vimwiki-help* @@ -2547,6 +2579,14 @@ Vim plugins: http://www.vim.org/scripts/script.php?script_id=2226 ???~ + * Support for anchors, see |vimwiki-anchors| + * in this context, add support for TOC, see |vimwiki-toc| + * remove the now useless %toc placeholder + * add omni completion of wiki links (files and anchors) + * the function base#resolve_scheme() now also returns the anchor + (important for custom VimwikiLinkHandlers) + * new local option |vimwiki-option-auto_toc| + * new global option |g:vimwiki_toc_header| * List editing capabilities, see |vimwiki-lists|: * support for auto incrementing numbered lists * more key maps for list manipulation, see |vimwiki-list-manipulation| diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim @@ -286,20 +286,20 @@ endfunction "}}} " COMMANDS {{{ command! -buffer Vimwiki2HTML - \ silent w <bar> + \ silent noautocmd w <bar> \ let res = vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')), \ expand('%')) \<bar> \ if res != '' | echo 'Vimwiki: HTML conversion is done.' | endif command! -buffer Vimwiki2HTMLBrowse - \ silent w <bar> + \ silent noautocmd w <bar> \ call vimwiki#base#system_open_link(vimwiki#html#Wiki2HTML( \ expand(VimwikiGet('path_html')), \ expand('%'))) command! -buffer VimwikiAll2HTML \ call vimwiki#html#WikiAll2HTML(expand(VimwikiGet('path_html'))) -command! -buffer VimwikiTOC call vimwiki#base#table_of_contents() +command! -buffer VimwikiTOC call vimwiki#base#table_of_contents(1) command! -buffer VimwikiNextLink call vimwiki#base#find_next_link() command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link() @@ -671,15 +671,21 @@ nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel : " KEYBINDINGS }}} " AUTOCOMMANDS {{{ -if VimwikiGet('auto_export') - " Automatically generate HTML on page write. +function! s:toc_html() + if VimwikiGet('auto_toc') >= 2 && VimwikiGet('auto_export') == 0 + call vimwiki#base#table_of_contents(0) + endif + if VimwikiGet('auto_export') + call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')), + \ expand('%')) + endif +endfunction + +if VimwikiGet('auto_export') || VimwikiGet('auto_toc') >= 2 augroup vimwiki - au BufWritePost <buffer> - \ call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')), - \ expand('%')) + au BufWritePost <buffer> call s:toc_html() augroup END endif - " AUTOCOMMANDS }}} " PASTE, CAT URL {{{ diff --git a/plugin/vimwiki.vim b/plugin/vimwiki.vim @@ -361,6 +361,7 @@ let s:vimwiki_defaults.template_ext = '' let s:vimwiki_defaults.nested_syntaxes = {} let s:vimwiki_defaults.auto_export = 0 +let s:vimwiki_defaults.auto_toc = 0 " is wiki temporary -- was added to g:vimwiki_list by opening arbitrary wiki " file. let s:vimwiki_defaults.temp = 0 @@ -401,7 +402,7 @@ call s:default('dir_link', '') call s:default('valid_html_tags', 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em') call s:default('user_htmls', '') call s:default('autowriteall', 1) -call s:default('toc_string', 'Contents') +call s:default('toc_header', 'Contents') call s:default('html_header_numbering', 0) call s:default('html_header_numbering_sym', '')