" Vimball Archiver by Charles E. Campbell, Jr., Ph.D. UseVimball finish autoload\vimwiki.vim [[[1 680 " Vimwiki autoload plugin file " Author: Maxim Kim " Home: http://code.google.com/p/vimwiki/ if exists("g:loaded_vimwiki_auto") || &cp finish endif let g:loaded_vimwiki_auto = 1 if has("win32") let s:os_sep = '\' else let s:os_sep = '/' endif let s:badsymbols = '['.g:vimwiki_badsyms.g:vimwiki_stripsym.'<>|?*:"]' " MISC helper functions {{{ " This function is double defined. " TODO: refactor common functions into new module. function! s:chomp_slash(str)"{{{ return substitute(a:str, '[/\\]\+$', '', '') endfunction"}}} function! vimwiki#mkdir(path) "{{{ let path = expand(a:path) if !isdirectory(path) && exists("*mkdir") let path = s:chomp_slash(path) call mkdir(path, "p") endif endfunction " }}} function! vimwiki#safe_link(string) "{{{ return substitute(a:string, s:badsymbols, g:vimwiki_stripsym, 'g') endfunction "}}} function! vimwiki#unsafe_link(string) "{{{ return substitute(a:string, g:vimwiki_stripsym, s:badsymbols, 'g') endfunction "}}} function! vimwiki#subdir(path, filename)"{{{ let path = expand(a:path) let filename = expand(a:filename) let idx = 0 while path[idx] == filename[idx] let idx = idx + 1 endwhile let p = split(strpart(filename, idx), '[/\\]') let res = join(p[:-2], s:os_sep) if len(res) > 0 let res = res.s:os_sep endif return res endfunction"}}} function! vimwiki#current_subdir()"{{{ return vimwiki#subdir(VimwikiGet('path'), expand('%:p')) endfunction"}}} function! vimwiki#msg(message) "{{{ echohl WarningMsg echomsg 'vimwiki: '.a:message echohl None endfunction " }}} function! s:filename(link) "{{{ let result = vimwiki#safe_link(a:link) if a:link =~ '|' let result = vimwiki#safe_link(split(a:link, '|')[0]) elseif a:link =~ '][' let result = vimwiki#safe_link(split(a:link, '][')[0]) endif return result endfunction " }}} function! s:is_wiki_word(str) "{{{ if a:str =~ g:vimwiki_word1 && a:str !~ '[[:space:]\\/]' return 1 endif return 0 endfunction " }}} function! s:edit_file(command, filename) "{{{ let fname = escape(a:filename, '% ') call vimwiki#mkdir(fnamemodify(a:filename, ":p:h")) execute a:command.' '.fname endfunction " }}} function! s:search_word(wikiRx, cmd) "{{{ let match_line = search(a:wikiRx, 's'.a:cmd) if match_line == 0 call vimwiki#msg('WikiWord not found') endif endfunction " }}} function! s:get_word_at_cursor(wikiRX) "{{{ let col = col('.') - 1 let line = getline('.') let ebeg = -1 let cont = match(line, a:wikiRX, 0) while (ebeg >= 0 || (0 <= cont) && (cont <= col)) let contn = matchend(line, a:wikiRX, cont) if (cont <= col) && (col < contn) let ebeg = match(line, a:wikiRX, cont) let elen = contn - ebeg break else let cont = match(line, a:wikiRX, contn) endif endwh if ebeg >= 0 return strpart(line, ebeg, elen) else return "" endif endf "}}} function! s:strip_word(word) "{{{ let result = a:word if strpart(a:word, 0, 2) == "[[" " get rid of [[ and ]] let w = strpart(a:word, 2, strlen(a:word)-4) if w =~ '|' " we want "link" from [[link|link desc]] let w = split(w, "|")[0] elseif w =~ '][' " we want "link" from [[link][link desc]] let w = split(w, "][")[0] endif let result = vimwiki#safe_link(w) endif return result endfunction " }}} function! s:is_link_to_non_wiki_file(word) "{{{ " Check if word is link to a non-wiki file. " The easiest way is to check if it has extension like .txt or .html if a:word =~ '\.\w\{1,4}$' return 1 endif return 0 endfunction " }}} function! s:print_wiki_list() "{{{ let idx = 0 while idx < len(g:vimwiki_list) if idx == g:vimwiki_current_idx let sep = ' * ' echohl TablineSel else let sep = ' ' echohl None endif echo (idx + 1).sep.VimwikiGet('path', idx) let idx += 1 endwhile echohl None endfunction " }}} function! s:wiki_select(wnum)"{{{ if a:wnum < 1 || a:wnum > len(g:vimwiki_list) return endif let b:vimwiki_idx = g:vimwiki_current_idx let g:vimwiki_current_idx = a:wnum - 1 endfunction " }}} function! s:update_wiki_link(fname, old, new) " {{{ echo "Updating links in ".a:fname let has_updates = 0 let dest = [] for line in readfile(a:fname) if !has_updates && match(line, a:old) != -1 let has_updates = 1 endif call add(dest, substitute(line, a:old, escape(a:new, "&"), "g")) endfor " add exception handling... if has_updates call rename(a:fname, a:fname.'#vimwiki_upd#') call writefile(dest, a:fname) call delete(a:fname.'#vimwiki_upd#') endif endfunction " }}} function! s:update_wiki_links_dir(dir, old_fname, new_fname) " {{{ let old_fname = substitute(a:old_fname, '[/\\]', '[/\\\\]', 'g') let new_fname = a:new_fname if !s:is_wiki_word(new_fname) let new_fname = '[['.new_fname.']]' endif if !s:is_wiki_word(old_fname) let old_fname = '\[\['.vimwiki#unsafe_link(old_fname). \ '\%(|.*\)\?\%(\]\[.*\)\?\]\]' else let old_fname = '\<'.old_fname.'\>' endif let files = split(glob(VimwikiGet('path').a:dir.'*'.VimwikiGet('ext')), '\n') for fname in files call s:update_wiki_link(fname, old_fname, new_fname) endfor endfunction " }}} function! s:tail_name(fname) "{{{ let result = substitute(a:fname, ":", "__colon__", "g") let result = fnamemodify(result, ":t:r") let result = substitute(result, "__colon__", ":", "g") return result endfunction "}}} function! s:update_wiki_links(old_fname, new_fname) " {{{ let old_fname = s:tail_name(a:old_fname) let new_fname = s:tail_name(a:new_fname) let subdirs = split(a:old_fname, '[/\\]')[: -2] " TODO: Use Dictionary here... let dirs_keys = [''] let dirs_vals = [''] if len(subdirs) > 0 let dirs_keys = [''] let dirs_vals = [join(subdirs, '/').'/'] let idx = 0 while idx < len(subdirs) - 1 call add(dirs_keys, join(subdirs[: idx], '/').'/') call add(dirs_vals, join(subdirs[idx+1 :], '/').'/') let idx = idx + 1 endwhile call add(dirs_keys,join(subdirs, '/').'/') call add(dirs_vals, '') endif let idx = 0 while idx < len(dirs_keys) let dir = dirs_keys[idx] let new_dir = dirs_vals[idx] call s:update_wiki_links_dir(dir, \ new_dir.old_fname, new_dir.new_fname) let idx = idx + 1 endwhile endfunction " }}} function! s:get_wiki_buffers() "{{{ let blist = [] let bcount = 1 while bcount<=bufnr("$") if bufexists(bcount) let bname = fnamemodify(bufname(bcount), ":p") if bname =~ VimwikiGet('ext')."$" let bitem = [bname, getbufvar(bname, "vimwiki_prev_word")] call add(blist, bitem) endif endif let bcount = bcount + 1 endwhile return blist endfunction " }}} function! s:open_wiki_buffer(item) "{{{ call s:edit_file('e', a:item[0]) if !empty(a:item[1]) call setbufvar(a:item[0], "vimwiki_prev_word", a:item[1]) endif endfunction " }}} " }}} " SYNTAX highlight {{{ function! vimwiki#WikiHighlightWords() "{{{ " search all wiki files in 'path' and its subdirs. let subdir = vimwiki#current_subdir() let wikies = glob(VimwikiGet('path').subdir.'**/*'.VimwikiGet('ext')) " remove .wiki extensions let wikies = substitute(wikies, '\'.VimwikiGet('ext'), "", "g") let g:vimwiki_wikiwords = split(wikies, '\n') " remove backup files (.wiki~) call filter(g:vimwiki_wikiwords, 'v:val !~ ''.*\~$''') " remove paths let rem_path = escape(expand(VimwikiGet('path')).subdir, '\') call map(g:vimwiki_wikiwords, 'substitute(v:val, rem_path, "", "g")') " Links with subdirs should be highlighted for linux and windows separators " Change \ or / to [/\\] let os_p = '[/\\]' let os_p2 = escape(os_p, '\') call map(g:vimwiki_wikiwords, 'substitute(v:val, os_p, os_p2, "g")') for word in g:vimwiki_wikiwords if g:vimwiki_camel_case && \ word =~ g:vimwiki_word1 && !s:is_link_to_non_wiki_file(word) execute 'syntax match VimwikiWord /\%(^\|[^!]\)\zs\<'.word.'\>/' endif execute 'syntax match VimwikiWord /\[\[\<'. \ vimwiki#unsafe_link(word). \ '\>\%(|\+.*\)*\]\]/' execute 'syntax match VimwikiWord /\[\[\<'. \ vimwiki#unsafe_link(word). \ '\>\]\[.\+\]\]/' endfor execute 'syntax match VimwikiWord /\[\[.\+\.\%(jpg\|png\|gif\)\%(|\+.*\)*\]\]/' execute 'syntax match VimwikiWord /\[\[.\+\.\%(jpg\|png\|gif\)\]\[.\+\]\]/' endfunction " }}} function! vimwiki#hl_exists(hl)"{{{ if !hlexists(a:hl) return 0 endif redir => hlstatus exe "silent hi" a:hl redir END return (hlstatus !~ "cleared") endfunction "}}} function! vimwiki#nested_syntax(filetype, start, end, textSnipHl) abort "{{{ " From http://vim.wikia.com/wiki/VimTip857 let ft=toupper(a:filetype) let group='textGroup'.ft if exists('b:current_syntax') let s:current_syntax=b:current_syntax " Remove current syntax definition, as some syntax files (e.g. cpp.vim) " do nothing if b:current_syntax is defined. unlet b:current_syntax endif " Some syntax files set up iskeyword which might scratch vimwiki a bit. " Let us save and restore it later. " let b:skip_set_iskeyword = 1 let is_keyword = &iskeyword execute 'syntax include @'.group.' syntax/'.a:filetype.'.vim' try execute 'syntax include @'.group.' after/syntax/'.a:filetype.'.vim' catch endtry let &iskeyword = is_keyword if exists('s:current_syntax') let b:current_syntax=s:current_syntax else unlet b:current_syntax endif execute 'syntax region textSnip'.ft.' \ matchgroup='.a:textSnipHl.' \ start="'.a:start.'" end="'.a:end.'" \ contains=@'.group endfunction "}}} "}}} " WIKI functions {{{ function! vimwiki#WikiNextWord() "{{{ call s:search_word(g:vimwiki_rxWikiWord.'\|'.g:vimwiki_rxWeblink, '') endfunction " }}} function! vimwiki#WikiPrevWord() "{{{ call s:search_word(g:vimwiki_rxWikiWord.'\|'.g:vimwiki_rxWeblink, 'b') endfunction " }}} function! vimwiki#WikiFollowWord(split) "{{{ if a:split == "split" let cmd = ":split " elseif a:split == "vsplit" let cmd = ":vsplit " else let cmd = ":e " endif let word = s:strip_word(s:get_word_at_cursor(g:vimwiki_rxWikiWord)) if word == "" let weblink = s:strip_word(s:get_word_at_cursor(g:vimwiki_rxWeblink)) if weblink != "" call VimwikiWeblinkHandler(weblink) else execute "normal! \n" endif return endif if s:is_link_to_non_wiki_file(word) call s:edit_file(cmd, word) else let vimwiki_prev_word = [expand('%:p'), getpos('.')] let subdir = vimwiki#current_subdir() call s:edit_file(cmd, VimwikiGet('path').subdir.word.VimwikiGet('ext')) let b:vimwiki_prev_word = vimwiki_prev_word endif endfunction " }}} function! vimwiki#WikiGoBackWord() "{{{ if exists("b:vimwiki_prev_word") " go back to saved WikiWord let prev_word = b:vimwiki_prev_word execute ":e ".substitute(prev_word[0], '\s', '\\\0', 'g') call setpos('.', prev_word[1]) endif endfunction " }}} function! vimwiki#WikiGoHome(index) "{{{ call s:wiki_select(a:index) call vimwiki#mkdir(VimwikiGet('path')) try execute ':e '.VimwikiGet('path').VimwikiGet('index').VimwikiGet('ext') catch /E37/ " catch 'No write since last change' error " this is really unsecure!!! execute ':'.VimwikiGet('gohome').' '. \ VimwikiGet('path'). \ VimwikiGet('index'). \ VimwikiGet('ext') catch /E325/ " catch 'ATTENTION' error " TODO: Hmmm, if open already opened index.wiki there is an error... " Find out what is the reason and how to avoid it. Is it dangerous? echomsg "Unknown error!" endtry endfunction "}}} function! vimwiki#WikiDeleteWord() "{{{ "" file system funcs "" Delete WikiWord you are in from filesystem let val = input('Delete ['.expand('%').'] (y/n)? ', "") if val != 'y' return endif let fname = expand('%:p') try call delete(fname) catch /.*/ call vimwiki#msg('Cannot delete "'.expand('%:t:r').'"!') return endtry execute "bdelete! ".escape(fname, " ") " reread buffer => deleted WikiWord should appear as non-existent if expand('%:p') != "" execute "e" endif endfunction "}}} function! vimwiki#WikiRenameWord() "{{{ "" Rename WikiWord, update all links to renamed WikiWord let subdir = vimwiki#current_subdir() let old_fname = subdir.expand('%:t') " there is no file (new one maybe) if glob(expand('%:p')) == '' call vimwiki#msg('Cannot rename "'.expand('%:p'). \ '". It does not exist! (New file? Save it before renaming.)') return endif let val = input('Rename "'.expand('%:t:r').'" (y/n)? ', "") if val!='y' return endif let new_link = input('Enter new name: ', "") if new_link =~ '[/\\]' " It is actually doable but I do not have free time to do it. call vimwiki#msg('Cannot rename to a filename with path!') return endif let new_link = subdir.new_link " check new_fname - it should be 'good', not empty if substitute(new_link, '\s', '', 'g') == '' call vimwiki#msg('Cannot rename to an empty filename!') return endif if s:is_link_to_non_wiki_file(new_link) call vimwiki#msg('Cannot rename to a filename with extension (ie .txt .html)!') return endif let new_link = s:strip_word(new_link) let new_fname = VimwikiGet('path').s:filename(new_link).VimwikiGet('ext') " do not rename if word with such name exists let fname = glob(new_fname) if fname != '' call vimwiki#msg('Cannot rename to "'.new_fname. \ '". File with that name exist!') return endif " rename WikiWord file try echomsg "Renaming ".VimwikiGet('path').old_fname." to ".new_fname let res = rename(expand('%:p'), expand(new_fname)) if res != 0 throw "Cannot rename!" end catch /.*/ call vimwiki#msg('Cannot rename "'.expand('%:t:r').'" to "'.new_fname.'"') return endtry let &buftype="nofile" let cur_buffer = [expand('%:p'), \getbufvar(expand('%:p'), "vimwiki_prev_word")] let blist = s:get_wiki_buffers() " save wiki buffers for bitem in blist execute ':b '.escape(bitem[0], ' ') execute ':update' endfor execute ':b '.escape(cur_buffer[0], ' ') " remove wiki buffers for bitem in blist execute 'bwipeout '.escape(bitem[0], ' ') endfor let setting_more = &more setlocal nomore " update links call s:update_wiki_links(old_fname, new_link) " restore wiki buffers for bitem in blist if bitem[0] != cur_buffer[0] call s:open_wiki_buffer(bitem) endif endfor call s:open_wiki_buffer([new_fname, \ cur_buffer[1]]) " execute 'bwipeout '.escape(cur_buffer[0], ' ') echomsg old_fname." is renamed to ".new_fname let &more = setting_more endfunction " }}} function! vimwiki#WikiUISelect()"{{{ call s:print_wiki_list() let idx = input("Select Wiki (specify number): ") if idx == "" return endif call vimwiki#WikiGoHome(idx) endfunction "}}} " }}} " TEXT OBJECTS functions {{{ function! vimwiki#TO_header(inner, visual) "{{{ if !search('^\(=\+\)[^=]\+\1\s*$', 'bcW') return endif let sel_start = line("'<") let sel_end = line("'>") let block_start = line(".") let advance = 0 let level = vimwiki#count_first_sym(getline('.')) let is_header_selected = sel_start == block_start \ && sel_start != sel_end if a:visual && is_header_selected if level > 1 let level -= 1 call search('^\(=\{'.level.'\}\)[^=]\+\1\s*$', 'bcW') else let advance = 1 endif endif normal! V if a:visual && is_header_selected call cursor(sel_end + advance, 0) endif if search('^\(=\{1,'.level.'}\)[^=]\+\1\s*$', 'W') call cursor(line('.') - 1, 0) else call cursor(line('$'), 0) endif if a:inner && getline(line('.')) =~ '^\s*$' let lnum = prevnonblank(line('.') - 1) call cursor(lnum, 0) endif endfunction "}}} function! vimwiki#count_first_sym(line) "{{{ let idx = 0 while a:line[idx] == a:line[0] && idx < len(a:line) let idx += 1 endwhile return idx endfunction "}}} function! vimwiki#AddHeaderLevel() "{{{ let lnum = line('.') let line = getline(lnum) if line =~ '^\s*$' return endif if line !~ '^\(=\+\).\+\1\s*$' let line = substitute(line, '^\s*', ' ', '') let line = substitute(line, '\s*$', ' ', '') endif let level = vimwiki#count_first_sym(line) if level < 6 call setline(lnum, '='.line.'=') endif endfunction "}}} function! vimwiki#RemoveHeaderLevel() "{{{ let lnum = line('.') let line = getline(lnum) if line =~ '^\s*$' return endif if line =~ '^\(=\+\).\+\1\s*$' let line = strpart(line, 1, len(line) - 2) if line =~ '^\s' let line = strpart(line, 1, len(line)) endif if line =~ '\s$' let line = strpart(line, 0, len(line) - 1) endif call setline(lnum, line) endif endfunction " }}} " }}} autoload\vimwiki_html.vim [[[1 1001 " Vimwiki autoload plugin file " Export to HTML " Author: Maxim Kim " Home: http://code.google.com/p/vimwiki/ " Load only once {{{ if exists("g:loaded_vimwiki_html_auto") || &cp finish endif let g:loaded_vimwiki_html_auto = 1 "}}} " SCRIPT VARS "{{{ " Warn if html header or html footer do not exist only once. let s:warn_html_header = 0 let s:warn_html_footer = 0 "}}} " UTILITY "{{{ function! s:root_path(subdir) "{{{ return repeat('../', len(split(a:subdir, '[/\\]'))) endfunction "}}} function! s:syntax_supported() " {{{ return VimwikiGet('syntax') == "default" endfunction " }}} function! s:remove_blank_lines(lines) " {{{ while a:lines[-1] =~ '^\s*$' call remove(a:lines, -1) endwhile endfunction "}}} function! s:is_web_link(lnk) "{{{ if a:lnk =~ '^\%(https://\|http://\|www.\|ftp://\)' return 1 endif return 0 endfunction "}}} function! s:is_img_link(lnk) "{{{ if a:lnk =~ '\.\%(png\|jpg\|gif\|jpeg\)$' return 1 endif return 0 endfunction "}}} function! s:is_non_wiki_link(lnk) "{{{ " TODO: Add more file extensions here if a:lnk =~ '.\+\.\%(pdf\|txt\|doc\|rtf\|xls\)$' return 1 endif return 0 endfunction "}}} function! s:has_abs_path(fname) "{{{ if a:fname =~ '\(^.:\)\|\(^/\)' return 1 endif return 0 endfunction "}}} function! s:create_default_CSS(path) " {{{ let path = expand(a:path) let css_full_name = path.VimwikiGet('css_name') if glob(css_full_name) == "" call vimwiki#mkdir(fnamemodify(css_full_name, ':p:h')) let lines = [] call add(lines, 'body {font-family: Arial, sans-serif; margin: 1em 2em 1em 2em; font-size: 100%; line-height: 130%;}') call add(lines, 'h1, h2, h3, h4, h5, h6 {font-family: Trebuchet MS, serif; margin-top: 1.5em; margin-bottom: 0.5em;}') call add(lines, 'h1 {font-size: 2.0em; color: #3366aa;}') call add(lines, 'h2 {font-size: 1.6em; color: #335588;}') call add(lines, 'h3 {font-size: 1.2em; color: #224466;}') call add(lines, 'h4 {font-size: 1.1em; color: #113344;}') call add(lines, 'h5 {font-size: 1.0em; color: #112233;}') call add(lines, 'h6 {font-size: 1.0em; color: #111111;}') call add(lines, 'p, pre, blockquote, table, ul, ol, dl {margin-top: 1em; margin-bottom: 1em;}') call add(lines, 'ul ul, ul ol, ol ol, ol ul {margin-top: 0.5em; margin-bottom: 0.5em;}') call add(lines, 'li {margin: 0.3em auto;}') call add(lines, 'ul {margin-left: 2em; padding-left: 0.5em;}') call add(lines, 'dt {font-weight: bold;}') call add(lines, 'img {border: none;}') call add(lines, 'pre {border-left: 1px solid #ccc; margin-left: 2em; padding-left: 0.5em;}') call add(lines, 'blockquote {padding: 0.4em; background-color: #f6f5eb;}') call add(lines, 'td {border: 1px solid #ccc; padding: 0.3em;}') call add(lines, 'hr {border: none; border-top: 1px solid #ccc; width: 100%;}') call add(lines, '.todo {font-weight: bold; background-color: #f0ece8; color: #a03020;}') call add(lines, '.strike {text-decoration: line-through; color: #777777;}') call add(lines, '.justleft {text-align: left;}') call add(lines, '.justright {text-align: right;}') call add(lines, '.justcenter {text-align: center;}') call writefile(lines, css_full_name) echomsg "Default style.css is created." endif endfunction "}}} function! s:get_html_header(wikifile, subdir, charset) "{{{ let lines=[] let title = fnamemodify(a:wikifile, ":t:r") if VimwikiGet('html_header') != "" && !s:warn_html_header try let lines = readfile(expand(VimwikiGet('html_header'))) call map(lines, 'substitute(v:val, "%title%", "'. title .'", "g")') call map(lines, 'substitute(v:val, "%root_path%", "'. \ s:root_path(a:subdir) .'", "g")') return lines catch /E484/ let s:warn_html_header = 1 call vimwiki#msg("Header template ".VimwikiGet('html_header'). \ " does not exist!") endtry endif let css_name = expand(VimwikiGet('css_name')) let css_name = substitute(css_name, '\', '/', 'g') if !s:has_abs_path(css_name) " Relative css file for deep links: [[dir1/dir2/dir3/filename]] let css_name = s:root_path(a:subdir).css_name endif " if no VimwikiGet('html_header') set up or error while reading template " file -- use default header. call add(lines, '') call add(lines, '') call add(lines, '') call add(lines, ''.title.'') call add(lines, '') call add(lines, '') call add(lines, '') return lines endfunction "}}} function! s:get_html_footer() "{{{ let lines=[] if VimwikiGet('html_footer') != "" && !s:warn_html_footer try let lines = readfile(expand(VimwikiGet('html_footer'))) return lines catch /E484/ let s:warn_html_footer = 1 call vimwiki#msg("Footer template ".VimwikiGet('html_footer'). \ " does not exist!") endtry endif " if no VimwikiGet('html_footer') set up or error while reading template " file -- use default footer. call add(lines, "") call add(lines, '') call add(lines, '') return lines endfunction "}}} function! s:safe_html(line) "{{{ "" change dangerous html symbols: < > & let line = substitute(a:line, '&', '\&', 'g') let line = substitute(line, '<', '\<', 'g') let line = substitute(line, '>', '\>', 'g') return line endfunction "}}} function! s:delete_html_files(path) "{{{ let htmlfiles = split(glob(a:path.'**/*.html'), '\n') for fname in htmlfiles try call delete(fname) catch vimwiki#msg('Can not delete '.fname) endtry endfor endfunction "}}} function! s:remove_comments(lines) "{{{ let res = [] let multiline_comment = 0 let idx = 0 while idx < len(a:lines) let line = a:lines[idx] let idx += 1 if multiline_comment let col = matchend(line, '-->',) if col != -1 let multiline_comment = 0 let line = strpart(line, col) else continue endif endif if !multiline_comment && line =~ '' let line = substitute(line, '', '', 'g') if line =~ '^\s*$' continue endif endif if !multiline_comment let col = match(line, ' is a comment. Ex: > < ============================================================================== 6. Folding/Outline *vimwiki-folding* Vimwiki can fold or outline headers and list items. Example: = My current task = * [ ] Do stuff 1 * [ ] Do substuff 1.1 * [ ] Do substuff 1.2 * [ ] Do substuff 1.2.1 * [ ] Do substuff 1.2.2 * [ ] Do substuff 1.3 * [ ] Do stuff 2 * [ ] Do stuff 3 Hit |zM| : = My current task = [8] --------------------------------------~ Hit |zr| : = My current task =~ * [ ] Do stuff 1 [5] --------------------------------------~ * [ ] Do stuff 2~ * [ ] Do stuff 3~ Hit |zr| one more time: = My current task =~ * [ ] Do stuff 1~ * [ ] Do substuff 1.1~ * [ ] Do substuff 1.2 [2] -------------------------------~ * [ ] Do substuff 1.3~ * [ ] Do stuff 2~ * [ ] Do stuff 3~ NOTE: Whether you use default syntax, folding on list items should work properly only if all of them are indented using current |shiftwidth|. For MediaWiki * or # should be in the first column. To turn folding on/off check |g:vimwiki_folding|. ============================================================================== 7. Todo lists *vimwiki-todo-lists* You can have todo lists -- lists of items you can check/uncheck. Consider the following example: = Toggleable list of todo items = * [X] Toggle list item on/off. * [X] Simple toggling between [ ] and [X]. * [X] All list's subitems should be toggled on/off appropriately. * [X] Toggle child subitems only if current line is list item * [X] Parent list item should be toggled depending on it's child items. * [X] Make numbered list items toggleable too * [X] Add highlighting to list item boxes * [X] Add [ ] to the next created with o, O and list item. Pressing on the first list item will toggle it and all of it's child items: = Toggleable list of todo items = * [ ] Toggle list item on/off. * [ ] Simple toggling between [ ] and [X]. * [ ] All list's subitems should be toggled on/off appropriately. * [ ] Toggle child subitems only if current line is list item * [ ] Parent list item should be toggled depending on it's child items. * [X] Make numbered list items toggleable too * [X] Add highlighting to list item boxes * [X] Add [ ] to the next created with o, O and list item. Pressing on the third list item will toggle it and all of it's parent items: = Toggleable list of todo items = * [.] Toggle list item on/off. * [ ] Simple toggling between [ ] and [X]. * [X] All list's subitems should be toggled on/off appropriately. * [ ] Toggle child subitems only if current line is list item * [ ] Parent list item should be toggled depending on it's child items. * [ ] Make numbered list items toggleable too * [ ] Add highlighting to list item boxes * [ ] Add [ ] to the next created with o, O and list item. Parent items could be toggled by its child items. Symbol inside [ ] depends on percentage of toggled child items(see also |g:vimwiki_listsyms|): > [ ] -- 0% [.] -- 1-33% [o] -- 34-66% [O] -- 67-99% [X] -- 100% It is possible to toggle several list items using visual mode. ============================================================================== 8. Options *vimwiki-options* ------------------------------------------------------------------------------ *g:vimwiki_list* *vimwiki-multiple-wikies* Each item in g:vimwiki_list is a |Dictionary| that holds all customization available for a wiki represented by that item. It is in form of > {'option1': 'value1', 'option2: 'value2', ...} Consider the following example: > let g:vimwiki_list = [{'path': '~/my_site/', 'path_html': '~/public_html/'}] It gives us one wiki located at ~/my_site/ that could be htmlized to ~/public_html/ The next example: > let g:vimwiki_list = [{'path': '~/my_site/', 'path_html': '~/public_html/'}, \ {'path': '~/my_docs/', 'ext': '.mdox'}] gives us 2 wikies, first wiki as in previous example, second one is located in ~/my_docs/ and its files have .mdox extension. Empty |Dictionary| in the g:vimwiki_list is the wiki with default options: > let g:vimwiki_list = [{}, \ {'path': '~/my_docs/', 'ext': '.mdox'}] < Per wiki options *vimwiki-option-path* --------------------- Key Default value~ path ~/vimwiki/ Description~ Wiki files location: > let g:vimwiki_list = [{'path': '~/my_site/'}] < *vimwiki-option-path_html* -------------------------- Key Default value~ path_html ~/vimwiki_html/ Description~ HTML files converted from wiki files location: > let g:vimwiki_list = [{'path': '~/my_site/', \ 'path_html': '~/my_site_html/'}] If you omit this option path_html would be path - '/' + '_html/': > let g:vimwiki_list = [{'path': '~/okidoki/'}] ie, path_html = '~/okidoki_html/' *vimwiki-option-index* ---------------------- Key Default value~ index index Description~ Name of wiki index file: > let g:vimwiki_list = [{'path': '~/my_site/', 'index': 'main'}] NOTE: Do not add extension. *vimwiki-option-ext* -------------------- Key Default value~ ext .wiki Description~ Extension of wiki files: > let g:vimwiki_list = [{'path': '~/my_site/', \ 'index': 'main', 'ext': '.document'}] < *vimwiki-option-syntax* ----------------------- Key Default value Values~ syntax default default, media Description~ Wiki syntax. You can use different markup languages (currently default vimwiki and MediaWiki) but only vimwiki's default markup could be converted to HTML at the moment. To use MediaWiki's wiki markup: > let g:vimwiki_list = [{'path': '~/my_site/', 'syntax': 'media'}] < *vimwiki-option-html_header* ---------------------------- Key Default value~ html_header Description~ Set up file name for html header template: > let g:vimwiki_list = [{'path': '~/my_site/', \ 'html_header': '~/public_html/header.tpl'}] This header.tpl could look like: > %title%
where %title% is replaced by a wiki page name %root_path% is replaced by a count of ../ for pages buried in subdirs: if you have wikilink [[dir1/dir2/dir3/my page in a subdir]] then %root_path% is replaced by '../../../'. *vimwiki-option-html_footer* ---------------------------- Key Default value~ html_footer Description~ Set up file name for html footer template: > let g:vimwiki_list = [{'path': '~/my_site/', \ 'html_footer': '~/public_html/footer.tpl'}] This footer.tpl could look like: >
< *vimwiki-option-css_name* ------------------------- Key Default value~ css_name style.css Description~ Set up css file name: > let g:vimwiki_list = [{'path': '~/my_pages/', \ 'css_name': 'main.css'}] < or even > let g:vimwiki_list = [{'path': '~/my_pages/', \ 'css_name': 'css/main.css'}] < *vimwiki-option-gohome* ----------------------- Key Default value Values~ gohome split split, vsplit, tabe Description~ This option controls the way |:VimwikiGoHome| command works. For instance you have 'No write since last change' buffer. After ww (or :VimwikiGoHome) vimwiki index file will be splitted with it. Or vertically splitted. Or opened in a new tab. Ex: > let g:vimwiki_list = [{'path': '~/my_site/', 'gohome': 'vsplit'}] < *vimwiki-option-maxhi* ---------------------- Key Default value Values~ maxhi 1 0, 1 Description~ Non-existent WikiWord highlighting could be quite slow and if you don't want it set maxhi to 0: > let g:vimwiki_list = [{'path': '~/my_site/', 'maxhi': 0}] This disables filesystem checks for WikiWords. *vimwiki-option-nested_syntaxes* -------------------------------- Key Default value Values~ nested_syntaxes {} pairs of highlight keyword and vim filetype Description~ You can make preformatted text to be highlighted with a different syntaxes available for vim. For example the following setup: > let wiki = {} let wiki.path = '~/my_site/' let wiki.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} let vimwiki_list = [wiki] would give you python and c++ highlighting in: > {{{class="brush: python" for i in range(1, 5): print(i) }}} {{{class="brush: c++" #include "helloworld.h" int helloworld() { printf("hello world"); } }}} or in: > {{{c++ #include "helloworld.h" int helloworld() { printf("hello world"); } }}} {{{python for i in range(1, 5): print(i) }}} Global options ------------------------------------------------------------------------------ *g:vimwiki_hl_headers* Highlight headers with =Reddish=, ==Greenish==, ===Blueish=== colors. Value Description~ 1 Use predefined colors to highlight different header levels. 0 Use |hl-Title| or VimwikiHeader1-VimwikiHeader6 (if defined in a colorscheme) Default: 0 ------------------------------------------------------------------------------ *g:vimwiki_hl_cb_checked* Checked list items could be highlighted with a color: * [X] the whole line could be highlighted with the option set to 1. * [ ] I wish vim could use strikethru. Value Description~ 1 Highlight checked [X] check box with |group-name| "Comment". 0 Don't. Default: 0 ------------------------------------------------------------------------------ *g:vimwiki_global_ext* *vimwiki-temporary-wiki* If a file with a registered wiki extension is opened in a dir that is not listed in |g:vimwiki_list| then: Value Description~ 1 make a temporary wiki in that dir. 0 don't make temporary wiki it that dir. Default: 1 ------------------------------------------------------------------------------ *g:vimwiki_upper* *g:vimwiki_lower* This affects WikiWord detection. By default WikiWord detection uses English and Russian letters. You can set up your own: > let g:vimwiki_upper = "A-Z\u0410-\u042f" let g:vimwiki_lower = "a-z\u0430-\u044f" ------------------------------------------------------------------------------ *g:vimwiki_auto_checkbox* if on, creates checkbox while toggling list item. Value Description~ 0 Do not create checkbox. 1 Create checkbox. Default: 1 Ex: Press (|:VimwikiToggleListItem|) on a list item without checkbox to create it: > * List item result: > * [ ] List item ------------------------------------------------------------------------------ *g:vimwiki_menu* GUI menu of available wikies to select. Value Description~ '' No menu 'Vimwiki' Top level menu "Vimwiki" 'Plugin.Vimwiki' "Vimwiki" submenu of top level menu "Plugin" etc. Default: 'Vimwiki' ------------------------------------------------------------------------------ *g:vimwiki_stripsym* Change strip symbol -- in Windows you cannot use /*?<>:" in file names so vimwiki replaces them with neutral symbol (_ is default): > let g:vimwiki_stripsym = '_' You can change it to a for example: > let g:vimwiki_stripsym = ' ' ------------------------------------------------------------------------------ *g:vimwiki_badsyms* Consider you do not like spaces in filenames (as some vimwiki users do). In that case you can set up bad symbols that would be converted to |g:vimwiki_stripsym|: > let g:vimwiki_badsyms = ' ' Now files for all [[links with spaces]] would be created like 'links_with_spaces'. This option is a complement one to |g:vimwiki_stripsym|. ------------------------------------------------------------------------------ *g:vimwiki_listsyms* String of 5 symbols for list items with checkboxes. Default value is ' .oOX'. g:vimwiki_listsyms[0] is for 0% done items. g:vimwiki_listsyms[4] is for 100% done items. ------------------------------------------------------------------------------ *g:vimwiki_use_mouse* Use local mouse mappings from |vimwiki-local-mappings|. Value Description~ 0 Do not use mouse mappings. 1 Use mouse mappings. Default: 0 ------------------------------------------------------------------------------ *g:vimwiki_folding* Enable/disable vimwiki's folding/outline. Folding in vimwiki is using 'expr' foldmethod which is very flexible but really slow. Value Description~ 0 Disable folding. 1 Enable folding. Default: 1 ------------------------------------------------------------------------------ *g:vimwiki_fold_lists* Enable/disable folding of list subitems. Value Description~ 0 Disable list subitem's folding. 1 Enable list subitem's folding. Default: 0 ------------------------------------------------------------------------------ *g:vimwiki_fold_empty_lines* Fold or do not fold empty lines between folded headers. Value Description~ 0 Do not fold in empty lines. 1 Fold in empty lines. Default: 0 ------------------------------------------------------------------------------ *g:vimwiki_camel_case* If you do not want WikiWord to be a link this setting is just for you. Value Description~ 0 Do not make links from CamelCased words. 1 Make links from CamelCased words. Default: 1 ------------------------------------------------------------------------------ *g:vimwiki_list_ignore_newline* This is HTML related. Convert newlines to
s in multiline list items. Value Description~ 0 Newlines in a list item are converted to
s. 1 Ignore newlines. Default: 1 ------------------------------------------------------------------------------ *g:vimwiki_browsers* *VimwikiWeblinkHandler* You can open external weblinks in a webbrowser. Webbrowsers are listed in |g:vimwiki_browsers|. For win32 it is: chrome, opera, firefox and explorer. For other OSes it is: opera, firefox and konqueror. The first available browser from the list is used to open weblink. If you have opera and firefox and want weblinks to be opened in the latter just: > let g:vimwiki_browsers=['C:\Program Files\Firefox\firefox.exe'] or redefine VimwikiWeblinkHandler function: > function! VimwikiWeblinkHandler(weblink) let browser = 'C:\Program Files\Firefox\firefox.exe' execute '!start "'.browser.'" ' . a:weblink endfunction ============================================================================== 9. Help *vimwiki-help* As you could see I am not native English speaker (not a writer as well). Please send me correct phrases instead of that incorrect stuff I have used here. Any help is really appreciated! ============================================================================== 10. Author *vimwiki-author* I live in Moscow and you may believe me -- there are no polar bears (no brown too) here in the streets. I do not do programming for a living. So don't blame me for an ugly ineffective code. Improvements are welcome. Many thanks to all of you for voting vimwiki up on www.vim.org. I do vimwiki in my spare time I could use to dance argentine tango with beautiful women. Your votes are kind of a good replacement. ;) Sincerely yours, Maxim Kim . Vimwiki's website: http://code.google.com/p/vimwiki/ Vim plugins website: http://www.vim.org/scripts/script.php?script_id=2226 ============================================================================== 11. Changelog *vimwiki-changelog* 0.9.701 * FIX: Issue 30: Highlighting doesn't work for checked list item. 0.9.7 * NEW: Default checkbox symbols are changed to [ ], [.], [o], [O], [X]. You can change them using |g:vimwiki_listsyms| variable. * NEW: Color group names are renamed from wikiBold, wikiItalic, etc to VimwikiBold, VimwikiItalic, etc. * NEW: Open external links in a browser. There are default browsers defined in |g:vimwiki_browsers| list. You can also redefine |VimwikiWeblinkHandler| function to open weblinks in other programs. * NEW: Issue 25: Toggle the states of multiple TODO list items at a time (in VISUAL and in VISUAL LINE modes) * NEW: Issue 26: Highlight code snippets in vimwiki's pre. See |vimwiki-option-nested_syntaxes|. Thanks kriomant. * NEW: Issue 27: Automatic garbage deletion from html directory. * NEW: Save all open vimwiki buffers before export to html. * NEW: Issue 29: Custom :Search command. * NEW: Header text objects are now expandable in VISUAL mode. Tap 'vah' to select a header. Tap again 'ah' to expand selection further. Thanks Andy Wokula. * FIX: Folding settings are reset to vim defaults in a new tab (think of \wt) so you cannot hide things in folds. * FIX: https links in form of [https://hello.world.com] are not exported into html. Thanks Saurabh Sarpal for the patch. 0.9.6 * NEW: You can have multiline list items. See |vimwiki-syntax-lists|. * NEW: You can ignore newlines in multiline list items when do export to html. See |g:vimwiki_list_ignore_newline| option. * NEW: Different checkbox symbols [.], [:], [o] are added. See |vimwiki-todo-lists|. * NEW: Now there is no longer syntax of preformatted text that is started by a whitespace. * NEW: Blockquotes. See |vimwiki-syntax-blockquote|. * NEW: Per wiki folding option (vimwiki-option-folding) is removed. Global |g:vimwiki_folding| and |g:vimwiki_fold_lists| are added. * NEW: Due to being quite slow folding of list items is off by default. Use |g:vimwiki_fold_lists| to turn it on. * NEW: If you want replace some symbols in a wikifilename use |g:vimwiki_badsyms| option (Andreas Baldeau). * FIX: Command |:VimwikiToggleListItem| doesn't work for one of the two wikies opened at the same time with different syntaxes. * FIX: Command |:VimwikiToggleListItem| do not switch parent checkboxes if there are non-checkbox list items available. * FIX: Issue 24: Link error in html when write [[one.two.three]]. * FIX: Rename WikiWord to something with a colon (:) does nasty things. * FIX: Command |:VimwikiToggleListItem| do not switch right if there are list items without checkboxes in the list. 0.9.5 * NEW: Added |g:vimwiki_global_ext| to control creation of temporary wikies in dirs that are not listed in |g:vimwiki_list|. * NEW: Added |g:vimwiki_hl_headers| to highlight headers with different predefined colors. * NEW: Checked [X] items are not highlighted with Comment syntax group by default. Use |g:vimwiki_hl_cb_checked| to turn it on. * NEW: Added new syntax for links: [[link address][link description]]. * NEW: Added allias of mapping for *nix systems. * NEW: Added |g:vimwiki_camel_case|. Set it to 0 if you do not want CamelCased WikiWords to be linkified. * FIX: Links with g:vimwiki_stripsym (default '_') [[My_Link|Text]] are not highlighted when created. * FIX: indent/vimwiki.vim is obsolete. If you upgrade from previous versions remove it. It causes wrong list indentation if noexpandtab is set. * FIX: If tabs and spaces are used to indent list items html export gives error. Thanks Klaus Ethgen for report. * FIX: Some html export fixes. 0.9.4 * NEW: Links with directories: [[dir1/dir2/Link|Text]]. Thanks Jie Wu. * NEW: Added %root_path% template variable to get relative root dir of path_html. See |vimwiki-option-html_header|. * FIX: Indent is incorrect for vim without "float" compile option. Thanks Julian Kooij. * FIX: Convert to html doesn't work right with links like [[foo::bar]]. * FIX: Rename wikiword doesn't work right when rename WikiWord to [[WikiWord blablabla]]. * FIX: Renaming of links with description doesn't work. * FIX: Weblinks with commas are not highlighted. * MISC: Some changes in default css file. 0.9.3 * NEW: g:vimwiki_menu option is a string which is menu path. So one can use let g:vimwiki_menu = 'Plugin.Vimwiki' to set the menu to the right place. * NEW: g:vimwiki_fold_empty_lines -- don't or do fold in empty lines between headers. See |g:vimwiki_fold_empty_lines| * FIX: Encoding error when running vimwiki in Windows XP Japanese. Thanks KarasAya. 0.9.2c * FIX: Regression: Export HTML link error with [[Link|Text]]. 0.9.2b * FIX: Installation on Linux doesn't work. (Dos line endings in Vimball archive file). * FIX: Clear out FlexWiki ftplugin's setup. Now you don't have to hack filetype.vim to get rid of unexpected ':setlocal bomb' from FlexWiki's ftplugin. * FIX: When write done: it will show another done: in html file. 0.9.2a * FIX: Installation on Linux doesn't work. (Dos line endings in autoload/vimwiki_lst.vim and indent/vimwiki.vim). 0.9.2 * NEW: Option 'folding' added to turn folding on/off. * NEW: Header text object. See |vimwiki-text-objects|. * NEW: Add/remove Header levels with '=' and '-'. See |vimwiki_=|. * NEW: Vimwiki GUI menu to select available wikies. See |g:vimwiki_menu|. * NEW: You can specify the name of your css file now. See |vimwiki-option-css_name| * NEW: You can add styles to image links, see |vimwiki-syntax-links|. * FIX: History doesn't work after |VimwikiRenameWord|. * FIX: Some of wikipedia links are not correctly highlighted. Links with parentheses. * MISC: Renamed vimwiki_gtd to vimwiki_lst. 0.9.1 * NEW: HTML Table cell text alignment, see |vimwiki-syntax-tables| * NEW: Wikipage history simplified. Each vimwiki buffer now holds b:vimwiki_prev_word which is list of [PrevWord, getpos()]. * NEW: If highlight for groups wikiHeader1..wikiHeader6 exist (defined in a colorscheme) -- use it. Otherwise use Title highlight for all Headers. * FIX: Warn only once if 'html_header' or 'html_footer' does not exist. * FIX: Wrong folding for the text after the last nested list item. * FIX: Bold and Italic aren't highlighted in tables without spaces between || and * or _. ||*bold*||_asdf_ || (Thanks Brett Stahlman) 0.9.0 * NEW: You can add classes to 'pre' tag -- |vimwiki-syntax-preformatted|. This might be useful for coloring some programming code with external js tools like google syntax highlighter. * NEW: !WikiPage is not highlighted. It is just a plain word WikiPage in HTML, without exclamation mark * NEW: Definition lists, see |vimwiki-syntax-lists|. * NEW: New implementation of |:VimwikiRenameWord|. CAUTION: It was tested on 2 computers only, backup your wiki before use it. Email me if it doesn't work for you. * FIX: Less than 3 symbols are not highlighted in Bold and Italic. * FIX: Added vimwiki autocmd group to avoid clashes with user defined autocmds. * FIX: Pressing ESC while |:VimwikiUISelect| opens current wiki index file. Should cancel wiki selection. 0.8.3 * NEW: on a list item creates checkbox. * FIX: With * in the first column, shouldn't insert more * (default syntax). * FIX: With MediaWiki's ** [ ], should insert it on the next line. * FIX: HTML export should use 'fileencoding' instead of 'encoding'. * FIX: Code cleanup. 0.8.2 * DEL: Removed google syntax file. * NEW: Default vimwiki syntax is a subset of google's one. Header's has been changed from !Header to =Header=. It is easier to maintain only 2 syntaxes. See |vimwiki-syntax-headers|. * NEW: Multiline paragraphs -- less longlines. * NEW: Comments. See |vimwiki-syntax-comments|. * DEL: Removed setlocal textwidth = 0 from ftplugin. * FIX: New regexps for bold, italic, bolditalic. * FIX: The last item in List sometimes fold-in incorrectly. * FIX: Minor tweaks on default css. 0.8.1 * NEW: Vimwiki's foldmethod changed from syntax to expr. Foldtext is changed to be nicer with folded list items. * NEW: Fold/outline list items. * NEW: It is possible now to edit wiki files in arbitrary directories which is not in g:vimwiki_list's paths. New WikiWords are created in the path of the current WikiWord. * NEW: User can remap Vimwiki's built in mappings. * NEW: Added |g:vimwiki_use_mouse|. It is off by default. * FIX: Removed mapping. 0.8.0 * NEW: Multiple wikies support. A lot of options have been changed, see |vimwiki-options| * NEW: Auto create directories. * NEW: Checked list item highlighted as comment. * FIX: Multiple 'set ft=vimwiki' for each buffer disabled. Vimwiki should load its buffers a bit faster now. 0.7.1 * NEW: VimwikiToggleListItem added to be able to remap to anything user prefers more. * FIX: Toggleable list items do not work with MediaWiki markup. * FIX: Changing g:vimwiki_home_html to path with ~ while vimwiki is loaded gives errors for HTML export. * DEL: Command :VimwikiExploreHome. 0.7.0 * NEW: GTD stuff -- toggleable list items. See |vimwiki-todo-lists|. * FIX: Headers do not fold inner headers. (Thanks Brett Stahlman) * FIX: Remove last blank lines from preformatted text at the end of file. * DEL: Removed g:vimwiki_smartCR option. 0.6.2 * NEW: [[link|description]] is available now. * FIX: Barebone links (ie: http://bla-bla-bla.org/h.pl?id=98) get extra escaping of ? and friends so they become invalid in HTML. * FIX: In linux going to [[wiki with whitespaces]] and then pressing BS to go back to prev wikipage produce error. (Thanks Brendon Bensel for the fix) * FIX: Remove setlocal encoding and fileformat from vimwiki ftplugin. * FIX: Some tweaks on default style.css 0.6.1 * FIX: [blablabla bla] shouldn't be converted to a link. * FIX: Remove extra annoing empty strings from PRE tag made from whitespaces in HTML export. * FIX: Moved functions related to HTML converting to new autoload module to increase a bit vimwiki startup time. 0.6 * NEW: Header and footer templates. See|g:vimwiki_html_header| and |g:vimwiki_html_footer|. * FIX: |:Vimwiki2HTML| does not recognize ~ as part of a valid path. 0.5.3 * FIX: Fixed |:VimwikiRenameWord|. Error when g:vimwiki_home had whitespaces in path. * FIX: |:VimwikiSplitWord| and |:VimwikiVSplitWord| didn't work. 0.5.2 * NEW: Added |:VimwikiGoHome|, |:VimwikiTabGoHome| and |:VimwikiExploreHome| commands. * NEW: Added wt mapping to open vimwiki index file in a new tab. * NEW: Added g:vimwiki_gohome option that controls how|:VimwikiGoHome| works when current buffer is changed. (Thanks Timur Zaripov) * FIX: Fixed |:VimwikiRenameWord|. Very bad behaviour when autochdir isn't set up. * FIX: Fixed commands :Wiki2HTML and :WikiAll2HTML to be available only for vimwiki buffers. * FIX: Renamed :Wiki2HTML and :WikiAll2HTML to |:Vimwiki2HTML| and |:VimwikiAll2HTML| commands. * FIX: Help file corrections. 0.5.1 * NEW: This help is created. * NEW: Now you can fold headers. * NEW: VimwikiGoHome and VimwikiExploreHome were added. * FIX: Bug with {{{HelloWikiWord}}} export to HTML is fixed. * DEL: Sync option removed from: Syntax highlighting for preformatted text {{{ }}}. 0.5 * NEW: vimwiki default markup to HTML conversion improved. * NEW: Added basic GoogleWiki and MediaWiki markup languages. * NEW: Chinese [[complex wiki words]]. 0.4 * NEW: vimwiki=>HTML converter in plain Vim language. * NEW: Plugin autoload. 0.3.4 * FIX: Backup files (.wiki~) caused a bunch of errors while opening wiki files. 0.3.3 * FIX: [[wiki word with dots at the end...]] didn't work. * NEW: Added error handling for delete wiki word function. * NEW: Added keybindings o and O for list items when g:vimwiki_smartCR=1. * NEW: Added keybinding wh to visit wiki home directory. 0.3.2 * FIX: Renaming -- error if complex wiki word contains %. * FIX: Syntax highlighting for preformatted text {{{ }}}. Sync option added. * FIX: smartCR bug fix. 0.3.1 * FIX: Renaming -- [[hello world?]] to [[hello? world]] links are not updated. * FIX: Buffers menu is a bit awkward after renaming. * NEW: Use mouse to follow links. Left double-click to follow WikiWord, Rightclick then Leftclick to go back. 0.3 * NEW: Highlight non-existent WikiWords. * NEW: Delete current WikiWord (wd). * NEW: g:vimwiki_smartCR=2 => use Vim comments (see :h comments :h formatoptions) feature to deal with list items. (thx -- Dmitry Alexandrov) * NEW: Highlight TODO:, DONE:, FIXED:, FIXME:. * NEW: Rename current WikiWord -- be careful on Windows you cannot rename wikiword to WikiWord. After renaming update all links to that renamed WikiWord. * FIX: Bug -- do not duplicate WikiWords in wiki history. * FIX: After renaming [[wiki word]] twice buffers are not deleted. * FIX: Renaming from [[wiki word]] to WikiWord result is [[WikiWord]] * FIX: More than one complex words on one line is bugging each other when try go to one of them. [[bla bla bla]] [[dodo dodo dodo]] becomes bla bla bla]] [[dodo dodo dodo. 0.2.2 * NEW: Added keybinding -- split WikiWord * NEW: Added keybinding -- vertical split WikiWord 0.2.1 * NEW: Install on Linux now works. 0.2 * NEW: Added part of Google's Wiki syntax. * NEW: Added auto insert # with ENTER. * NEW: On/Off auto insert bullet with ENTER. * NEW: Strip [[complex wiki name]] from symbols that cannot be used in file names. * NEW: Links to non-wiki files. Non wiki files are files with extensions ie [[hello world.txt]] or [[my homesite.html]] 0.1 * First public version. ============================================================================== 12. License *vimwiki-license* The MIT Licence http://www.opensource.org/licenses/mit-license.php Copyright (c) 2009 Maxim Kim Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. vim:tw=78:ts=8:ft=help ftplugin\vimwiki.vim [[[1 286 " Vimwiki filetype plugin file " Author: Maxim Kim " Home: http://code.google.com/p/vimwiki/ if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 " Don't load another plugin for this buffer " UNDO list {{{ " Reset the following options to undo this plugin. let b:undo_ftplugin = "setlocal wrap< linebreak< ". \ "suffixesadd< isfname< comments< ". \ "autowriteall< ". \ "formatoptions< foldtext< ". \ "foldmethod< foldexpr< commentstring< " " UNDO }}} " MISC STUFF {{{ setlocal wrap setlocal linebreak setlocal autowriteall setlocal commentstring= " MISC }}} " GOTO FILE: gf {{{ execute 'setlocal suffixesadd='.VimwikiGet('ext') setlocal isfname-=[,] " gf}}} " COMMENTS: autocreate list items {{{ " for list items, and list items with checkboxes if VimwikiGet('syntax') == 'default' exe 'setl comments=b:\ *\ ['.escape(g:vimwiki_listsyms[0], ' '). \ '],b:\ *\ ['.g:vimwiki_listsyms[4].']' exe 'setl comments+=b:\ #\ ['.escape(g:vimwiki_listsyms[0], ' '). \ '],b:\ #\ ['.g:vimwiki_listsyms[4].']' setl comments+=b:\ *,b:\ # setl formatlistpat=^\\s\\+[*#]\\s* else exe 'setl comments=n:*\ ['.escape(g:vimwiki_listsyms[0], ' '). \ '],n:*\ ['.g:vimwiki_listsyms[4].']' exe 'setl comments+=n:#\ ['.escape(g:vimwiki_listsyms[0], ' '). \ '],n:#\ ['.g:vimwiki_listsyms[4].']' setl comments+=n:*,n:# endif setlocal formatoptions=tnro " COMMENTS }}} " FOLDING for headers and list items using expr fold method. {{{ if g:vimwiki_folding == 1 setlocal fdm=expr setlocal foldexpr=VimwikiFoldLevel(v:lnum) setlocal foldtext=VimwikiFoldText() endif function! VimwikiFoldLevel(lnum) "{{{ let line = getline(a:lnum) " Header folding... if line =~ g:vimwiki_rxHeader let n = vimwiki#count_first_sym(line) return '>' . n endif if g:vimwiki_fold_empty_lines == 0 let nnline = getline(nextnonblank(a:lnum + 1)) if nnline =~ g:vimwiki_rxHeader let n = vimwiki#count_first_sym(nnline) return '<' . n endif endif " List item folding... if g:vimwiki_fold_lists let rx_list_item = '\('. \ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber. \ '\)' if line =~ rx_list_item let [nnum, nline] = s:find_next_item(rx_list_item, a:lnum) if nline =~ rx_list_item let level = s:get_li_level(a:lnum, nnum) if !(level < 0 && (nnum - a:lnum) > 1) return s:fold_marker(level) endif elseif nnum - a:lnum == 1 " last single-lined list item in a list let level = s:get_li_level_last(a:lnum) return s:fold_marker(level) endif else let [pnum, pline] = s:find_prev_item(rx_list_item, a:lnum) if pline =~ rx_list_item if getline(a:lnum + 1) =~ rx_list_item let level = s:get_li_level(pnum, a:lnum + 1) if level < 0 return s:fold_marker(level) endif endif let [nnum, nline] = s:find_next_item(rx_list_item, pnum) if nline !~ rx_list_item && nnum-a:lnum == 1 " last multi-lined list item in a list let level = s:get_li_level_last(pnum) return s:fold_marker(level) endif endif endif endif return '=' endfunction "}}} function! s:fold_marker(level) "{{{ if a:level > 0 return "a".a:level elseif a:level < 0 return "s".abs(a:level) else return "=" endif endfunction "}}} function! s:find_next_item(rx_item, lnum) "{{{ let lnum = a:lnum + 1 while lnum <= line('$') if getline(lnum) =~ a:rx_item \ || getline(lnum) =~ '^\S' \ || indent(lnum) <= indent(a:lnum) break endif let lnum += 1 endwhile return [lnum, getline(lnum)] endfunction "}}} function! s:find_prev_item(rx_item, lnum) "{{{ let lnum = a:lnum - 1 while lnum > 1 if getline(lnum) =~ a:rx_item \ || getline(lnum) =~ '^\S' break endif let lnum -= 1 endwhile return [lnum, getline(lnum)] endfunction "}}} function! s:get_li_level(lnum, nnum) "{{{ if VimwikiGet('syntax') == 'media' let level = vimwiki#count_first_sym(getline(a:nnum)) - \ vimwiki#count_first_sym(getline(a:lnum)) else let level = ((indent(a:nnum) - indent(a:lnum)) / &sw) endif return level endfunction "}}} function! s:get_li_level_last(lnum) "{{{ if VimwikiGet('syntax') == 'media' return -(vimwiki#count_first_sym(getline(a:lnum)) - 1) else return -(indent(a:lnum) / &sw - 1) endif endfunction "}}} function! VimwikiFoldText() "{{{ let line = getline(v:foldstart) return line.' ['.(v:foldend - v:foldstart).'] ' endfunction "}}} " FOLDING }}} " COMMANDS {{{ command! -buffer Vimwiki2HTML \ call vimwiki_html#Wiki2HTML(expand(VimwikiGet('path_html')), \ expand('%')) command! -buffer VimwikiAll2HTML \ call vimwiki_html#WikiAll2HTML(expand(VimwikiGet('path_html'))) command! -buffer VimwikiNextWord call vimwiki#WikiNextWord() command! -buffer VimwikiPrevWord call vimwiki#WikiPrevWord() command! -buffer VimwikiDeleteWord call vimwiki#WikiDeleteWord() command! -buffer VimwikiRenameWord call vimwiki#WikiRenameWord() command! -buffer VimwikiFollowWord call vimwiki#WikiFollowWord('nosplit') command! -buffer VimwikiGoBackWord call vimwiki#WikiGoBackWord() command! -buffer VimwikiSplitWord call vimwiki#WikiFollowWord('split') command! -buffer VimwikiVSplitWord call vimwiki#WikiFollowWord('vsplit') command! -buffer -range VimwikiToggleListItem call vimwiki_lst#ToggleListItem(, ) exe 'command! -buffer -nargs=* Search vimgrep '. \ VimwikiGet('path').'**/*'.VimwikiGet('ext') " COMMANDS }}} " KEYBINDINGS {{{ if g:vimwiki_use_mouse nmap nmap noremap <2-LeftMouse> :VimwikiFollowWord noremap :VimwikiSplitWord noremap :VimwikiVSplitWord noremap :VimwikiGoBackWord endif if !hasmapto('VimwikiFollowWord') nmap VimwikiFollowWord endif noremap