Merge branch 'dev' into path-handling

Conflicts:
	autoload/vimwiki/base.vim
	autoload/vimwiki/diary.vim
	autoload/vimwiki/html.vim
	autoload/vimwiki/path.vim
	autoload/vimwiki/tags.vim
	autoload/vimwiki/u.vim
	autoload/vimwiki/vars.vim
	ftplugin/vimwiki.vim
	plugin/vimwiki.vim
This commit is contained in:
EinfachToll 2018-04-25 21:46:00 +02:00
commit b1393a34f7
21 changed files with 2608 additions and 1730 deletions

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2008-2010 Maxim Kim
2013-2017 Daniel Schemala
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.

View File

@ -2,7 +2,7 @@ A Personal Wiki For Vim
============================================================================== ==============================================================================
![screenshot1](doc/screenshot_1.png) ![screenshot1](doc/screenshot_1.png)
![screenshot2](doc/screenshot_2.png) ![screenshot2](doc/screenshot_2.png) *
Intro Intro
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -122,6 +122,11 @@ Make sure you have these settings in your vimrc file:
Without them Vimwiki will not work properly. Without them Vimwiki will not work properly.
Installation using [Vim packages](http://vimhelp.appspot.com/repeat.txt.html#packages) (since Vim 7.4.1528)
------------------------------------------------------------------------------
git clone https://github.com/vimwiki/vimwiki.git ~/.vim/pack/plugins/start/vimwiki
Installation using [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332) Installation using [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332)
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -140,3 +145,7 @@ Add `Plugin 'vimwiki/vimwiki'` to your vimrc file and run
Or download the [zip archive](https://github.com/vimwiki/vimwiki/archive/master.zip) and extract it in `~/.vim/bundle/` Or download the [zip archive](https://github.com/vimwiki/vimwiki/archive/master.zip) and extract it in `~/.vim/bundle/`
Then launch Vim, run `:Helptags` and then `:help vimwiki` to verify it was installed. Then launch Vim, run `:Helptags` and then `:help vimwiki` to verify it was installed.
----
\* Screenshots made with the [solarized colorscheme](https://github.com/altercation/vim-colors-solarized)
and [lightline](https://github.com/itchyny/lightline.vim)

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +1,53 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
" Desc: Handle diary notes " Description: Handle diary notes
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" Load only once {{{
if exists("g:loaded_vimwiki_diary_auto") || &cp if exists("g:loaded_vimwiki_diary_auto") || &cp
finish finish
endif endif
let g:loaded_vimwiki_diary_auto = 1 let g:loaded_vimwiki_diary_auto = 1
"}}}
let s:vimwiki_max_scan_for_caption = 5 let s:vimwiki_max_scan_for_caption = 5
" Helpers {{{
function! s:prefix_zero(num) "{{{ function! s:prefix_zero(num)
if a:num < 10 if a:num < 10
return '0'.a:num return '0'.a:num
endif endif
return a:num return a:num
endfunction "}}} endfunction
function! s:diary_path(...) "{{{
function! s:diary_path(...)
let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1
return vimwiki#vars#get_wikilocal('diary_path', idx) return vimwiki#vars#get_wikilocal('diary_path', idx)
endfunction "}}} endfunction
function! s:diary_index(...) "{{{
function! s:diary_index(...)
let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1
return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx).vimwiki#vars#get_wikilocal('ext', idx) return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx).
endfunction "}}} \ vimwiki#vars#get_wikilocal('ext', idx)
endfunction
function! vimwiki#diary#diary_date_link(...) "{{{
function! vimwiki#diary#diary_date_link(...)
if a:0 if a:0
return strftime('%Y-%m-%d', a:1) return strftime('%Y-%m-%d', a:1)
else else
return strftime('%Y-%m-%d') return strftime('%Y-%m-%d')
endif endif
endfunction "}}} endfunction
function! s:get_position_links(link) "{{{
function! s:get_position_links(link)
let idx = -1 let idx = -1
let links = [] let links = []
if a:link =~# '^\d\{4}-\d\d-\d\d' if a:link =~# '^\d\{4}-\d\d-\d\d'
let links = keys(s:get_diary_links()) let links = map(s:get_diary_files(), 'fnamemodify(v:val, ":t:r")')
" include 'today' into links " include 'today' into links
if index(links, vimwiki#diary#diary_date_link()) == -1 if index(links, vimwiki#diary#diary_date_link()) == -1
call add(links, vimwiki#diary#diary_date_link()) call add(links, vimwiki#diary#diary_date_link())
@ -51,21 +56,20 @@ function! s:get_position_links(link) "{{{
let idx = index(links, a:link) let idx = index(links, a:link)
endif endif
return [idx, links] return [idx, links]
endfunction "}}} endfunction
fun! s:get_month_name(month) "{{{
function! s:get_month_name(month)
return vimwiki#vars#get_global('diary_months')[str2nr(a:month)] return vimwiki#vars#get_global('diary_months')[str2nr(a:month)]
endfun "}}} endfunction
" Helpers }}}
" Diary index stuff {{{ function! s:read_captions(files)
fun! s:read_captions(files) "{{{
let result = {} let result = {}
let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader') let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader')
for fl in a:files for fl in a:files
" remove paths and extensions " remove paths and extensions
let fl_key = fnamemodify(fl, ':t:r') let fl_key = substitute(fnamemodify(fl, ':t'), vimwiki#vars#get_wikilocal('ext').'$', '', '')
if filereadable(fl) if filereadable(fl)
for line in readfile(fl, '', s:vimwiki_max_scan_for_caption) for line in readfile(fl, '', s:vimwiki_max_scan_for_caption)
@ -81,9 +85,10 @@ fun! s:read_captions(files) "{{{
endfor endfor
return result return result
endfun "}}} endfunction
fun! s:get_diary_links() "{{{
function! s:get_diary_files()
let rx = '^\d\{4}-\d\d-\d\d' let rx = '^\d\{4}-\d\d-\d\d'
let s_files = glob(vimwiki#vars#get_wikilocal('diary_path') . '*' . vimwiki#vars#get_wikilocal('ext')) let s_files = glob(vimwiki#vars#get_wikilocal('diary_path') . '*' . vimwiki#vars#get_wikilocal('ext'))
let files = split(s_files, '\n') let files = split(s_files, '\n')
@ -92,12 +97,11 @@ fun! s:get_diary_links() "{{{
" remove backup files (.wiki~) " remove backup files (.wiki~)
call filter(files, 'v:val !~# ''.*\~$''') call filter(files, 'v:val !~# ''.*\~$''')
let links_with_captions = s:read_captions(files) return files
endfunction
return links_with_captions
endfun "}}}
fun! s:group_links(links) "{{{ function! s:group_links(links)
let result = {} let result = {}
let p_year = 0 let p_year = 0
let p_month = 0 let p_month = 0
@ -116,38 +120,45 @@ fun! s:group_links(links) "{{{
let p_month = month let p_month = month
endfor endfor
return result return result
endfun "}}} endfunction
function! s:sort(lst) "{{{
function! s:sort(lst)
if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc' if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc'
return reverse(sort(a:lst)) return reverse(sort(a:lst))
else else
return sort(a:lst) return sort(a:lst)
endif endif
endfunction "}}} endfunction
function! s:format_diary() "{{{
function! s:format_diary()
let result = [] let result = []
let g_files = s:group_links(s:get_diary_links()) let links_with_captions = s:read_captions(s:get_diary_files())
let g_files = s:group_links(links_with_captions)
for year in s:sort(keys(g_files)) for year in s:sort(keys(g_files))
call add(result, '') call add(result, '')
call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , '')) call add(result,
\ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , ''))
for month in s:sort(keys(g_files[year])) for month in s:sort(keys(g_files[year]))
call add(result, '') call add(result, '')
call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'), '__Header__', s:get_month_name(month), '')) call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'),
\ '__Header__', s:get_month_name(month), ''))
for [fl, cap] in s:sort(items(g_files[year][month])) for [fl, cap] in s:sort(items(g_files[year][month]))
if empty(cap) if empty(cap)
let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', fl, '') let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate1'),
\ '__LinkUrl__', fl, '')
let entry = substitute(entry, '__LinkDescription__', cap, '') let entry = substitute(entry, '__LinkDescription__', cap, '')
call add(result, repeat(' ', &sw).'* '.entry) call add(result, repeat(' ', vimwiki#lst#get_list_margin()).'* '.entry)
else else
let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate2'), '__LinkUrl__', fl, '') let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate2'),
\ '__LinkUrl__', fl, '')
let entry = substitute(entry, '__LinkDescription__', cap, '') let entry = substitute(entry, '__LinkDescription__', cap, '')
call add(result, repeat(' ', &sw).'* '.entry) call add(result, repeat(' ', vimwiki#lst#get_list_margin()).'* '.entry)
endif endif
endfor endfor
@ -155,11 +166,10 @@ function! s:format_diary() "{{{
endfor endfor
return result return result
endfunction "}}} endfunction
" Diary index stuff }}}
function! vimwiki#diary#make_note(wnum, ...) "{{{ function! vimwiki#diary#make_note(wnum, ...)
if a:wnum > vimwiki#vars#number_of_wikis() if a:wnum > vimwiki#vars#number_of_wikis()
echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!'
return return
@ -174,10 +184,15 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{
call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('diary_path', idx)) call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('diary_path', idx))
if a:0 && a:1 == 1
let cmd = 'tabedit'
else
let cmd = 'edit' let cmd = 'edit'
if a:0
if a:1 == 1
let cmd = 'tabedit'
elseif a:1 == 2
let cmd = 'split'
elseif a:1 == 3
let cmd = 'vsplit'
endif
endif endif
if a:0>1 if a:0>1
let link = 'diary:'.a:2 let link = 'diary:'.a:2
@ -186,9 +201,10 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{
endif endif
call vimwiki#base#open_link(cmd, link, s:diary_index(idx)) call vimwiki#base#open_link(cmd, link, s:diary_index(idx))
endfunction "}}} endfunction
function! vimwiki#diary#goto_diary_index(wnum) "{{{
function! vimwiki#diary#goto_diary_index(wnum)
if a:wnum > vimwiki#vars#number_of_wikis() if a:wnum > vimwiki#vars#number_of_wikis()
echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!'
return return
@ -202,9 +218,10 @@ function! vimwiki#diary#goto_diary_index(wnum) "{{{
endif endif
call vimwiki#base#edit_file('e', s:diary_index(idx), '') call vimwiki#base#edit_file('e', s:diary_index(idx), '')
endfunction "}}} endfunction
function! vimwiki#diary#goto_next_day() "{{{
function! vimwiki#diary#goto_next_day()
let link = '' let link = ''
let [idx, links] = s:get_position_links(expand('%:t:r')) let [idx, links] = s:get_position_links(expand('%:t:r'))
@ -222,9 +239,10 @@ function! vimwiki#diary#goto_next_day() "{{{
if len(link) if len(link)
call vimwiki#base#open_link(':e ', link) call vimwiki#base#open_link(':e ', link)
endif endif
endfunction "}}} endfunction
function! vimwiki#diary#goto_prev_day() "{{{
function! vimwiki#diary#goto_prev_day()
let link = '' let link = ''
let [idx, links] = s:get_position_links(expand('%:t:r')) let [idx, links] = s:get_position_links(expand('%:t:r'))
@ -242,9 +260,10 @@ function! vimwiki#diary#goto_prev_day() "{{{
if len(link) if len(link)
call vimwiki#base#open_link(':e ', link) call vimwiki#base#open_link(':e ', link)
endif endif
endfunction "}}} endfunction
function! vimwiki#diary#generate_diary_section() "{{{
function! vimwiki#diary#generate_diary_section()
let current_file = vimwiki#path#path_norm(expand("%:p")) let current_file = vimwiki#path#path_norm(expand("%:p"))
let diary_file = vimwiki#path#path_norm(s:diary_index()) let diary_file = vimwiki#path#path_norm(s:diary_index())
if vimwiki#path#is_equal(current_file, diary_file) if vimwiki#path#is_equal(current_file, diary_file)
@ -254,11 +273,11 @@ function! vimwiki#diary#generate_diary_section() "{{{
else else
echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!' echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!'
endif endif
endfunction "}}} endfunction
" Calendar.vim {{{
" Callback function. " Callback function for Calendar.vim
function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{ function! vimwiki#diary#calendar_action(day, month, year, week, dir)
let day = s:prefix_zero(a:day) let day = s:prefix_zero(a:day)
let month = s:prefix_zero(a:month) let month = s:prefix_zero(a:month)
@ -278,16 +297,14 @@ function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{
" XXX: Well, +1 is for inconsistent index basing... " XXX: Well, +1 is for inconsistent index basing...
call vimwiki#diary#make_note(vimwiki#vars#get_bufferlocal('wiki_nr')+1, 0, link) call vimwiki#diary#make_note(vimwiki#vars#get_bufferlocal('wiki_nr')+1, 0, link)
endfunction "}}} endfunction
" Sign function.
function vimwiki#diary#calendar_sign(day, month, year) "{{{ function vimwiki#diary#calendar_sign(day, month, year)
let day = s:prefix_zero(a:day) let day = s:prefix_zero(a:day)
let month = s:prefix_zero(a:month) let month = s:prefix_zero(a:month)
let sfile = vimwiki#vars#get_wikilocal('diary_path') . let sfile = vimwiki#vars#get_wikilocal('diary_path') .
\ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext') \ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext')
return filereadable(expand(sfile)) return filereadable(expand(sfile))
endfunction "}}} endfunction
" Calendar.vim }}}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,17 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
" Desc: Link functions for markdown syntax " Description: Link functions for markdown syntax
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" MISC helper functions {{{ function! s:safesubstitute(text, search, replace, mode)
" Substitute regexp but do not interpret replace
let escaped = escape(a:replace, '\&')
return substitute(a:text, a:search, escaped, a:mode)
endfunction
" vimwiki#markdown_base#scan_reflinks
function! vimwiki#markdown_base#scan_reflinks() " {{{ function! vimwiki#markdown_base#scan_reflinks()
let mkd_refs = {} let mkd_refs = {}
" construct list of references using vimgrep " construct list of references using vimgrep
try try
@ -16,7 +20,7 @@ function! vimwiki#markdown_base#scan_reflinks() " {{{
catch /^Vim\%((\a\+)\)\=:E480/ " No Match catch /^Vim\%((\a\+)\)\=:E480/ " No Match
"Ignore it, and move on to the next file "Ignore it, and move on to the next file
endtry endtry
"
for d in getqflist() for d in getqflist()
let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ') let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ')
let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr')) let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr'))
@ -27,12 +31,11 @@ function! vimwiki#markdown_base#scan_reflinks() " {{{
endfor endfor
call vimwiki#vars#set_bufferlocal('markdown_refs', mkd_refs) call vimwiki#vars#set_bufferlocal('markdown_refs', mkd_refs)
return mkd_refs return mkd_refs
endfunction "}}} endfunction
" vimwiki#markdown_base#open_reflink
" try markdown reference links " try markdown reference links
function! vimwiki#markdown_base#open_reflink(link) " {{{ function! vimwiki#markdown_base#open_reflink(link)
" echom "vimwiki#markdown_base#open_reflink" " echom "vimwiki#markdown_base#open_reflink"
let link = a:link let link = a:link
let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs') let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs')
@ -43,70 +46,10 @@ function! vimwiki#markdown_base#open_reflink(link) " {{{
else else
return 0 return 0
endif endif
endfunction " }}} endfunction
" }}}
" WIKI link following functions {{{
" vimwiki#markdown_base#follow_link function! s:normalize_link_syntax_n()
function! vimwiki#markdown_base#follow_link(split, ...) "{{{ Parse link at cursor and pass
" to VimwikiLinkHandler, or failing that, the default open_link handler
" echom "markdown_base#follow_link"
if 0
" Syntax-specific links
" XXX: @Stuart: do we still need it?
" XXX: @Maxim: most likely! I am still working on a seemless way to
" integrate regexp's without complicating syntax/vimwiki.vim
else
if a:split ==# "split"
let cmd = ":split "
elseif a:split ==# "vsplit"
let cmd = ":vsplit "
elseif a:split ==# "tabnew"
let cmd = ":tabnew "
else
let cmd = ":e "
endif
" try WikiLink
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')),
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'))
" try WikiIncl
if lnk == ""
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')),
\ vimwiki#vars#get_global('rxWikiInclMatchUrl'))
endif
" try Weblink
if lnk == ""
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')),
\ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'))
endif
if lnk != ""
if !VimwikiLinkHandler(lnk)
if !vimwiki#markdown_base#open_reflink(lnk)
" remove the extension from the filename if exists
let lnk = substitute(lnk, vimwiki#vars#get_wikilocal('ext').'$', '', '')
call vimwiki#base#open_link(cmd, lnk)
endif
endif
return
endif
if a:0 > 0
execute "normal! ".a:1
else
call vimwiki#base#normalize_link(0)
endif
endif
endfunction " }}}
" LINK functions {{{
" s:normalize_link_syntax_n
function! s:normalize_link_syntax_n() " {{{
let lnum = line('.') let lnum = line('.')
" try WikiIncl " try WikiIncl
@ -120,7 +63,8 @@ function! s:normalize_link_syntax_n() " {{{
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0')) let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'))
if !empty(lnk) if !empty(lnk)
let sub = vimwiki#base#normalize_link_helper(lnk, let sub = vimwiki#base#normalize_link_helper(lnk,
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'),
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'),
\ vimwiki#vars#get_syntaxlocal('WikiLink1Template2')) \ vimwiki#vars#get_syntaxlocal('WikiLink1Template2'))
call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub)
return return
@ -130,7 +74,8 @@ function! s:normalize_link_syntax_n() " {{{
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1')) let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'))
if !empty(lnk) if !empty(lnk)
let sub = vimwiki#base#normalize_link_helper(lnk, let sub = vimwiki#base#normalize_link_helper(lnk,
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'),
\ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'),
\ vimwiki#vars#get_global('WikiLinkTemplate2')) \ vimwiki#vars#get_global('WikiLinkTemplate2'))
call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub)
return return
@ -140,7 +85,8 @@ function! s:normalize_link_syntax_n() " {{{
let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'))
if !empty(lnk) if !empty(lnk)
let sub = vimwiki#base#normalize_link_helper(lnk, let sub = vimwiki#base#normalize_link_helper(lnk,
\ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'), \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'),
\ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'),
\ vimwiki#vars#get_syntaxlocal('Weblink1Template')) \ vimwiki#vars#get_syntaxlocal('Weblink1Template'))
call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub)
return return
@ -158,10 +104,10 @@ function! s:normalize_link_syntax_n() " {{{
return return
endif endif
endfunction " }}} endfunction
" s:normalize_link_syntax_v
function! s:normalize_link_syntax_v() " {{{ function! s:normalize_link_syntax_v()
let lnum = line('.') let lnum = line('.')
let sel_save = &selection let sel_save = &selection
let &selection = "old" let &selection = "old"
@ -172,38 +118,33 @@ function! s:normalize_link_syntax_v() " {{{
try try
norm! gvy norm! gvy
let visual_selection = @" let visual_selection = @"
let link = substitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), '__LinkUrl__', '\='."'".visual_selection."'", '') let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'),
let link = substitute(link, '__LinkDescription__', '\='."'".visual_selection."'", '') \ '__LinkUrl__', visual_selection, '')
let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '')
call setreg('"', link, 'v') call setreg('"', substitute(link, '\n', '', ''), visualmode())
" paste result " paste result
norm! `>pgvd norm! `>""pgvd
finally finally
call setreg('"', rv, rt) call setreg('"', rv, rt)
let &selection = sel_save let &selection = sel_save
endtry endtry
endfunction " }}} endfunction
" vimwiki#base#normalize_link
function! vimwiki#markdown_base#normalize_link(is_visual_mode) "{{{ function! vimwiki#markdown_base#normalize_link(is_visual_mode)
if 0 if 0
" Syntax-specific links " Syntax-specific links
else else
if !a:is_visual_mode if !a:is_visual_mode
call s:normalize_link_syntax_n() call s:normalize_link_syntax_n()
elseif visualmode() ==# 'v' && line("'<") == line("'>") elseif line("'<") == line("'>")
" action undefined for 'line-wise' or 'multi-line' visual mode selections " action undefined for multi-line visual mode selections
call s:normalize_link_syntax_v() call s:normalize_link_syntax_v()
endif endif
endif endif
endfunction "}}} endfunction
" }}}
" -------------------------------------------------------------------------
" Load syntax-specific Wiki functionality
" -------------------------------------------------------------------------

View File

@ -1,15 +1,15 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
" Desc: Path manipulation functions " Description: Path manipulation functions
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
function! vimwiki#path#chomp_slash(str) "{{{ function! vimwiki#path#chomp_slash(str)
return substitute(a:str, '[/\\]\+$', '', '') return substitute(a:str, '[/\\]\+$', '', '')
endfunction "}}} endfunction
" Define path-compare function, either case-sensitive or not, depending on OS. " Define path-compare function, either case-sensitive or not, depending on OS.
"{{{ " function! vimwiki#path#is_equal(p1, p2)
if vimwiki#u#is_windows() if vimwiki#u#is_windows()
function! vimwiki#path#is_equal(p1, p2) function! vimwiki#path#is_equal(p1, p2)
return a:p1 ==? a:p2 return a:p1 ==? a:p2
@ -18,10 +18,11 @@ else
function! vimwiki#path#is_equal(p1, p2) function! vimwiki#path#is_equal(p1, p2)
return a:p1 ==# a:p2 return a:p1 ==# a:p2
endfunction endfunction
endif "}}} endif
" collapse sections like /a/b/../c to /a/c " collapse sections like /a/b/../c to /a/c
function! vimwiki#path#normalize(path) "{{{ function! vimwiki#path#normalize(path)
let path = a:path let path = a:path
while 1 while 1
let result = substitute(path, '/[^/]\+/\.\.', '', '') let result = substitute(path, '/[^/]\+/\.\.', '', '')
@ -31,9 +32,10 @@ function! vimwiki#path#normalize(path) "{{{
let path = result let path = result
endwhile endwhile
return result return result
endfunction "}}} endfunction
function! vimwiki#path#path_norm(path) "{{{
function! vimwiki#path#path_norm(path)
" /-slashes " /-slashes
if a:path !~# '^scp:' if a:path !~# '^scp:'
let path = substitute(a:path, '\', '/', 'g') let path = substitute(a:path, '\', '/', 'g')
@ -44,21 +46,24 @@ function! vimwiki#path#path_norm(path) "{{{
else else
return a:path return a:path
endif endif
endfunction "}}} endfunction
function! vimwiki#path#is_link_to_dir(link) "{{{
function! vimwiki#path#is_link_to_dir(link)
" Check if link is to a directory. " Check if link is to a directory.
" It should be ended with \ or /. " It should be ended with \ or /.
return a:link =~# '\m[/\\]$' return a:link =~# '\m[/\\]$'
endfunction "}}} endfunction
function! vimwiki#path#abs_path_of_link(link) "{{{
function! vimwiki#path#abs_path_of_link(link)
return vimwiki#path#normalize(expand("%:p:h").'/'.a:link) return vimwiki#path#normalize(expand("%:p:h").'/'.a:link)
endfunction "}}} endfunction
" return longest common path prefix of 2 given paths. " return longest common path prefix of 2 given paths.
" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki' " '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
function! vimwiki#path#path_common_pfx(path1, path2) "{{{ function! vimwiki#path#path_common_pfx(path1, path2)
let p1 = split(a:path1, '[/\\]', 1) let p1 = split(a:path1, '[/\\]', 1)
let p2 = split(a:path2, '[/\\]', 1) let p2 = split(a:path2, '[/\\]', 1)
@ -72,19 +77,26 @@ function! vimwiki#path#path_common_pfx(path1, path2) "{{{
else else
return join(p1[: idx-1], '/') return join(p1[: idx-1], '/')
endif endif
endfunction "}}} endfunction
function! vimwiki#path#wikify_path(path) "{{{
let result = resolve(expand(a:path, ':p')) function! vimwiki#path#wikify_path(path)
let result = resolve(fnamemodify(a:path, ':p'))
if vimwiki#u#is_windows() if vimwiki#u#is_windows()
let result = substitute(result, '\\', '/', 'g') let result = substitute(result, '\\', '/', 'g')
endif endif
let result = vimwiki#path#chomp_slash(result) let result = vimwiki#path#chomp_slash(result)
return result return result
endfunction "}}} endfunction
function! vimwiki#path#current_wiki_file()
return vimwiki#path#wikify_path(expand('%:p'))
endfunction
" Returns: the relative path from a:dir to a:file " Returns: the relative path from a:dir to a:file
function! vimwiki#path#relpath(dir, file) "{{{ function! vimwiki#path#relpath(dir, file)
let result = [] let result = []
let dir = split(a:dir, '/') let dir = split(a:dir, '/')
let file = split(a:file, '/') let file = split(a:file, '/')
@ -106,12 +118,13 @@ function! vimwiki#path#relpath(dir, file) "{{{
let result_path .= '/' let result_path .= '/'
endif endif
return result_path return result_path
endfunction "}}} endfunction
" If the optional argument provided and nonzero, " If the optional argument provided and nonzero,
" it will ask before creating a directory " it will ask before creating a directory
" Returns: 1 iff directory exists or successfully created " Returns: 1 iff directory exists or successfully created
function! vimwiki#path#mkdir(dir_obj, ...) "{{{ function! vimwiki#path#mkdir(dir_obj, ...)
if a:dir_obj.protocoll ==# 'scp' if a:dir_obj.protocoll ==# 'scp'
" we can not do much, so let's pretend everything is ok " we can not do much, so let's pretend everything is ok
@ -130,23 +143,23 @@ function! vimwiki#path#mkdir(dir_obj, ...) "{{{
let path = iconv(path, &enc, vimwiki#vars#get_global('w32_dir_enc')) let path = iconv(path, &enc, vimwiki#vars#get_global('w32_dir_enc'))
endif endif
if a:0 && a:1 && input("Vimwiki: Make new directory: " if a:0 && a:1 && input("Vimwiki: Make new directory: ".path."\n [y]es/[N]o? ") !~? '^y'
\ .path."\n [y]es/[N]o? ") !~? '^y'
return 0 return 0
endif endif
call mkdir(path, "p") call mkdir(path, "p")
return 1 return 1
endif endif
endfunction " }}} endfunction
function! vimwiki#path#is_absolute(path) "{{{
function! vimwiki#path#is_absolute(path)
if vimwiki#u#is_windows() if vimwiki#u#is_windows()
return a:path =~? '\m^\a:' return a:path =~? '\m^\a:'
else else
return a:path =~# '\m^/\|\~/' return a:path =~# '\m^/\|\~/'
endif endif
endfunction "}}} endfunction
" Combine a directory and a file into one path, doesn't generate duplicate " Combine a directory and a file into one path, doesn't generate duplicate

View File

@ -27,6 +27,13 @@ del {text-decoration: line-through; color: #777777;}
.tag {background-color: #eeeeee; font-family: monospace; padding: 2px;} .tag {background-color: #eeeeee; font-family: monospace; padding: 2px;}
/* classes for items of todo lists */ /* classes for items of todo lists */
.rejected {
/* list-style: none; */
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAACXBIWXMAAADFAAAAxQEdzbqoAAAAB3RJTUUH4QgEFhAtuWgv9wAAAPZQTFRFmpqam5iYnJaWnJeXnpSUn5OTopCQpoqKpouLp4iIqIiIrYCAt3V1vW1tv2xsmZmZmpeXnpKS/x4e/x8f/yAg/yIi/yQk/yUl/yYm/ygo/ykp/yws/zAw/zIy/zMz/zQ0/zU1/zY2/zw8/0BA/0ZG/0pK/1FR/1JS/1NT/1RU/1VV/1ZW/1dX/1pa/15e/19f/2Zm/2lp/21t/25u/3R0/3p6/4CA/4GB/4SE/4iI/46O/4+P/52d/6am/6ur/66u/7Oz/7S0/7e3/87O/9fX/9zc/93d/+Dg/+vr/+3t/+/v//Dw//Ly//X1//f3//n5//z8////gzaKowAAAA90Uk5T/Pz8/Pz8/Pz8/Pz8/f39ppQKWQAAAAFiS0dEEnu8bAAAAACuSURBVAhbPY9ZF4FQFEZPSKbIMmWep4gMGTKLkIv6/3/GPbfF97b3w17rA0kQOPgvAeHW6uJ6+5h7HqLdwowgOzejXRXBdx6UdSru216xuOMBHHNU0clTzeSUA6EhF8V8kqroluMiU6HKcuf4phGPr1o2q9kYZWwNq1qfRRmTaXpqsyjj17KkWCxKBUBgXWueHIyiAIg18gsse4KHkLF5IKIY10WQgv7fOy4ST34BRiopZ8WLNrgAAAAASUVORK5CYII=);
background-repeat: no-repeat;
background-position: 0 .2em;
padding-left: 1.5em;
}
.done0 { .done0 {
/* list-style: none; */ /* list-style: none; */
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==); background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==);

View File

@ -1,9 +1,11 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
let s:TAGS_METADATA_FILE_NAME = '.tags' let s:TAGS_METADATA_FILE_NAME = '.tags'
" Tags metadata in-memory format: " Tags metadata in-memory format:
" metadata := { 'pagename': [entries, ...] } " metadata := { 'pagename': [entries, ...] }
" entry := { 'tagname':..., 'lineno':..., 'link':... } " entry := { 'tagname':..., 'lineno':..., 'link':... }
@ -19,12 +21,13 @@ let s:TAGS_METADATA_FILE_NAME = '.tags'
" an optional field, "vimwiki:". In this field, we encode tab-separated values " an optional field, "vimwiki:". In this field, we encode tab-separated values
" of missing parameters -- "pagename" and "link". " of missing parameters -- "pagename" and "link".
" vimwiki#tags#update_tags
" Update tags metadata. " Update tags metadata.
" a:full_rebuild == 1: re-scan entire wiki " a:full_rebuild == 1: re-scan entire wiki
" a:full_rebuild == 0: only re-scan current page " a:full_rebuild == 0: only re-scan current page
" a:all_files == '': only if the file is newer than .tags " a:all_files == '': only if the file is newer than .tags
function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{ function! vimwiki#tags#update_tags(full_rebuild, all_files)
let all_files = a:all_files != '' let all_files = a:all_files != ''
if !a:full_rebuild if !a:full_rebuild
" Updating for one page (current) " Updating for one page (current)
@ -54,7 +57,8 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{
endfor endfor
call s:write_tags_metadata(metadata) call s:write_tags_metadata(metadata)
endif endif
endfunction " }}} endfunction
function! s:page_name(file_obj) function! s:page_name(file_obj)
let wiki_base_dir = vimwiki#vars#get_wikilocal('path') let wiki_base_dir = vimwiki#vars#get_wikilocal('path')
@ -62,10 +66,9 @@ function! s:page_name(file_obj)
return vimwiki#path#to_string(segment) return vimwiki#path#to_string(segment)
endfunction endfunction
" s:scan_tags
" Scans the list of text lines (argument) and produces tags metadata as a " Scans the list of text lines (argument) and produces tags metadata as a list of tag entries.
" list of tag entries. function! s:scan_tags(lines, page_name)
function! s:scan_tags(lines, page_name) "{{{
let entries = [] let entries = []
@ -140,17 +143,18 @@ function! s:scan_tags(lines, page_name) "{{{
endfor " loop over lines endfor " loop over lines
return entries return entries
endfunction " }}} endfunction
" Returns tags metadata file path
function! vimwiki#tags#metadata_file_path() abort
return vimwiki#path#join(vimwiki#vars#get_wikilocal('path'),
\ vimwiki#path#file_segment(s:TAGS_METADATA_FILE_NAME))
endfunction
" vimwiki#tags#metadata_file_path
" Returns tags metadata file path object
function! vimwiki#tags#metadata_file_path() abort "{{{
return vimwiki#path#join(vimwiki#vars#get_wikilocal('path'), vimwiki#path#file_segment(s:TAGS_METADATA_FILE_NAME))
endfunction " }}}
" s:load_tags_metadata
" Loads tags metadata from file, returns a dictionary " Loads tags metadata from file, returns a dictionary
function! s:load_tags_metadata() abort "{{{ function! s:load_tags_metadata() abort
let metadata_path = vimwiki#tags#metadata_file_path() let metadata_path = vimwiki#tags#metadata_file_path()
if !filereadable(metadata_path) if !filereadable(metadata_path)
return {} return {}
@ -197,29 +201,29 @@ function! s:load_tags_metadata() abort "{{{
endif endif
endfor endfor
return metadata return metadata
endfunction " }}} endfunction
" s:remove_page_from_tags
" Removes all entries for given page from metadata in-place. Returns updated " Removes all entries for given page from metadata in-place. Returns updated
" metadata (just in case). " metadata (just in case).
function! s:remove_page_from_tags(metadata, page_name) "{{{ function! s:remove_page_from_tags(metadata, page_name)
if has_key(a:metadata, a:page_name) if has_key(a:metadata, a:page_name)
call remove(a:metadata, a:page_name) call remove(a:metadata, a:page_name)
return a:metadata return a:metadata
else else
return a:metadata return a:metadata
endif endif
endfunction " }}} endfunction
" s:merge_tags
" Merges metadata of one file into a:metadata " Merges metadata of one file into a:metadata
function! s:merge_tags(metadata, pagename, file_metadata) "{{{ function! s:merge_tags(metadata, pagename, file_metadata)
let metadata = a:metadata let metadata = a:metadata
let metadata[a:pagename] = a:file_metadata let metadata[a:pagename] = a:file_metadata
return metadata return metadata
endfunction " }}} endfunction
" s:tags_entry_cmp
" Compares two actual lines from tags file. Return value is in strcmp style. " Compares two actual lines from tags file. Return value is in strcmp style.
" See help on sort() -- that's what this function is going to be used for. " See help on sort() -- that's what this function is going to be used for.
" See also s:write_tags_metadata below -- that's where we compose these tags " See also s:write_tags_metadata below -- that's where we compose these tags
@ -229,7 +233,7 @@ endfunction " }}}
" numbers as strings, not integers, and so, for example, tag at line 14 " numbers as strings, not integers, and so, for example, tag at line 14
" preceeds the same tag on the same page at line 9. (Because string "14" is " preceeds the same tag on the same page at line 9. (Because string "14" is
" alphabetically 'less than' string "9".) " alphabetically 'less than' string "9".)
function! s:tags_entry_cmp(i1, i2) "{{{ function! s:tags_entry_cmp(i1, i2)
let items = [] let items = []
for orig_item in [a:i1, a:i2] for orig_item in [a:i1, a:i2]
let fields = split(orig_item, "\t") let fields = split(orig_item, "\t")
@ -249,11 +253,11 @@ function! s:tags_entry_cmp(i1, i2) "{{{
else else
return 0 return 0
endif endif
endfunction " }}} endfunction
" s:write_tags_metadata
" Saves metadata object into a file. Throws exceptions in case of problems. " Saves metadata object into a file. Throws exceptions in case of problems.
function! s:write_tags_metadata(metadata) "{{{ function! s:write_tags_metadata(metadata)
let metadata_path = vimwiki#tags#metadata_file_path() let metadata_path = vimwiki#tags#metadata_file_path()
let tags = [] let tags = []
for pagename in keys(a:metadata) for pagename in keys(a:metadata)
@ -275,11 +279,11 @@ function! s:write_tags_metadata(metadata) "{{{
call sort(tags, "s:tags_entry_cmp") call sort(tags, "s:tags_entry_cmp")
call insert(tags, "!_TAG_FILE_SORTED\t1\t") call insert(tags, "!_TAG_FILE_SORTED\t1\t")
call writefile(tags, metadata_path) call writefile(tags, metadata_path)
endfunction " }}} endfunction
" vimwiki#tags#get_tags
" Returns list of unique tags found in the .tags file " Returns list of unique tags found in the .tags file
function! vimwiki#tags#get_tags() "{{{ function! vimwiki#tags#get_tags()
let metadata = s:load_tags_metadata() let metadata = s:load_tags_metadata()
let tags = {} let tags = {}
for entries in values(metadata) for entries in values(metadata)
@ -288,13 +292,13 @@ function! vimwiki#tags#get_tags() "{{{
endfor endfor
endfor endfor
return keys(tags) return keys(tags)
endfunction " }}} endfunction
" vimwiki#tags#generate_tags
" Similar to vimwiki#base#generate_links. In the current buffer, appends " Similar to vimwiki#base#generate_links. In the current buffer, appends
" tags and references to all their instances. If no arguments (tags) are " tags and references to all their instances. If no arguments (tags) are
" specified, outputs all tags. " specified, outputs all tags.
function! vimwiki#tags#generate_tags(...) abort "{{{ function! vimwiki#tags#generate_tags(...) abort
let need_all_tags = (a:0 == 0) let need_all_tags = (a:0 == 0)
let specific_tags = a:000 let specific_tags = a:000
@ -313,8 +317,7 @@ function! vimwiki#tags#generate_tags(...) abort "{{{
endfor endfor
let lines = [] let lines = []
let bullet = repeat(' ', vimwiki#lst#get_list_margin()). let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' '
\ vimwiki#lst#default_symbol().' '
for tagname in sort(keys(tags_entries)) for tagname in sort(keys(tags_entries))
if need_all_tags || index(specific_tags, tagname) != -1 if need_all_tags || index(specific_tags, tagname) != -1
call extend(lines, [ call extend(lines, [
@ -322,8 +325,8 @@ function! vimwiki#tags#generate_tags(...) abort "{{{
\ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', tagname, ''), \ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', tagname, ''),
\ '' ]) \ '' ])
for taglink in sort(tags_entries[tagname]) for taglink in sort(tags_entries[tagname])
call add(lines, bullet . call add(lines, bullet . substitute(vimwiki#vars#get_global('WikiLinkTemplate1'),
\ substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', taglink, '')) \ '__LinkUrl__', taglink, ''))
endfor endfor
endif endif
endfor endfor
@ -332,15 +335,14 @@ function! vimwiki#tags#generate_tags(...) abort "{{{
\ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' \ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' '
\ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)' \ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)'
call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, line('$')+1, 1)
\ line('$')+1, 1) endfunction
endfunction " }}}
" vimwiki#tags#complete_tags
function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort " {{{ function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort
" We can safely ignore args if we use -custom=complete option, Vim engine " We can safely ignore args if we use -custom=complete option, Vim engine
" will do the job of filtering. " will do the job of filtering.
let taglist = vimwiki#tags#get_tags() let taglist = vimwiki#tags#get_tags()
return join(taglist, "\n") return join(taglist, "\n")
endfunction " }}} endfunction

View File

@ -1,28 +1,29 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
" Desc: Tables " Description: Tables
" | Easily | manageable | text | tables | ! | " | Easily | manageable | text | tables | ! |
" |--------|------------|-------|--------|---------| " |--------|------------|-------|--------|---------|
" | Have | fun! | Drink | tea | Period. | " | Have | fun! | Drink | tea | Period. |
" "
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" Load only once {{{
if exists("g:loaded_vimwiki_tbl_auto") || &cp if exists("g:loaded_vimwiki_tbl_auto") || &cp
finish finish
endif endif
let g:loaded_vimwiki_tbl_auto = 1 let g:loaded_vimwiki_tbl_auto = 1
"}}}
let s:textwidth = &tw let s:textwidth = &tw
" Misc functions {{{ function! s:rxSep()
function! s:rxSep() "{{{
return vimwiki#vars#get_syntaxlocal('rxTableSep') return vimwiki#vars#get_syntaxlocal('rxTableSep')
endfunction "}}} endfunction
function! s:wide_len(str) "{{{
function! s:wide_len(str)
" vim73 has new function that gives correct string width. " vim73 has new function that gives correct string width.
if exists("*strdisplaywidth") if exists("*strdisplaywidth")
return strdisplaywidth(a:str) return strdisplaywidth(a:str)
@ -42,42 +43,49 @@ function! s:wide_len(str) "{{{
let &modified = savemodified let &modified = savemodified
endif endif
return ret return ret
endfunction "}}} endfunction
function! s:cell_splitter() "{{{
function! s:cell_splitter()
return '\s*'.s:rxSep().'\s*' return '\s*'.s:rxSep().'\s*'
endfunction "}}} endfunction
function! s:sep_splitter() "{{{
function! s:sep_splitter()
return '-'.s:rxSep().'-' return '-'.s:rxSep().'-'
endfunction "}}} endfunction
function! s:is_table(line) "{{{
return s:is_separator(a:line) || (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$')
endfunction "}}}
function! s:is_separator(line) "{{{ function! s:is_table(line)
return s:is_separator(a:line) ||
\ (a:line !~# s:rxSep().s:rxSep() && a:line =~# '^\s*'.s:rxSep().'.\+'.s:rxSep().'\s*$')
endfunction
function! s:is_separator(line)
return a:line =~# '^\s*'.s:rxSep().'\(--\+'.s:rxSep().'\)\+\s*$' return a:line =~# '^\s*'.s:rxSep().'\(--\+'.s:rxSep().'\)\+\s*$'
endfunction "}}} endfunction
function! s:is_separator_tail(line) "{{{
function! s:is_separator_tail(line)
return a:line =~# '^\{-1}\%(\s*\|-*\)\%('.s:rxSep().'-\+\)\+'.s:rxSep().'\s*$' return a:line =~# '^\{-1}\%(\s*\|-*\)\%('.s:rxSep().'-\+\)\+'.s:rxSep().'\s*$'
endfunction "}}} endfunction
function! s:is_last_column(lnum, cnum) "{{{
function! s:is_last_column(lnum, cnum)
let line = strpart(getline(a:lnum), a:cnum - 1) let line = strpart(getline(a:lnum), a:cnum - 1)
"echomsg "DEBUG is_last_column> ".(line =~# s:rxSep().'\s*$' && line !~# s:rxSep().'.*'.s:rxSep().'\s*$')
return line =~# s:rxSep().'\s*$' && line !~# s:rxSep().'.*'.s:rxSep().'\s*$' return line =~# s:rxSep().'\s*$' && line !~# s:rxSep().'.*'.s:rxSep().'\s*$'
endfunction
endfunction "}}}
function! s:is_first_column(lnum, cnum) "{{{ function! s:is_first_column(lnum, cnum)
let line = strpart(getline(a:lnum), 0, a:cnum - 1) let line = strpart(getline(a:lnum), 0, a:cnum - 1)
"echomsg "DEBUG is_first_column> ".(line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep()) return line =~# '^\s*$' ||
return line =~# '^\s*$' || (line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep()) \ (line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep())
endfunction "}}} endfunction
function! s:count_separators_up(lnum) "{{{
function! s:count_separators_up(lnum)
let lnum = a:lnum - 1 let lnum = a:lnum - 1
while lnum > 1 while lnum > 1
if !s:is_separator(getline(lnum)) if !s:is_separator(getline(lnum))
@ -87,9 +95,10 @@ function! s:count_separators_up(lnum) "{{{
endwhile endwhile
return (a:lnum-lnum) return (a:lnum-lnum)
endfunction "}}} endfunction
function! s:count_separators_down(lnum) "{{{
function! s:count_separators_down(lnum)
let lnum = a:lnum + 1 let lnum = a:lnum + 1
while lnum < line('$') while lnum < line('$')
if !s:is_separator(getline(lnum)) if !s:is_separator(getline(lnum))
@ -99,9 +108,10 @@ function! s:count_separators_down(lnum) "{{{
endwhile endwhile
return (lnum-a:lnum) return (lnum-a:lnum)
endfunction "}}} endfunction
function! s:create_empty_row(cols) "{{{
function! s:create_empty_row(cols)
let row = s:rxSep() let row = s:rxSep()
let cell = " ".s:rxSep() let cell = " ".s:rxSep()
@ -110,9 +120,10 @@ function! s:create_empty_row(cols) "{{{
endfor endfor
return row return row
endfunction "}}} endfunction
function! s:create_row_sep(cols) "{{{
function! s:create_row_sep(cols)
let row = s:rxSep() let row = s:rxSep()
let cell = "---".s:rxSep() let cell = "---".s:rxSep()
@ -121,9 +132,10 @@ function! s:create_row_sep(cols) "{{{
endfor endfor
return row return row
endfunction "}}} endfunction
function! vimwiki#tbl#get_cells(line) "{{{
function! vimwiki#tbl#get_cells(line)
let result = [] let result = []
let cell = '' let cell = ''
let quote = '' let quote = ''
@ -174,13 +186,15 @@ function! vimwiki#tbl#get_cells(line) "{{{
call add(result, vimwiki#u#trim(cell.quote, '|')) call add(result, vimwiki#u#trim(cell.quote, '|'))
endif endif
return result return result
endfunction "}}} endfunction
function! s:col_count(lnum) "{{{
function! s:col_count(lnum)
return len(vimwiki#tbl#get_cells(getline(a:lnum))) return len(vimwiki#tbl#get_cells(getline(a:lnum)))
endfunction "}}} endfunction
function! s:get_indent(lnum) "{{{
function! s:get_indent(lnum)
if !s:is_table(getline(a:lnum)) if !s:is_table(getline(a:lnum))
return return
endif endif
@ -198,9 +212,10 @@ function! s:get_indent(lnum) "{{{
endwhile endwhile
return indent return indent
endfunction " }}} endfunction
function! s:get_rows(lnum) "{{{
function! s:get_rows(lnum)
if !s:is_table(getline(a:lnum)) if !s:is_table(getline(a:lnum))
return return
endif endif
@ -232,9 +247,10 @@ function! s:get_rows(lnum) "{{{
endwhile endwhile
return upper_rows + lower_rows return upper_rows + lower_rows
endfunction "}}} endfunction
function! s:get_cell_max_lens(lnum, ...) "{{{
function! s:get_cell_max_lens(lnum, ...)
let max_lens = {} let max_lens = {}
for [lnum, row] in s:get_rows(a:lnum) for [lnum, row] in s:get_rows(a:lnum)
if s:is_separator(row) if s:is_separator(row)
@ -251,9 +267,10 @@ function! s:get_cell_max_lens(lnum, ...) "{{{
endfor endfor
endfor endfor
return max_lens return max_lens
endfunction "}}} endfunction
function! s:get_aligned_rows(lnum, col1, col2) "{{{
function! s:get_aligned_rows(lnum, col1, col2)
let rows = s:get_rows(a:lnum) let rows = s:get_rows(a:lnum)
let startlnum = rows[0][0] let startlnum = rows[0][0]
let cells = [] let cells = []
@ -271,10 +288,11 @@ function! s:get_aligned_rows(lnum, col1, col2) "{{{
call add(result, [lnum, new_row]) call add(result, [lnum, new_row])
endfor endfor
return result return result
endfunction "}}} endfunction
" Number of the current column. Starts from 0. " Number of the current column. Starts from 0.
function! s:cur_column() "{{{ function! s:cur_column()
let line = getline('.') let line = getline('.')
if !s:is_table(line) if !s:is_table(line)
return -1 return -1
@ -291,12 +309,10 @@ function! s:cur_column() "{{{
endif endif
endwhile endwhile
return col return col
endfunction "}}} endfunction
" }}}
" Format functions {{{ function! s:fmt_cell(cell, max_len)
function! s:fmt_cell(cell, max_len) "{{{
let cell = ' '.a:cell.' ' let cell = ' '.a:cell.' '
let diff = a:max_len - s:wide_len(a:cell) let diff = a:max_len - s:wide_len(a:cell)
@ -306,9 +322,10 @@ function! s:fmt_cell(cell, max_len) "{{{
let cell .= repeat(' ', diff) let cell .= repeat(' ', diff)
return cell return cell
endfunction "}}} endfunction
function! s:fmt_row(cells, max_lens, col1, col2) "{{{
function! s:fmt_row(cells, max_lens, col1, col2)
let new_line = s:rxSep() let new_line = s:rxSep()
for idx in range(len(a:cells)) for idx in range(len(a:cells))
if idx == a:col1 if idx == a:col1
@ -326,17 +343,19 @@ function! s:fmt_row(cells, max_lens, col1, col2) "{{{
let idx += 1 let idx += 1
endwhile endwhile
return new_line return new_line
endfunction "}}} endfunction
function! s:fmt_cell_sep(max_len) "{{{
function! s:fmt_cell_sep(max_len)
if a:max_len == 0 if a:max_len == 0
return repeat('-', 3) return repeat('-', 3)
else else
return repeat('-', a:max_len+2) return repeat('-', a:max_len+2)
endif endif
endfunction "}}} endfunction
function! s:fmt_sep(max_lens, col1, col2) "{{{
function! s:fmt_sep(max_lens, col1, col2)
let new_line = s:rxSep() let new_line = s:rxSep()
for idx in range(len(a:max_lens)) for idx in range(len(a:max_lens))
if idx == a:col1 if idx == a:col1
@ -347,11 +366,10 @@ function! s:fmt_sep(max_lens, col1, col2) "{{{
let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep() let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep()
endfor endfor
return new_line return new_line
endfunction "}}} endfunction
"}}}
" Keyboard functions "{{{
function! s:kbd_create_new_row(cols, goto_first) "{{{ function! s:kbd_create_new_row(cols, goto_first)
let cmd = "\<ESC>o".s:create_empty_row(a:cols) let cmd = "\<ESC>o".s:create_empty_row(a:cols)
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>" let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
let cmd .= "\<ESC>0" let cmd .= "\<ESC>0"
@ -364,26 +382,29 @@ function! s:kbd_create_new_row(cols, goto_first) "{{{
let cmd .= "a" let cmd .= "a"
return cmd return cmd
endfunction "}}} endfunction
function! s:kbd_goto_next_row() "{{{
function! s:kbd_goto_next_row()
let cmd = "\<ESC>j" let cmd = "\<ESC>j"
let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>" let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>"
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>" let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>"
let cmd .= "a" let cmd .= "a"
return cmd return cmd
endfunction "}}} endfunction
function! s:kbd_goto_prev_row() "{{{
function! s:kbd_goto_prev_row()
let cmd = "\<ESC>k" let cmd = "\<ESC>k"
let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>" let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>"
let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>" let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>"
let cmd .= "a" let cmd .= "a"
return cmd return cmd
endfunction "}}} endfunction
" Used in s:kbd_goto_next_col " Used in s:kbd_goto_next_col
function! vimwiki#tbl#goto_next_col() "{{{ function! vimwiki#tbl#goto_next_col()
let curcol = virtcol('.') let curcol = virtcol('.')
let lnum = line('.') let lnum = line('.')
let newcol = s:get_indent(lnum) let newcol = s:get_indent(lnum)
@ -396,9 +417,10 @@ function! vimwiki#tbl#goto_next_col() "{{{
endfor endfor
let newcol += 2 " +2 == 1 separator + 1 space |<space let newcol += 2 " +2 == 1 separator + 1 space |<space
call vimwiki#u#cursor(lnum, newcol) call vimwiki#u#cursor(lnum, newcol)
endfunction "}}} endfunction
function! s:kbd_goto_next_col(jumpdown) "{{{
function! s:kbd_goto_next_col(jumpdown)
let cmd = "\<ESC>" let cmd = "\<ESC>"
if a:jumpdown if a:jumpdown
let seps = s:count_separators_down(line('.')) let seps = s:count_separators_down(line('.'))
@ -406,10 +428,11 @@ function! s:kbd_goto_next_col(jumpdown) "{{{
endif endif
let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a" let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a"
return cmd return cmd
endfunction "}}} endfunction
" Used in s:kbd_goto_prev_col " Used in s:kbd_goto_prev_col
function! vimwiki#tbl#goto_prev_col() "{{{ function! vimwiki#tbl#goto_prev_col()
let curcol = virtcol('.') let curcol = virtcol('.')
let lnum = line('.') let lnum = line('.')
let newcol = s:get_indent(lnum) let newcol = s:get_indent(lnum)
@ -428,9 +451,10 @@ function! vimwiki#tbl#goto_prev_col() "{{{
endfor endfor
let newcol += 2 " +2 == 1 separator + 1 space |<space let newcol += 2 " +2 == 1 separator + 1 space |<space
call vimwiki#u#cursor(lnum, newcol) call vimwiki#u#cursor(lnum, newcol)
endfunction "}}} endfunction
function! s:kbd_goto_prev_col(jumpup) "{{{
function! s:kbd_goto_prev_col(jumpup)
let cmd = "\<ESC>" let cmd = "\<ESC>"
if a:jumpup if a:jumpup
let seps = s:count_separators_up(line('.')) let seps = s:count_separators_up(line('.'))
@ -442,12 +466,10 @@ function! s:kbd_goto_prev_col(jumpup) "{{{
" let cmd .= "a" " let cmd .= "a"
"echomsg "DEBUG kbd_goto_prev_col> ".cmd "echomsg "DEBUG kbd_goto_prev_col> ".cmd
return cmd return cmd
endfunction "}}} endfunction
"}}}
" Global functions {{{ function! vimwiki#tbl#kbd_cr()
function! vimwiki#tbl#kbd_cr() "{{{
let lnum = line('.') let lnum = line('.')
if !s:is_table(getline(lnum)) if !s:is_table(getline(lnum))
return "" return ""
@ -459,9 +481,10 @@ function! vimwiki#tbl#kbd_cr() "{{{
else else
return s:kbd_goto_next_row() return s:kbd_goto_next_row()
endif endif
endfunction "}}} endfunction
function! vimwiki#tbl#kbd_tab() "{{{
function! vimwiki#tbl#kbd_tab()
let lnum = line('.') let lnum = line('.')
if !s:is_table(getline(lnum)) if !s:is_table(getline(lnum))
return "\<Tab>" return "\<Tab>"
@ -475,9 +498,10 @@ function! vimwiki#tbl#kbd_tab() "{{{
return s:kbd_create_new_row(cols, 1) return s:kbd_create_new_row(cols, 1)
endif endif
return s:kbd_goto_next_col(is_sep || last) return s:kbd_goto_next_col(is_sep || last)
endfunction "}}} endfunction
function! vimwiki#tbl#kbd_shift_tab() "{{{
function! vimwiki#tbl#kbd_shift_tab()
let lnum = line('.') let lnum = line('.')
if !s:is_table(getline(lnum)) if !s:is_table(getline(lnum))
return "\<S-Tab>" return "\<S-Tab>"
@ -490,9 +514,10 @@ function! vimwiki#tbl#kbd_shift_tab() "{{{
return "" return ""
endif endif
return s:kbd_goto_prev_col(is_sep || first) return s:kbd_goto_prev_col(is_sep || first)
endfunction "}}} endfunction
function! vimwiki#tbl#format(lnum, ...) "{{{
function! vimwiki#tbl#format(lnum, ...)
if !(&filetype ==? 'vimwiki') if !(&filetype ==? 'vimwiki')
return return
endif endif
@ -522,9 +547,10 @@ function! vimwiki#tbl#format(lnum, ...) "{{{
endfor endfor
let &tw = s:textwidth let &tw = s:textwidth
endfunction "}}} endfunction
function! vimwiki#tbl#create(...) "{{{
function! vimwiki#tbl#create(...)
if a:0 > 1 if a:0 > 1
let cols = a:1 let cols = a:1
let rows = a:2 let rows = a:2
@ -557,17 +583,19 @@ function! vimwiki#tbl#create(...) "{{{
endfor endfor
call append(line('.'), lines) call append(line('.'), lines)
endfunction "}}} endfunction
function! vimwiki#tbl#align_or_cmd(cmd) "{{{
function! vimwiki#tbl#align_or_cmd(cmd)
if s:is_table(getline('.')) if s:is_table(getline('.'))
call vimwiki#tbl#format(line('.')) call vimwiki#tbl#format(line('.'))
else else
exe 'normal! '.a:cmd exe 'normal! '.a:cmd
endif endif
endfunction "}}} endfunction
function! vimwiki#tbl#reset_tw(lnum) "{{{
function! vimwiki#tbl#reset_tw(lnum)
if !(&filetype ==? 'vimwiki') if !(&filetype ==? 'vimwiki')
return return
endif endif
@ -578,11 +606,11 @@ function! vimwiki#tbl#reset_tw(lnum) "{{{
let s:textwidth = &tw let s:textwidth = &tw
let &tw = 0 let &tw = 0
endfunction "}}} endfunction
" TODO: move_column_left and move_column_right are good candidates to be
" refactored. " TODO: move_column_left and move_column_right are good candidates to be refactored.
function! vimwiki#tbl#move_column_left() "{{{ function! vimwiki#tbl#move_column_left()
"echomsg "DEBUG move_column_left: " "echomsg "DEBUG move_column_left: "
@ -614,10 +642,10 @@ function! vimwiki#tbl#move_column_left() "{{{
endwhile endwhile
endif endif
endfunction
endfunction "}}}
function! vimwiki#tbl#move_column_right() "{{{ function! vimwiki#tbl#move_column_right()
let line = getline('.') let line = getline('.')
@ -645,29 +673,31 @@ function! vimwiki#tbl#move_column_right() "{{{
break break
endif endif
endwhile endwhile
endif endif
endfunction
endfunction "}}}
function! vimwiki#tbl#get_rows(lnum) "{{{ function! vimwiki#tbl#get_rows(lnum)
return s:get_rows(a:lnum) return s:get_rows(a:lnum)
endfunction "}}} endfunction
function! vimwiki#tbl#is_table(line) "{{{
function! vimwiki#tbl#is_table(line)
return s:is_table(a:line) return s:is_table(a:line)
endfunction "}}} endfunction
function! vimwiki#tbl#is_separator(line) "{{{
function! vimwiki#tbl#is_separator(line)
return s:is_separator(a:line) return s:is_separator(a:line)
endfunction "}}} endfunction
function! vimwiki#tbl#cell_splitter() "{{{
function! vimwiki#tbl#cell_splitter()
return s:cell_splitter() return s:cell_splitter()
endfunction "}}} endfunction
function! vimwiki#tbl#sep_splitter() "{{{
function! vimwiki#tbl#sep_splitter()
return s:sep_splitter() return s:sep_splitter()
endfunction "}}} endfunction
"}}}

View File

@ -1,9 +1,9 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
" Desc: Utility functions " Description: Utility functions
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
function! vimwiki#u#trim(string, ...) "{{{ function! vimwiki#u#trim(string, ...)
let chars = '' let chars = ''
if a:0 > 0 if a:0 > 0
let chars = a:1 let chars = a:1
@ -11,17 +11,20 @@ function! vimwiki#u#trim(string, ...) "{{{
let res = substitute(a:string, '^[[:space:]'.chars.']\+', '', '') let res = substitute(a:string, '^[[:space:]'.chars.']\+', '', '')
let res = substitute(res, '[[:space:]'.chars.']\+$', '', '') let res = substitute(res, '[[:space:]'.chars.']\+$', '', '')
return res return res
endfunction "}}} endfunction
" Builtin cursor doesn't work right with unicode characters. " Builtin cursor doesn't work right with unicode characters.
function! vimwiki#u#cursor(lnum, cnum) "{{{ function! vimwiki#u#cursor(lnum, cnum)
exe a:lnum exe a:lnum
exe 'normal! 0'.a:cnum.'|' exe 'normal! 0'.a:cnum.'|'
endfunction "}}} endfunction
function! vimwiki#u#is_windows() "{{{
function! vimwiki#u#is_windows()
return has("win32") || has("win64") || has("win95") || has("win16") return has("win32") || has("win64") || has("win95") || has("win16")
endfunction "}}} endfunction
function! vimwiki#u#is_macos() function! vimwiki#u#is_macos()
if has("mac") || has("macunix") || has("gui_mac") if has("mac") || has("macunix") || has("gui_mac")
@ -32,27 +35,32 @@ function! vimwiki#u#is_macos()
return os == 'Darwin' || os == 'Mac' return os == 'Darwin' || os == 'Mac'
endfunction endfunction
function! vimwiki#u#count_first_sym(line) "{{{
function! vimwiki#u#count_first_sym(line)
let first_sym = matchstr(a:line, '\S') let first_sym = matchstr(a:line, '\S')
return len(matchstr(a:line, first_sym.'\+')) return len(matchstr(a:line, first_sym.'\+'))
endfunction "}}} endfunction
function! vimwiki#u#escape(string) "{{{
function! vimwiki#u#escape(string)
return escape(a:string, '~.*[]\^$') return escape(a:string, '~.*[]\^$')
endfunction "}}} endfunction
" Load concrete Wiki syntax: sets regexes and templates for headers and links " Load concrete Wiki syntax: sets regexes and templates for headers and links
function vimwiki#u#reload_regexes() "{{{ function vimwiki#u#reload_regexes()
execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim' execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim'
endfunction "}}} endfunction
" Load syntax-specific functionality " Load syntax-specific functionality
function vimwiki#u#reload_regexes_custom() "{{{ function vimwiki#u#reload_regexes_custom()
execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim' execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim'
endfunction "}}} endfunction
" Backward compatible version of the built-in function shiftwidth() " Backward compatible version of the built-in function shiftwidth()
if exists('*shiftwidth') "{{{ if exists('*shiftwidth')
func vimwiki#u#sw() func vimwiki#u#sw()
return shiftwidth() return shiftwidth()
endfunc endfunc
@ -60,7 +68,7 @@ else
func vimwiki#u#sw() func vimwiki#u#sw()
return &sw return &sw
endfunc endfunc
endif "}}} endif
function vimwiki#u#error(message) function vimwiki#u#error(message)

View File

@ -1,12 +1,33 @@
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file " Vimwiki autoload plugin file
" Desc: stuff concerning Vimwiki's state
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" copy the user's settings from variables of the form g:vimwiki_<option> into g:vimwiki_global_vars
" (or set a default value) " ------------------------------------------------------------------------------------------------
" This file provides functions to manage the various state variables which are needed during a
" Vimwiki session.
" They consist of:
"
" - global variables. These are stored in the dict g:vimwiki_global_vars. They consist mainly of
" global user variables and syntax stuff which is the same for every syntax.
"
" - wiki-local variables. They are stored in g:vimwiki_wikilocal_vars which is a list of
" dictionaries. One dict for every registered wiki. The last dictionary contains default values
" (used for temporary wikis).
"
" - syntax variables. Stored in the dict g:vimwiki_syntax_variables which holds all the regexes and
" other stuff which is needed for highlighting.
"
" - buffer-local variables. They are stored as buffer variables directly (b:foo)
" As a developer, you should, if possible, only use the get_ and set_ functions for these types of
" variables, not the underlying dicts!
" ------------------------------------------------------------------------------------------------
function! s:populate_global_variables() function! s:populate_global_variables()
let g:vimwiki_global_vars = { let g:vimwiki_global_vars = {
\ 'CJK_length': 0, \ 'CJK_length': 0,
\ 'auto_chdir': 0, \ 'auto_chdir': 0,
@ -28,7 +49,9 @@ function! s:populate_global_variables()
\ 'html_header_numbering': 0, \ 'html_header_numbering': 0,
\ 'html_header_numbering_sym': '', \ 'html_header_numbering_sym': '',
\ 'list_ignore_newline': 1, \ 'list_ignore_newline': 1,
\ 'text_ignore_newline': 1,
\ 'listsyms': ' .oOX', \ 'listsyms': ' .oOX',
\ 'listsym_rejected': '-',
\ 'map_prefix': '<Leader>w', \ 'map_prefix': '<Leader>w',
\ 'menu': 'Vimwiki', \ 'menu': 'Vimwiki',
\ 'table_auto_fmt': 1, \ 'table_auto_fmt': 1,
@ -42,6 +65,8 @@ function! s:populate_global_variables()
\ 'w32_dir_enc': '', \ 'w32_dir_enc': '',
\ } \ }
" copy the user's settings from variables of the form g:vimwiki_<option> into the dict
" g:vimwiki_global_vars (or set a default value)
for key in keys(g:vimwiki_global_vars) for key in keys(g:vimwiki_global_vars)
if exists('g:vimwiki_'.key) if exists('g:vimwiki_'.key)
let g:vimwiki_global_vars[key] = g:vimwiki_{key} let g:vimwiki_global_vars[key] = g:vimwiki_{key}
@ -50,31 +75,31 @@ function! s:populate_global_variables()
call s:validate_global_settings() call s:validate_global_settings()
" non-configurable global variables " non-configurable global variables:
" Scheme regexes should be defined even if syntax file is not loaded yet cause users should be " Scheme regexes must be defined even if syntax file is not loaded yet cause users should be
" able to <leader>w<leader>w without opening any vimwiki file first " able to <leader>w<leader>w without opening any vimwiki file first
let g:vimwiki_global_vars['schemes'] = 'wiki\d\+,diary,local' let g:vimwiki_global_vars.schemes = 'wiki\d\+,diary,local'
let g:vimwiki_global_vars['web_schemes1'] = 'http,https,file,ftp,gopher,telnet,nntp,ldap,rsync'. let g:vimwiki_global_vars.web_schemes1 = 'http,https,file,ftp,gopher,telnet,nntp,ldap,rsync'.
\ ',imap,pop,irc,ircs,cvs,svn,svn+ssh,git,ssh,fish,sftp' \ ',imap,pop,irc,ircs,cvs,svn,svn+ssh,git,ssh,fish,sftp'
let web_schemes2 = 'mailto,news,xmpp,sip,sips,doi,urn,tel' let web_schemes2 = 'mailto,news,xmpp,sip,sips,doi,urn,tel,data'
let rx_schemes = '\%('. let rx_schemes = '\%('.
\ join(split(g:vimwiki_global_vars['schemes'], '\s*,\s*'), '\|').'\|'. \ join(split(g:vimwiki_global_vars.schemes, '\s*,\s*'), '\|').'\|'.
\ join(split(g:vimwiki_global_vars['web_schemes1'], '\s*,\s*'), '\|').'\|'. \ join(split(g:vimwiki_global_vars.web_schemes1, '\s*,\s*'), '\|').'\|'.
\ join(split(web_schemes2, '\s*,\s*'), '\|'). \ join(split(web_schemes2, '\s*,\s*'), '\|').
\ '\)' \ '\)'
let g:vimwiki_global_vars['rxSchemeUrl'] = rx_schemes.':.*' let g:vimwiki_global_vars.rxSchemeUrl = rx_schemes.':.*'
let g:vimwiki_global_vars['rxSchemeUrlMatchScheme'] = '\zs'.rx_schemes.'\ze:.*' let g:vimwiki_global_vars.rxSchemeUrlMatchScheme = '\zs'.rx_schemes.'\ze:.*'
let g:vimwiki_global_vars['rxSchemeUrlMatchUrl'] = rx_schemes.':\zs.*\ze' let g:vimwiki_global_vars.rxSchemeUrlMatchUrl = rx_schemes.':\zs.*\ze'
" match URL for common protocols; see http://en.wikipedia.org/wiki/URI_scheme " match URL for common protocols; see http://en.wikipedia.org/wiki/URI_scheme
" http://tools.ietf.org/html/rfc3986 " http://tools.ietf.org/html/rfc3986
let rxWebProtocols = let rxWebProtocols =
\ '\%('. \ '\%('.
\ '\%('. \ '\%('.
\ '\%('.join(split(g:vimwiki_global_vars['web_schemes1'], '\s*,\s*'), '\|').'\):'. \ '\%('.join(split(g:vimwiki_global_vars.web_schemes1, '\s*,\s*'), '\|').'\):'.
\ '\%(//\)'. \ '\%(//\)'.
\ '\)'. \ '\)'.
\ '\|'. \ '\|'.
@ -107,20 +132,20 @@ function! s:populate_global_variables()
" non-Ascii characters " non-Ascii characters
let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]\+' let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]\+'
let g:vimwiki_global_vars.rx_wikilink_prefix1 = g:vimwiki_global_vars.rx_wikilink_prefix . g:vimwiki_global_vars.rxWikiLinkUrl . let g:vimwiki_global_vars.rx_wikilink_prefix1 = g:vimwiki_global_vars.rx_wikilink_prefix .
\ g:vimwiki_global_vars.rx_wikilink_separator \ g:vimwiki_global_vars.rxWikiLinkUrl . g:vimwiki_global_vars.rx_wikilink_separator
let g:vimwiki_global_vars.rx_wikilink_suffix1 = g:vimwiki_global_vars.rx_wikilink_suffix let g:vimwiki_global_vars.rx_wikilink_suffix1 = g:vimwiki_global_vars.rx_wikilink_suffix
let g:vimwiki_global_vars.rxWikiInclPrefix = '{{' let g:vimwiki_global_vars.rxWikiInclPrefix = '{{'
let g:vimwiki_global_vars.rxWikiInclSuffix = '}}' let g:vimwiki_global_vars.rxWikiInclSuffix = '}}'
let g:vimwiki_global_vars.rxWikiInclSeparator = '|' let g:vimwiki_global_vars.rxWikiInclSeparator = '|'
" '{{__LinkUrl__}}' " '{{__LinkUrl__}}'
let g:vimwiki_global_vars.WikiInclTemplate1 = g:vimwiki_global_vars.rxWikiInclPrefix . '__LinkUrl__'. let g:vimwiki_global_vars.WikiInclTemplate1 = g:vimwiki_global_vars.rxWikiInclPrefix
\ g:vimwiki_global_vars.rxWikiInclSuffix \ .'__LinkUrl__'. g:vimwiki_global_vars.rxWikiInclSuffix
" '{{__LinkUrl____LinkDescription__}}' " '{{__LinkUrl____LinkDescription__}}'
let g:vimwiki_global_vars.WikiInclTemplate2 = g:vimwiki_global_vars.rxWikiInclPrefix . '__LinkUrl__'. let g:vimwiki_global_vars.WikiInclTemplate2 = g:vimwiki_global_vars.rxWikiInclPrefix
\ '__LinkDescription__'. \ . '__LinkUrl__' . g:vimwiki_global_vars.rxWikiInclSeparator . '__LinkDescription__'
\ g:vimwiki_global_vars.rxWikiInclSuffix \ . g:vimwiki_global_vars.rxWikiInclSuffix
let valid_chars = '[^\\\}]' let valid_chars = '[^\\\}]'
let g:vimwiki_global_vars.rxWikiInclUrl = valid_chars.'\{-}' let g:vimwiki_global_vars.rxWikiInclUrl = valid_chars.'\{-}'
@ -143,14 +168,18 @@ function! s:populate_global_variables()
let g:vimwiki_global_vars.rxWikiInclSuffix1 = g:vimwiki_global_vars.rxWikiInclArgs. let g:vimwiki_global_vars.rxWikiInclSuffix1 = g:vimwiki_global_vars.rxWikiInclArgs.
\ g:vimwiki_global_vars.rxWikiInclSuffix \ g:vimwiki_global_vars.rxWikiInclSuffix
let g:vimwiki_global_vars.rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)' let g:vimwiki_global_vars.rxTodo = '\C\<\%(TODO\|DONE\|STARTED\|FIXME\|FIXED\|XXX\)\>'
" default colors when headers of different levels are highlighted differently " default colors when headers of different levels are highlighted differently
" not making it yet another option; needed by ColorScheme autocommand " not making it yet another option; needed by ColorScheme autocommand
let g:vimwiki_global_vars.hcolor_guifg_light = ['#aa5858', '#507030', '#1030a0', '#103040', '#505050', '#636363'] let g:vimwiki_global_vars.hcolor_guifg_light = ['#aa5858', '#507030', '#1030a0', '#103040'
let g:vimwiki_global_vars.hcolor_ctermfg_light = ['DarkRed', 'DarkGreen', 'DarkBlue', 'Black', 'Black', 'Black'] \ , '#505050', '#636363']
let g:vimwiki_global_vars.hcolor_guifg_dark = ['#e08090', '#80e090', '#6090e0', '#c0c0f0', '#e0e0f0', '#f0f0f0'] let g:vimwiki_global_vars.hcolor_ctermfg_light = ['DarkRed', 'DarkGreen', 'DarkBlue', 'Black'
let g:vimwiki_global_vars.hcolor_ctermfg_dark = ['Red', 'Green', 'Blue', 'White', 'White', 'White'] \ , 'Black', 'Black']
let g:vimwiki_global_vars.hcolor_guifg_dark = ['#e08090', '#80e090', '#6090e0', '#c0c0f0'
\ , '#e0e0f0', '#f0f0f0']
let g:vimwiki_global_vars.hcolor_ctermfg_dark = ['Red', 'Green', 'Blue', 'White', 'White'
\ , 'White']
endfunction endfunction
@ -185,6 +214,7 @@ function! s:populate_wikilocal_options()
\ 'automatic_nested_syntaxes': 1, \ 'automatic_nested_syntaxes': 1,
\ 'css_name': 'style.css', \ 'css_name': 'style.css',
\ 'custom_wiki2html': '', \ 'custom_wiki2html': '',
\ 'custom_wiki2html_args': '',
\ 'diary_header': 'Diary', \ 'diary_header': 'Diary',
\ 'diary_index': 'diary', \ 'diary_index': 'diary',
\ 'diary_rel_path': 'diary/', \ 'diary_rel_path': 'diary/',
@ -204,12 +234,22 @@ function! s:populate_wikilocal_options()
let g:vimwiki_wikilocal_vars = [] let g:vimwiki_wikilocal_vars = []
let default_wiki_settings = {}
for key in keys(default_values)
if exists('g:vimwiki_'.key)
let default_wiki_settings[key] = g:vimwiki_{key}
else
let default_wiki_settings[key] = default_values[key]
endif
endfor
" set the wiki-local variables according to g:vimwiki_list (or the default settings)
if exists('g:vimwiki_list') if exists('g:vimwiki_list')
for users_options in g:vimwiki_list for users_wiki_settings in g:vimwiki_list
let new_wiki_settings = {} let new_wiki_settings = {}
for key in keys(default_values) for key in keys(default_values)
if has_key(users_options, key) if has_key(users_wiki_settings, key)
let new_wiki_settings[key] = users_options[key] let new_wiki_settings[key] = users_wiki_settings[key]
elseif exists('g:vimwiki_'.key) elseif exists('g:vimwiki_'.key)
let new_wiki_settings[key] = g:vimwiki_{key} let new_wiki_settings[key] = g:vimwiki_{key}
else else
@ -217,24 +257,21 @@ function! s:populate_wikilocal_options()
endif endif
endfor endfor
" is it a temporary wiki? No, it's not. let new_wiki_settings.is_temporary_wiki = 0
let new_wiki_settings.temp = 0
call add(g:vimwiki_wikilocal_vars, new_wiki_settings) call add(g:vimwiki_wikilocal_vars, new_wiki_settings)
endfor endfor
else
" if the user hasn't registered any wiki, we register one wiki using the default values
let new_wiki_settings = deepcopy(default_wiki_settings)
let new_wiki_settings.is_temporary_wiki = 0
call add(g:vimwiki_wikilocal_vars, new_wiki_settings)
endif endif
" default values for temporary wikis " default values for temporary wikis
let temporary_options_dict = {} let temporary_wiki_settings = deepcopy(default_wiki_settings)
for key in keys(default_values) let temporary_wiki_settings.is_temporary_wiki = 1
if exists('g:vimwiki_'.key) call add(g:vimwiki_wikilocal_vars, temporary_wiki_settings)
let temporary_options_dict[key] = g:vimwiki_{key}
else
let temporary_options_dict[key] = default_values[key]
endif
endfor
let temporary_options_dict.temp = 1
call add(g:vimwiki_wikilocal_vars, temporary_options_dict)
call s:validate_wikilocal_settings() call s:validate_wikilocal_settings()
endfunction endfunction
@ -263,14 +300,28 @@ function! s:validate_wikilocal_settings()
endfunction endfunction
function! s:normalize_path(path)
" trim trailing / and \ because otherwise resolve() doesn't work quite right
let path = substitute(a:path, '[/\\]\+$', '', '')
if path !~# '^scp:'
return resolve(expand(path)).'/'
else
return path.'/'
endif
endfunction
function! vimwiki#vars#populate_syntax_vars(syntax) function! vimwiki#vars#populate_syntax_vars(syntax)
if !exists('g:vimwiki_syntax_variables') if !exists('g:vimwiki_syntax_variables')
let g:vimwiki_syntax_variables = {} let g:vimwiki_syntax_variables = {}
endif endif
if !has_key(g:vimwiki_syntax_variables, a:syntax)
let g:vimwiki_syntax_variables[a:syntax] = {} if has_key(g:vimwiki_syntax_variables, a:syntax)
return
endif endif
let g:vimwiki_syntax_variables[a:syntax] = {}
execute 'runtime! syntax/vimwiki_'.a:syntax.'.vim' execute 'runtime! syntax/vimwiki_'.a:syntax.'.vim'
" generic stuff " generic stuff
@ -278,33 +329,53 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
if g:vimwiki_syntax_variables[a:syntax].symH if g:vimwiki_syntax_variables[a:syntax].symH
" symmetric headers " symmetric headers
for i in range(1,6) for i in range(1,6)
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Template'] = repeat(header_symbol, i).' __Header__ '.repeat(header_symbol, i) let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Template'] =
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i] = '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'.header_symbol.'\{'.i.'}\s*$' \ repeat(header_symbol, i).' __Header__ '.repeat(header_symbol, i)
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Start'] = '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'.header_symbol.'\{'.i.'}\s*$' let g:vimwiki_syntax_variables[a:syntax]['rxH'.i] =
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_End'] = '^\s*'.header_symbol.'\{1,'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'.header_symbol.'\{1,'.i.'}\s*$' \ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'
\ .header_symbol.'\{'.i.'}\s*$'
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Start'] =
\ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'
\ .header_symbol.'\{'.i.'}\s*$'
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_End'] =
\ '^\s*'.header_symbol.'\{1,'.i.'}[^'.header_symbol.'].*[^'.header_symbol.']'
\ .header_symbol.'\{1,'.i.'}\s*$'
endfor endfor
let g:vimwiki_syntax_variables[a:syntax].rxHeader = '^\s*\('.header_symbol.'\{1,6}\)\zs[^'.header_symbol.'].*[^'.header_symbol.']\ze\1\s*$' let g:vimwiki_syntax_variables[a:syntax].rxHeader =
\ '^\s*\('.header_symbol.'\{1,6}\)\zs[^'.header_symbol.'].*[^'.header_symbol.']\ze\1\s*$'
else else
" asymmetric " asymmetric
for i in range(1,6) for i in range(1,6)
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Template'] = repeat(header_symbol, i).' __Header__' let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Template'] =
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i] = '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*$' \ repeat(header_symbol, i).' __Header__'
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Start'] = '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*$' let g:vimwiki_syntax_variables[a:syntax]['rxH'.i] =
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_End'] = '^\s*'.header_symbol.'\{1,'.i.'}[^'.header_symbol.'].*$' \ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*$'
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_Start'] =
\ '^\s*'.header_symbol.'\{'.i.'}[^'.header_symbol.'].*$'
let g:vimwiki_syntax_variables[a:syntax]['rxH'.i.'_End'] =
\ '^\s*'.header_symbol.'\{1,'.i.'}[^'.header_symbol.'].*$'
endfor endfor
let g:vimwiki_syntax_variables[a:syntax].rxHeader = '^\s*\('.header_symbol.'\{1,6}\)\zs[^'.header_symbol.'].*\ze$' let g:vimwiki_syntax_variables[a:syntax].rxHeader =
\ '^\s*\('.header_symbol.'\{1,6}\)\zs[^'.header_symbol.'].*\ze$'
endif endif
let g:vimwiki_syntax_variables[a:syntax].rxPreStart = '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxPreStart let g:vimwiki_syntax_variables[a:syntax].rxPreStart =
let g:vimwiki_syntax_variables[a:syntax].rxPreEnd = '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxPreEnd.'\s*$' \ '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxPreStart
let g:vimwiki_syntax_variables[a:syntax].rxPreEnd =
\ '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxPreEnd.'\s*$'
let g:vimwiki_syntax_variables[a:syntax].rxMathStart = '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxMathStart let g:vimwiki_syntax_variables[a:syntax].rxMathStart =
let g:vimwiki_syntax_variables[a:syntax].rxMathEnd = '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxMathEnd.'\s*$' \ '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxMathStart
let g:vimwiki_syntax_variables[a:syntax].rxMathEnd =
\ '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxMathEnd.'\s*$'
" list stuff " list stuff
let g:vimwiki_syntax_variables[a:syntax].rx_bullet_chars = '['.join(g:vimwiki_syntax_variables[a:syntax].bullet_types, '').']\+' let g:vimwiki_syntax_variables[a:syntax].rx_bullet_chars =
\ '['.join(g:vimwiki_syntax_variables[a:syntax].bullet_types, '').']\+'
let g:vimwiki_syntax_variables[a:syntax].multiple_bullet_chars = g:vimwiki_syntax_variables[a:syntax].recurring_bullets ? g:vimwiki_syntax_variables[a:syntax].bullet_types : [] let g:vimwiki_syntax_variables[a:syntax].multiple_bullet_chars =
\ g:vimwiki_syntax_variables[a:syntax].recurring_bullets
\ ? g:vimwiki_syntax_variables[a:syntax].bullet_types : []
let g:vimwiki_syntax_variables[a:syntax].number_kinds = [] let g:vimwiki_syntax_variables[a:syntax].number_kinds = []
let g:vimwiki_syntax_variables[a:syntax].number_divisors = '' let g:vimwiki_syntax_variables[a:syntax].number_divisors = ''
@ -318,8 +389,10 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
"create regexp for bulleted list items "create regexp for bulleted list items
if !empty(g:vimwiki_syntax_variables[a:syntax].bullet_types) if !empty(g:vimwiki_syntax_variables[a:syntax].bullet_types)
let g:vimwiki_syntax_variables[a:syntax].rxListBullet = join( map(g:vimwiki_syntax_variables[a:syntax].bullet_types, let g:vimwiki_syntax_variables[a:syntax].rxListBullet =
\'vimwiki#u#escape(v:val).repeat("\\+", g:vimwiki_syntax_variables[a:syntax].recurring_bullets)' \ join( map(g:vimwiki_syntax_variables[a:syntax].bullet_types,
\'vimwiki#u#escape(v:val).'
\ .'repeat("\\+", g:vimwiki_syntax_variables[a:syntax].recurring_bullets)'
\ ) , '\|') \ ) , '\|')
else else
"regex that matches nothing "regex that matches nothing
@ -333,7 +406,8 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
let g:vimwiki_syntax_variables[a:syntax].rxListNumber .= char_to_rx[type[0]] . let g:vimwiki_syntax_variables[a:syntax].rxListNumber .= char_to_rx[type[0]] .
\ vimwiki#u#escape(type[1]) . '\|' \ vimwiki#u#escape(type[1]) . '\|'
endfor endfor
let g:vimwiki_syntax_variables[a:syntax].rxListNumber .= char_to_rx[g:vimwiki_syntax_variables[a:syntax].number_types[-1][0]]. let g:vimwiki_syntax_variables[a:syntax].rxListNumber .=
\ char_to_rx[g:vimwiki_syntax_variables[a:syntax].number_types[-1][0]].
\ vimwiki#u#escape(g:vimwiki_syntax_variables[a:syntax].number_types[-1][1]) . '\)' \ vimwiki#u#escape(g:vimwiki_syntax_variables[a:syntax].number_types[-1][1]) . '\)'
else else
"regex that matches nothing "regex that matches nothing
@ -341,21 +415,43 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
endif endif
"the user can set the listsyms as string, but vimwiki needs a list "the user can set the listsyms as string, but vimwiki needs a list
let g:vimwiki_syntax_variables[a:syntax].listsyms_list = split(vimwiki#vars#get_global('listsyms'), '\zs') let g:vimwiki_syntax_variables[a:syntax].listsyms_list =
let g:vimwiki_syntax_variables[a:syntax].rxListItemWithoutCB = '^\s*\%(\('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\)\|\('.g:vimwiki_syntax_variables[a:syntax].rxListNumber.'\)\)\s' \ split(vimwiki#vars#get_global('listsyms'), '\zs')
let g:vimwiki_syntax_variables[a:syntax].rxListItem = g:vimwiki_syntax_variables[a:syntax].rxListItemWithoutCB . '\+\%(\[\(['.vimwiki#vars#get_global('listsyms').']\)\]\s\)\?' if match(vimwiki#vars#get_global('listsyms'), vimwiki#vars#get_global('listsym_rejected')) != -1
echomsg 'Vimwiki Warning: the value of g:vimwiki_listsym_rejected ('''
\ . vimwiki#vars#get_global('listsym_rejected')
\ . ''') must not be a part of g:vimwiki_listsyms (''' .
\ . vimwiki#vars#get_global('listsyms') . ''')'
endif
let g:vimwiki_syntax_variables[a:syntax].rxListItemWithoutCB =
\ '^\s*\%(\('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\)\|\('
\ .g:vimwiki_syntax_variables[a:syntax].rxListNumber.'\)\)\s'
let g:vimwiki_syntax_variables[a:syntax].rxListItem =
\ g:vimwiki_syntax_variables[a:syntax].rxListItemWithoutCB
\ . '\+\%(\[\(['.vimwiki#vars#get_global('listsyms')
\ . vimwiki#vars#get_global('listsym_rejected').']\)\]\s\)\?'
if g:vimwiki_syntax_variables[a:syntax].recurring_bullets if g:vimwiki_syntax_variables[a:syntax].recurring_bullets
let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren = '^\('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\)\s\+\['.g:vimwiki_syntax_variables[a:syntax].listsyms_list[4].'\]\s.*\%(\n\%(\1\%('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\).*\|^$\|\s.*\)\)*' let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren =
\ '^\('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\)\s\+\[['
\ . g:vimwiki_syntax_variables[a:syntax].listsyms_list[-1]
\ . vimwiki#vars#get_global('listsym_rejected') . ']\]\s.*\%(\n\%(\1\%('
\ .g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\).*\|^$\|\s.*\)\)*'
else else
let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren = '^\(\s*\)\%('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\|'.g:vimwiki_syntax_variables[a:syntax].rxListNumber.'\)\s\+\['.g:vimwiki_syntax_variables[a:syntax].listsyms_list[4].'\]\s.*\%(\n\%(\1\s.*\|^$\)\)*' let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren =
\ '^\(\s*\)\%('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\|'
\ . g:vimwiki_syntax_variables[a:syntax].rxListNumber.'\)\s\+\[['
\ . g:vimwiki_syntax_variables[a:syntax].listsyms_list[-1]
\ . vimwiki#vars#get_global('listsym_rejected') . ']\]\s.*\%(\n\%(\1\s.*\|^$\)\)*'
endif endif
" 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L)) " 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L))
" let g:vimwiki_rxWeblink = '[\["(|]\@<!'. g:vimwiki_rxWeblinkUrl . " let g:vimwiki_rxWeblink = '[\["(|]\@<!'. g:vimwiki_rxWeblinkUrl .
" \ '\%([),:;.!?]\=\%([ \t]\|$\)\)\@=' " \ '\%([),:;.!?]\=\%([ \t]\|$\)\)\@='
let g:vimwiki_syntax_variables[a:syntax].rxWeblink = '\<'. g:vimwiki_global_vars.rxWeblinkUrl . '\S*' let g:vimwiki_syntax_variables[a:syntax].rxWeblink =
\ '\<'. g:vimwiki_global_vars.rxWeblinkUrl . '\S*'
" 0a) match URL within URL " 0a) match URL within URL
let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchUrl = g:vimwiki_syntax_variables[a:syntax].rxWeblink let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchUrl =
\ g:vimwiki_syntax_variables[a:syntax].rxWeblink
" 0b) match DESCRIPTION within URL " 0b) match DESCRIPTION within URL
let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchDescr = '' let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchDescr = ''
@ -375,16 +471,20 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
let g:vimwiki_syntax_variables[a:syntax].rxWikiLink = g:vimwiki_global_vars.rx_wikilink_prefix. let g:vimwiki_syntax_variables[a:syntax].rxWikiLink = g:vimwiki_global_vars.rx_wikilink_prefix.
\ g:vimwiki_global_vars.rxWikiLinkUrl.'\%('.g:vimwiki_global_vars.rx_wikilink_separator. \ g:vimwiki_global_vars.rxWikiLinkUrl.'\%('.g:vimwiki_global_vars.rx_wikilink_separator.
\ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix \ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix
let g:vimwiki_syntax_variables[a:syntax].rxAnyLink = g:vimwiki_syntax_variables[a:syntax].rxWikiLink.'\|'. let g:vimwiki_syntax_variables[a:syntax].rxAnyLink =
\ g:vimwiki_syntax_variables[a:syntax].rxWikiLink.'\|'.
\ g:vimwiki_global_vars.rxWikiIncl.'\|'.g:vimwiki_syntax_variables[a:syntax].rxWeblink \ g:vimwiki_global_vars.rxWikiIncl.'\|'.g:vimwiki_syntax_variables[a:syntax].rxWeblink
" b) match URL within [[URL|DESCRIPTION]] " b) match URL within [[URL|DESCRIPTION]]
let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchUrl = g:vimwiki_global_vars.rx_wikilink_prefix. let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchUrl =
\ '\zs'. g:vimwiki_global_vars.rxWikiLinkUrl.'\ze\%('. g:vimwiki_global_vars.rx_wikilink_separator. \ g:vimwiki_global_vars.rx_wikilink_prefix . '\zs'. g:vimwiki_global_vars.rxWikiLinkUrl
\ g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix \ .'\ze\%('. g:vimwiki_global_vars.rx_wikilink_separator
\ . g:vimwiki_global_vars.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix
" c) match DESCRIPTION within [[URL|DESCRIPTION]] " c) match DESCRIPTION within [[URL|DESCRIPTION]]
let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchDescr = g:vimwiki_global_vars.rx_wikilink_prefix. let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchDescr =
\ g:vimwiki_global_vars.rxWikiLinkUrl . g:vimwiki_global_vars.rx_wikilink_separator.'\%('. \ g:vimwiki_global_vars.rx_wikilink_prefix . g:vimwiki_global_vars.rxWikiLinkUrl
\ '\zs'. g:vimwiki_global_vars.rxWikiLinkDescr. '\ze\)\?'. g:vimwiki_global_vars.rx_wikilink_suffix \ . g:vimwiki_global_vars.rx_wikilink_separator.'\%(\zs'
\ . g:vimwiki_global_vars.rxWikiLinkDescr. '\ze\)\?'
\ . g:vimwiki_global_vars.rx_wikilink_suffix
if a:syntax ==# 'markdown' if a:syntax ==# 'markdown'
call s:populate_extra_markdown_vars() call s:populate_extra_markdown_vars()
@ -530,9 +630,10 @@ function! s:populate_extra_markdown_vars()
let mkd_syntax.rxMkdRef = '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)'. let mkd_syntax.rxMkdRef = '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)'.
\ mkd_syntax.rxWeblink0 \ mkd_syntax.rxWeblink0
let mkd_syntax.rxMkdRefMatchDescr = '\[\zs'.g:vimwiki_global_vars.rxWikiLinkDescr.'\ze]:\%(\s\+\|\n\)'. let mkd_syntax.rxMkdRefMatchDescr =
\ mkd_syntax.rxWeblink0 \ '\[\zs'.g:vimwiki_global_vars.rxWikiLinkDescr.'\ze]:\%(\s\+\|\n\)'. mkd_syntax.rxWeblink0
let mkd_syntax.rxMkdRefMatchUrl = '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)\zs'. let mkd_syntax.rxMkdRefMatchUrl =
\ '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)\zs'.
\ mkd_syntax.rxWeblink0.'\ze' \ mkd_syntax.rxWeblink0.'\ze'
endfunction endfunction
@ -580,8 +681,6 @@ function! vimwiki#vars#get_bufferlocal(key, ...)
\ vimwiki#base#get_wiki_directories(vimwiki#vars#get_bufferlocal('wiki_nr'))) \ vimwiki#base#get_wiki_directories(vimwiki#vars#get_bufferlocal('wiki_nr')))
elseif a:key ==# 'prev_link' elseif a:key ==# 'prev_link'
call setbufvar(buffer, 'vimwiki_prev_link', []) call setbufvar(buffer, 'vimwiki_prev_link', [])
elseif a:key ==# 'fs_rescan'
call setbufvar(buffer, 'vimwiki_fs_rescan', 0)
elseif a:key ==# 'markdown_refs' elseif a:key ==# 'markdown_refs'
call setbufvar(buffer, 'vimwiki_markdown_refs', vimwiki#markdown_base#scan_reflinks()) call setbufvar(buffer, 'vimwiki_markdown_refs', vimwiki#markdown_base#scan_reflinks())
else else
@ -636,7 +735,9 @@ function! vimwiki#vars#add_temporary_wiki(settings)
call s:validate_wikilocal_settings() call s:validate_wikilocal_settings()
endfunction endfunction
" number of registered wikis + temporary " number of registered wikis + temporary
function! vimwiki#vars#number_of_wikis() function! vimwiki#vars#number_of_wikis()
return len(g:vimwiki_wikilocal_vars) - 1 return len(g:vimwiki_wikilocal_vars) - 1
endfunction endfunction

View File

@ -213,6 +213,22 @@ See also |:VimwikiTabMakeDiaryNote|
< <
See also |:VimwikiMakeYesterdayDiaryNote| See also |:VimwikiMakeYesterdayDiaryNote|
[count]<Leader>w<Leader>m or <Plug>VimwikiMakeTomorrowDiaryNote
Open diary wiki-file for tomorrow of the [count]'s wiki.
<Leader>w<Leader>m opens diary wiki-file for tomorrow in the first
wiki from |g:vimwiki_list|.
1<Leader>w<Leader>m as above opens diary wiki-file for tomorrow in
the first wiki from |g:vimwiki_list|.
2<Leader>w<Leader>m opens diary wiki-file for tomorrow in the second
wiki from |g:vimwiki_list|.
3<Leader>w<Leader>m opens diary wiki-file for tomorrow in the third
wiki from |g:vimwiki_list|.
etc.
To remap: >
:nmap <Leader>dm <Plug>VimwikiMakeTomorrowDiaryNote
<
See also |:VimwikiMakeTomorrowDiaryNote|
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
3.2. Local mappings 3.2. Local mappings
@ -222,7 +238,7 @@ To remap one of these keys, either put it in your .vimrc like this >
or, the better way, put it in a file .vim/ftplugin/vimwiki.vim like this > or, the better way, put it in a file .vim/ftplugin/vimwiki.vim like this >
:nmap <silent><buffer> <Leader>wc <Plug>Vimwiki2HTML :nmap <silent><buffer> <Leader>wc <Plug>Vimwiki2HTML
The latter has the advantage that the mapping is local to viwiki buffers in The latter has the advantage that the mapping is local to Vimwiki buffers in
every case. every case.
Also note that some keys work in normal mode as well as in visual mode. If you Also note that some keys work in normal mode as well as in visual mode. If you
@ -324,6 +340,34 @@ NORMAL MODE *vimwiki-local-mappings*
- Remove header level. - Remove header level.
To remap: > To remap: >
:nmap -- <Plug>VimwikiRemoveHeaderLevel :nmap -- <Plug>VimwikiRemoveHeaderLevel
<
*vimwiki_[[*
[[ Go to the previous header in the buffer.
To remap: >
:nmap <- <Plug>VimwikiGoToPrevHeader
<
*vimwiki_]]*
]] Go to the next header in the buffer.
To remap: >
:nmap -> <Plug>VimwikiGoToNextHeader
<
*vimwiki_[=*
[= Go to the previous header which has the same level as
the header the cursor is currently under.
To remap: >
:nmap <= <Plug>VimwikiGoToPrevSiblingHeader
<
*vimwiki_]=*
]= Go to the next header which has the same level as the
header the cursor is currently under.
To remap: >
:nmap => <Plug>VimwikiGoToNextSiblingHeader
<
*vimwiki_]u* *vimwiki_[u*
]u [u Go one level up -- that is, to the parent header of
the header the cursor is currently under.
To remap: >
:nmap -^ <Plug>VimwikiGoToParentHeader
< <
*vimwiki_+* *vimwiki_+*
+ Create and/or decorate links. Depending on the + Create and/or decorate links. Depending on the
@ -351,6 +395,16 @@ gL<Space> Remove checkboxes from all sibling list items.
:map <Leader><Space> <Plug>VimwikiRemoveSingleCB :map <Leader><Space> <Plug>VimwikiRemoveSingleCB
:map <Leader><Space> <Plug>VimwikiRemoveCBInList :map <Leader><Space> <Plug>VimwikiRemoveCBInList
< <
*vimwiki_gln* *vimwiki_glp*
gln Increase the "done" status of a list checkbox, i.e.
from [ ] to [.] to [o] etc. See |vimwiki-todo-lists|.
glp Decrease the "done" status.
To remap: >
:nmap <M-+> <Plug>VimwikiIncrementListItem
:vmap <M-+> <Plug>VimwikiIncrementListItem
:nmap <M--> <Plug>VimwikiDecrementListItem
:vmap <M--> <Plug>VimwikiDecrementListItem
*vimwiki_gll* *vimwiki_gLl* *vimwiki_gll* *vimwiki_gLl*
gll Increase the level of a list item. gll Increase the level of a list item.
gLl Increase the level of a list item and all child items. gLl Increase the level of a list item and all child items.
@ -363,7 +417,7 @@ glh Decrease the level of a list item.
gLh Decrease the level of a list item and all child items. gLh Decrease the level of a list item and all child items.
To remap: > To remap: >
:map << <Plug>VimwikiDecreaseLvlSingleItem :map << <Plug>VimwikiDecreaseLvlSingleItem
:map >>> <Plug>VimwikiDecreaseLvlWholeItem :map <<< <Plug>VimwikiDecreaseLvlWholeItem
< <
*vimwiki_glr* *vimwiki_gLr* *vimwiki_glr* *vimwiki_gLr*
glr Renumber list items if the cursor is on a numbered glr Renumber list items if the cursor is on a numbered
@ -445,6 +499,13 @@ gLI Change the symbol of the current list to
To remap: > To remap: >
noremap glo :VimwikiChangeSymbolTo I)<CR> noremap glo :VimwikiChangeSymbolTo I)<CR>
noremap glO :VimwikiChangeSymbolInListTo I)<CR> noremap glO :VimwikiChangeSymbolInListTo I)<CR>
<
*vimwiki_glx*
glx Toggle checkbox of a list item disabled/off.
Maps to |:VimwikiToggleRejectedListItem|.
See |vimwiki-todo-lists|.
To remap: >
:map <Leader>tx <Plug>VimwikiToggleRejectedListItem
< <
*vimwiki_gqq* *vimwiki_gww* *vimwiki_gqq* *vimwiki_gww*
gqq Format table. If you made some changes to a table gqq Format table. If you made some changes to a table
@ -547,12 +608,22 @@ INSERT MODE *vimwiki-list-mappings*
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
3.3. Text objects *vimwiki-text-objects* 3.3. Text objects *vimwiki-text-objects*
ah A section segment (the area between two consecutive ah A header including its content up to the next header.
headings) including trailing empty lines. ih The content under a header (like 'ah', but excluding
ih A section segment without trailing empty lines. the header itself and trailing empty lines).
You can type 'vah' to select a section segment with its contents or 'dah' to aH A header including all of its subheaders. When [count]
delete it or 'yah' to yank it or 'cah' to change it. is 2, include the parent header, when [count] is 3,
the grandparent and so on.
iH Like 'aH', but excluding the header itself and
trailing empty lines.
Examples:
- type 'cih' to change the content under the current header
- 'daH' deletes an entire header plus its content including the content of all
of its subheaders
- 'v2aH' selects the parent header of the header the cursor is under plus all
of the content of all of its subheaders
a\ A cell in a table. a\ A cell in a table.
i\ An inner cell in a table. i\ An inner cell in a table.
@ -590,10 +661,15 @@ il A single list item.
*:VimwikiMakeYesterdayDiaryNote* *:VimwikiMakeYesterdayDiaryNote*
Open diary wiki-file for yesterday of the current wiki. Open diary wiki-file for yesterday of the current wiki.
*:VimwikiMakeTomorrowDiaryNote*
Open diary wiki-file for tomorrow of the current wiki.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
4.2. Local commands *vimwiki-local-commands* 4.2. Local commands *vimwiki-local-commands*
These commands are only available (and meaningful) when you are currently in a
Vimwiki file.
*:VimwikiFollowLink* *:VimwikiFollowLink*
Follow wiki link (or create target wiki page if needed). Follow wiki link (or create target wiki page if needed).
@ -643,6 +719,10 @@ il A single list item.
Toggle checkbox of a list item on/off. Toggle checkbox of a list item on/off.
See |vimwiki-todo-lists|. See |vimwiki-todo-lists|.
*:VimwikiToggleRejectedListItem*
Toggle checkbox of a list item disabled/off.
See |vimwiki-todo-lists|.
*:VimwikiListChangeLevel* CMD *:VimwikiListChangeLevel* CMD
Change the nesting level, or symbol, for a single-line list item. Change the nesting level, or symbol, for a single-line list item.
CMD may be ">>" or "<<" to change the indentation of the item, or CMD may be ">>" or "<<" to change the indentation of the item, or
@ -739,8 +819,38 @@ il A single list item.
*:VimwikiGenerateTags* tagname1 tagname2 ... *:VimwikiGenerateTags* tagname1 tagname2 ...
Creates or updates an overview on all tags of the wiki with links to all Creates or updates an overview on all tags of the wiki with links to all
their instances. Supports |cmdline-completion|. If their instances. Supports |cmdline-completion|. If no arguments (tags)
no arguments (tags) are specified, outputs all tags. are specified, outputs all tags. To make this command work properly, make
sure the tags have been built (see |vimwiki-build-tags|).
------------------------------------------------------------------------------
4.3. Functions *vimwiki-functions*
Functions to interact with Vimwiki. (It's intended that most commands will be
replaced with corresponding function calls in the future.)
Warning: this is currently unstable and likely to change.
To map them to a key, use >
nnoremap <C-K> :call vimwiki#base#function_name(arg1, arg2)<CR>
<
*vimwiki-follow_link*
vimwiki#base#follow_link({split}, {reuse}, {move_cursor})
Open the link under the cursor. {split} can have the following values:
'nosplit' open the link in the current window
'vsplit' open in a vertically split window
'hsplit' open in a horizontally split window
'tab' open in a new tab
If {reuse} is 1 and {split} one of 'vsplit' or 'hsplit', open the link in
a possibly existing split window instead of making a new split.
If {move_cursor} is 1 the cursor moves to the window or tab with the
opened link, otherwise, it stays in the window or tab with the link.
For example, <CR> is per default mapped to
vimwiki#base#follow_link('nosplit', 0, 1)
============================================================================== ==============================================================================
@ -814,7 +924,7 @@ which opens up a popup menu with all the wiki files starting with "ind".
When |vimwiki-option-maxhi| equals 1, a distinct highlighting style is used to When |vimwiki-option-maxhi| equals 1, a distinct highlighting style is used to
identify wikilinks whose targets are not found. identify wikilinks whose targets are not found.
Interwiki:~ Interwiki~
If you maintain more than one wiki, you can create interwiki links between If you maintain more than one wiki, you can create interwiki links between
them by adding a numbered prefix "wikiX:" in front of a link: > them by adding a numbered prefix "wikiX:" in front of a link: >
@ -825,15 +935,11 @@ or: >
The number behind "wiki" is in the range 0..N-1 and identifies the destination The number behind "wiki" is in the range 0..N-1 and identifies the destination
wiki in |g:vimwiki_list|. wiki in |g:vimwiki_list|.
Diary:~ Diary~
The "diary:" scheme is used to concisely link to diary entries: > The "diary:" scheme is used to link to diary entries: >
[[diary:2012-03-05]] [[diary:2012-03-05]]
This scheme precludes explicit inclusion of |vimwiki-option-diary_rel_path|,
and is most useful on subwiki pages to avoid links such as: >
[[../../diary/2012-03-05]]
Anchors~ Anchors~
A wikilink, interwiki link or diary link can be followed by a '#' and the name A wikilink, interwiki link or diary link can be followed by a '#' and the name
@ -854,7 +960,7 @@ Raw URLs are also supported: >
External files~ External files~
The "file:" and "local:" schemes allow you to directly link to arbitray The "file:" and "local:" schemes allow you to directly link to arbitrary
resources using absolute or relative paths: > resources using absolute or relative paths: >
[[file:/home/somebody/a/b/c/music.mp3]] [[file:/home/somebody/a/b/c/music.mp3]]
[[file:C:/Users/somebody/d/e/f/music.mp3]] [[file:C:/Users/somebody/d/e/f/music.mp3]]
@ -1144,7 +1250,8 @@ This might be useful for coloring program code with external JS tools
such as Google's syntax highlighter. such as Google's syntax highlighter.
You can setup Vimwiki to highlight code snippets in preformatted text. You can setup Vimwiki to highlight code snippets in preformatted text.
See |vimwiki-option-nested_syntaxes| See |vimwiki-option-nested_syntaxes| and
|vimwiki-option-automatic_nested_syntaxes|.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -1189,14 +1296,9 @@ LaTeX code).
Note: the highlighting in Vim is automatic. For the rendering in HTML, you Note: the highlighting in Vim is automatic. For the rendering in HTML, you
have two alternative options: have two alternative options:
1. using the MathJax server for rendering (needs internet connection). 1. installing MathJax locally (Recommended: faster, no internet required).
Add to your HTML template the following line: Choose a folder on your hard drive and save MathJax in it. Then add to your
HTML template the following line:
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
2. installing MathJax locally (faster, no internet required). Choose a
folder on your hard drive and save MathJax in it. Then add to your HTML
template the following line:
<script type="text/javascript" src="<mathjax_folder>/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/javascript" src="<mathjax_folder>/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
@ -1211,6 +1313,11 @@ template folder. For instance, a sensible folder structure could be:
In this case, <mathjax_folder> would be "../mathjax" (without quotes). In this case, <mathjax_folder> would be "../mathjax" (without quotes).
2. Loading MathJax from a CDN-server (needs internet connection).
Add to your HTML template the following line:
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/config/TeX-AMS-MML_HTMLorMML.js"></script>
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
5.9. Blockquotes *vimwiki-syntax-blockquotes* 5.9. Blockquotes *vimwiki-syntax-blockquotes*
@ -1264,8 +1371,9 @@ which opens up a popup menu with all tags defined in the wiki starting with
Tags are also treated as |vimwiki-anchors| (similar to bold text). Tags are also treated as |vimwiki-anchors| (similar to bold text).
Note that tag search/jump/completion commands need certain metadata saved in *vimwiki-build-tags*
the wiki folder. This metadata file can be manually updated by running Note that the tag search/jump/completion commands need certain metadata saved
in the wiki folder. This metadata file can be manually updated by running
|:VimwikiRebuildTags|. When the option |vimwiki-option-auto_tags| is enabled, |:VimwikiRebuildTags|. When the option |vimwiki-option-auto_tags| is enabled,
the tags metadata will be auto-updated on each page save. the tags metadata will be auto-updated on each page save.
@ -1281,40 +1389,50 @@ Tags-related commands and options:
6. Folding/Outline *vimwiki-folding* 6. Folding/Outline *vimwiki-folding*
Vimwiki can fold or outline sections using headers and preformatted blocks. Vimwiki can fold or outline sections using headers and preformatted blocks.
Alternatively, one can fold list subitems instead. Alternatively, one can fold list subitems instead. Folding is not enabled
by default, and requires the |g:vimwiki_folding| variable to be set.
Example for list folding with |g:vimwiki_folding| set to 'list':
Example for list folding:
= My current task = = My current task =
* [ ] Do stuff 1 * [ ] Do stuff 1
* [ ] Do substuff 1.1 * [ ] Do substuff 1.1
* [ ] Do substuff 1.2 * [ ] Do substuff 1.2
* [ ] Do substuff 1.2.1 * [ ] Do substuff 1.2.1
* [ ] Do substuff 1.2.2 * [ ] Do substuff 1.2.2
* [ ] Do substuff 1.3 * [ ] Do substuff 1.3
* [ ] Do stuff 2 * [ ] Do stuff 2
* [ ] Do stuff 3 * [ ] Do stuff 3
Hit |zM| : Hit |zM| :
= My current task = [8] --------------------------------------~ = My current task =
* [ ] Do stuff 1 [6] --------------------------------------~
* [ ] Do stuff 2
* [ ] Do stuff 3
Hit |zr| : Hit |zr| :
= My current task =~ = My current task =
* [ ] Do stuff 1 [5] --------------------------------------~ * [ ] Do stuff 1
* [ ] Do stuff 2~ * [ ] Do substuff 1.1
* [ ] Do stuff 3~ * [ ] Do substuff 1.2 [3] -------------------------------~
* [ ] Do substuff 1.3
* [ ] Do stuff 2
* [ ] Do stuff 3
Hit |zr| one more time: Hit |zr| one more time :
= My current task =~ = My current task =
* [ ] Do stuff 1~ * [ ] Do stuff 1
* [ ] Do substuff 1.1~ * [ ] Do substuff 1.1
* [ ] Do substuff 1.2 [2] -------------------------------~ * [ ] Do substuff 1.2
* [ ] Do substuff 1.3~ * [ ] Do substuff 1.2.1
* [ ] Do stuff 2~ * [ ] Do substuff 1.2.2
* [ ] Do stuff 3~ * [ ] Do substuff 1.3
* [ ] Do stuff 2
* [ ] Do stuff 3
Note: If you use the default Vimwiki syntax, folding on list items will work Note: If you use the default Vimwiki syntax, folding on list items will work
properly only if all of them are indented using the current 'shiftwidth'. properly only if all of them are indented using the current 'shiftwidth'.
For MediaWiki, * or # should be in the first column. For MediaWiki syntax, * or # should be in the first column.
To turn folding on/off check |g:vimwiki_folding|. To turn folding on/off check |g:vimwiki_folding|.
@ -1354,6 +1472,18 @@ into it.
See |vimwiki-option-template_path| for details. See |vimwiki-option-template_path| for details.
------------------------------------------------------------------------------
%date *vimwiki-date*
The date of the wiki page. The value can be used in the HTML template, see
|vimwiki-option-template_path| for details.
%date 2017-07-08
%date
If you omit the date after the placeholder, the date of the HTML conversion is
used.
============================================================================== ==============================================================================
8. Lists *vimwiki-lists* 8. Lists *vimwiki-lists*
@ -1489,7 +1619,7 @@ See |vimwiki_glstar|, |vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl-|,
|vimwiki_gl1|, |vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, |vimwiki_glI| |vimwiki_gl1|, |vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, |vimwiki_glI|
Use glr and gLr, if the numbers of a numbered list are mixed up. See Use glr and gLr if the numbers of a numbered list are mixed up. See
|vimwiki_glr| and |vimwiki_gLr|. |vimwiki_glr| and |vimwiki_gLr|.
@ -1542,6 +1672,9 @@ child items (see also |g:vimwiki_listsyms|): >
[O] -- 67-99% [O] -- 67-99%
[X] -- 100% [X] -- 100%
You can use |vimwiki_gln| and |vimwiki_glp| to change the "done" status of a
checkbox without a childitem.
It is possible to toggle several list items using visual mode. But note that It is possible to toggle several list items using visual mode. But note that
instead of toggling every item individually, all items get checked if the instead of toggling every item individually, all items get checked if the
first item is unchecked and all items get unchecked if the first item is first item is unchecked and all items get unchecked if the first item is
@ -1551,6 +1684,9 @@ Use gl<Space> (see |vimwiki_gl<Space>|) to remove a single checkbox and
gL<Space> (see |vimwiki_gL<Space>|) to remove all checkboxes of the list the gL<Space> (see |vimwiki_gL<Space>|) to remove all checkboxes of the list the
cursor is in. cursor is in.
You can mark an item as rejected ("won't do") with
|vimwiki_glx|. A rejected item will not influence the status of its parents.
============================================================================== ==============================================================================
9. Tables *vimwiki-tables* 9. Tables *vimwiki-tables*
@ -1905,11 +2041,13 @@ Each template could look like: >
<div class="content"> <div class="content">
%content% %content%
</div> </div>
<p><small>Page created on %date%</small></p>
</body> </body>
</html> </html>
where where
%title% is replaced by a wiki page name or by a |vimwiki-title| %title% is replaced by a wiki page name or by a |vimwiki-title|
%date% is replaced with the current date or by |vimwiki-date|
%root_path% is replaced by a count of ../ for pages buried in subdirs: %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 if you have wikilink [[dir1/dir2/dir3/my page in a subdir]] then
%root_path% is replaced by '../../../'. %root_path% is replaced by '../../../'.
@ -2030,7 +2168,9 @@ Just write your preformatted text in your file like this >
my preformatted text my preformatted text
}}} }}}
where xxx is a Vim filetype. where xxx is a filetype which is known to Vim. For example, for C++
highlighting, use "cpp" (not "c++"). For a list of known filetypes, type
":setf " and hit Ctrl+d.
Note that you may have to reload the file (|:edit|) to see the highlight. Note that you may have to reload the file (|:edit|) to see the highlight.
@ -2100,8 +2240,12 @@ The following arguments, in this order, are passed to the script:
10. root_path : a count of ../ for pages buried in subdirs 10. root_path : a count of ../ for pages buried in subdirs
For example, if you have wikilink [[dir1/dir2/dir3/my page in a subdir]] For example, if you have wikilink [[dir1/dir2/dir3/my page in a subdir]]
then this argument is '../../../'. then this argument is '../../../'.
11. custom_args : custom arguments that will be passed to the conversion
(can be defined in g:vimwiki_list as 'custom_wiki2html_args' parameter,
see |vimwiki-option-custom_wiki2html_args|)
script.
Options 7-10 are experimental and may change in the future. If any of these Options 7-11 are experimental and may change in the future. If any of these
parameters is empty, a hyphen "-" is passed to the script in its place. parameters is empty, a hyphen "-" is passed to the script in its place.
For an example and further instructions, refer to the following script: For an example and further instructions, refer to the following script:
@ -2114,6 +2258,17 @@ be located at https://github.com/vimwiki-backup/vimwiki/issues/384
To use the internal wiki2html converter, use an empty string (the default). To use the internal wiki2html converter, use an empty string (the default).
vimwiki-option-custom_wiki2html_args
-----------------------------------------------------------------------------
Key Default value~
custom_wiki2html_args ''
Description
If a custom script is called with |vimwiki-option-custom_wiki2html|, additional
parameters can be passed by setting them using 'custom_wiki2html_args' in
|g:vimwiki_list|.
*vimwiki-option-list_margin* *vimwiki-option-list_margin*
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Key Default value~ Key Default value~
@ -2245,17 +2400,30 @@ Default: 'Vimwiki'
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*g:vimwiki_listsyms* *g:vimwiki_listsyms*
String of 5 symbols to show the progression of todo list items. String of at least two symbols to show the progression of todo list items.
Default value is ' .oOX'. Default value is ' .oOX'.
The first char is for 0% done items. The first char is for 0% done items.
The fifth is for 100% done items. The last is for 100% done items.
You can set it to some more fancy symbols like this: You can set it to some more fancy symbols like this:
> >
let g:vimwiki_listsyms = '✗○◐●✓' let g:vimwiki_listsyms = '✗○◐●✓'
------------------------------------------------------------------------------
*g:vimwiki_listsym_rejected*
Character that is used to show that an item of a todo list will not be done.
Default value is '-'.
The character used here must not be part of |g:vimwiki_listsyms|.
You can set it to a more fancy symbol like this:
>
let g:vimwiki_listsym_rejected = '✗'
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*g:vimwiki_use_mouse* *g:vimwiki_use_mouse*
@ -2279,6 +2447,8 @@ Value Description~
'expr' Folding based on expression (folds sections and code blocks) 'expr' Folding based on expression (folds sections and code blocks)
'syntax' Folding based on syntax (folds sections; slower than 'expr') 'syntax' Folding based on syntax (folds sections; slower than 'expr')
'list' Folding based on expression (folds list subitems; much slower) 'list' Folding based on expression (folds list subitems; much slower)
'custom' Leave the folding settings as they are (e.g. set by another
plugin)
Default: '' Default: ''
@ -2288,6 +2458,8 @@ Limitations:
- 'list' is intended to work with lists nicely indented with 'shiftwidth'. - 'list' is intended to work with lists nicely indented with 'shiftwidth'.
- 'syntax' is only available for the default syntax so far. - 'syntax' is only available for the default syntax so far.
The options above can be suffixed with ':quick' (e.g.: 'expr:quick') in order
to use some workarounds to make folds work faster.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*g:vimwiki_list_ignore_newline* *g:vimwiki_list_ignore_newline*
@ -2302,6 +2474,19 @@ Value Description~
Default: 1 Default: 1
------------------------------------------------------------------------------
*g:vimwiki_text_ignore_newline*
This is HTML related.
Convert newlines to <br />s in text.
Value Description~
0 Newlines in text are converted to <br />s.
1 Ignore newlines.
Default: 1
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*g:vimwiki_use_calendar* *g:vimwiki_use_calendar*
@ -2604,8 +2789,12 @@ Default: 2
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*g:vimwiki_autowriteall* *g:vimwiki_autowriteall*
In Vim 'autowriteall' is a global setting. With g:vimwiki_autowriteall Vimwiki Automatically save a modified wiki buffer when switching wiki pages. Has the
makes it local to its buffers. same effect like setting the Vim option 'autowriteall', but it works for wiki
files only, while the Vim option is global.
Hint: if you're just annoyed that you have to save files manually to switch
wiki pages, consider setting the Vim option 'hidden' which makes that modified
files don't need to be saved.
Value Description~ Value Description~
0 autowriteall is off 0 autowriteall is off
@ -2750,6 +2939,19 @@ Contributors and their Github usernames in roughly chronological order:
- @wangzq - @wangzq
- Jinzhou Zhang (@lotabout) - Jinzhou Zhang (@lotabout)
- Michael Riley (@optik-aper) - Michael Riley (@optik-aper)
- Irfan Sharif (@irfansharif)
- John Conroy (@jconroy77)
- Christian Rondeau (@christianrondeau)
- Alex Thorne (@thornecc)
- Shafqat Bhuiyan (@priomsrb)
- Bradley Cicenas (@bcicen)
- Michael Thessel (@MichaelThessel)
- Michael F. Schönitzer (@nudin)
- @sqlwwx
- Guilherme Salazar (@salazar)
- Daniel Trnka (@trnila)
- Yuchen Pei (@ycpei)
- @maqiv
============================================================================== ==============================================================================
@ -2997,10 +3199,11 @@ http://code.google.com/p/vimwiki/issues/list
============================================================================== ==============================================================================
16. License *vimwiki-license* 16. License *vimwiki-license*
The MIT Licence The MIT License
http://www.opensource.org/licenses/mit-license.php http://www.opensource.org/licenses/mit-license.php
Copyright (c) 2008-2010 Maxim Kim Copyright (c) 2008-2010 Maxim Kim
2013-2017 Daniel Schemala
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,4 +1,4 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki filetype plugin file " Vimwiki filetype plugin file
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
@ -8,15 +8,6 @@ endif
let b:did_ftplugin = 1 " Don't load another plugin for this buffer 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 ".
\ "suffixesadd< isfname< formatlistpat< ".
\ "formatoptions< foldtext< ".
\ "foldmethod< foldexpr< commentstring< "
" UNDO }}}
" MISC STUFF {{{
setlocal commentstring=%%%s setlocal commentstring=%%%s
@ -24,16 +15,14 @@ if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel")
let &l:conceallevel = vimwiki#vars#get_global('conceallevel') let &l:conceallevel = vimwiki#vars#get_global('conceallevel')
endif endif
" GOTO FILE: gf {{{ " This is for GOTO FILE: gf
execute 'setlocal suffixesadd='.vimwiki#vars#get_wikilocal('ext') execute 'setlocal suffixesadd='.vimwiki#vars#get_wikilocal('ext')
setlocal isfname-=[,] setlocal isfname-=[,]
" gf}}}
exe "setlocal tags+=" . escape(vimwiki#path#to_string(vimwiki#tags#metadata_file_path()), ' \|"') exe "setlocal tags+=" . escape(vimwiki#path#to_string(vimwiki#tags#metadata_file_path()), ' \|"')
" MISC }}}
" COMPLETION {{{
function! Complete_wikifiles(findstart, base) function! Complete_wikifiles(findstart, base)
if a:findstart == 1 if a:findstart == 1
let column = col('.')-2 let column = col('.')-2
@ -59,7 +48,7 @@ function! Complete_wikifiles(findstart, base)
return -1 return -1
else else
" Completion works for wikilinks/anchors, and for tags. s:line_content " Completion works for wikilinks/anchors, and for tags. s:line_content
" tells us, which string came before a:base. There seems to be no easier " tells us which string came before a:base. There seems to be no easier
" solution, because calling col('.') here returns garbage. " solution, because calling col('.') here returns garbage.
if s:line_context == '' if s:line_context == ''
return [] return []
@ -129,9 +118,9 @@ function! Complete_wikifiles(findstart, base)
endfunction endfunction
setlocal omnifunc=Complete_wikifiles setlocal omnifunc=Complete_wikifiles
" COMPLETION }}}
" LIST STUFF {{{
" settings necessary for the automatic formatting of lists " settings necessary for the automatic formatting of lists
setlocal autoindent setlocal autoindent
setlocal nosmartindent setlocal nosmartindent
@ -143,7 +132,6 @@ setlocal formatoptions-=o
setlocal formatoptions-=2 setlocal formatoptions-=2
setlocal formatoptions+=n setlocal formatoptions+=n
"Create 'formatlistpat'
let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem') let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem')
if !empty(&langmap) if !empty(&langmap)
@ -159,17 +147,18 @@ if !empty(&langmap)
endif endif
endif endif
" LIST STUFF }}}
" FOLDING {{{
" Folding list items {{{ " ------------------------------------------------
function! VimwikiFoldListLevel(lnum) "{{{ " Folding stuff
" ------------------------------------------------
function! VimwikiFoldListLevel(lnum)
return vimwiki#lst#fold_level(a:lnum) return vimwiki#lst#fold_level(a:lnum)
endfunction "}}} endfunction
" Folding list items }}}
" Folding sections and code blocks {{{
function! VimwikiFoldLevel(lnum) "{{{ function! VimwikiFoldLevel(lnum)
let line = getline(a:lnum) let line = getline(a:lnum)
" Header/section folding... " Header/section folding...
@ -183,26 +172,29 @@ function! VimwikiFoldLevel(lnum) "{{{
else else
return "=" return "="
endif endif
endfunction
endfunction "}}}
" Constants used by VimwikiFoldText {{{ " Constants used by VimwikiFoldText
" use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space " use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space
let s:ellipsis = (&enc ==? 'utf-8') ? "\u2026" : "..." let s:ellipsis = (&enc ==? 'utf-8') ? "\u2026" : "..."
let s:ell_len = strlen(s:ellipsis) let s:ell_len = strlen(s:ellipsis)
let s:newline = (&enc ==? 'utf-8') ? "\u21b2 " : " " let s:newline = (&enc ==? 'utf-8') ? "\u21b2 " : " "
let s:tolerance = 5 let s:tolerance = 5
" }}}
function! s:shorten_text_simple(text, len) "{{{ unused
" unused
function! s:shorten_text_simple(text, len)
let spare_len = a:len - len(a:text) let spare_len = a:len - len(a:text)
return (spare_len>=0) ? [a:text,spare_len] : [a:text[0:a:len].s:ellipsis, -1] return (spare_len>=0) ? [a:text,spare_len] : [a:text[0:a:len].s:ellipsis, -1]
endfunction "}}} endfunction
" s:shorten_text(text, len) = [string, spare] with "spare" = len-strlen(string) " s:shorten_text(text, len) = [string, spare] with "spare" = len-strlen(string)
" for long enough "text", the string's length is within s:tolerance of "len" " for long enough "text", the string's length is within s:tolerance of "len"
" (so that -s:tolerance <= spare <= s:tolerance, "string" ends with s:ellipsis) " (so that -s:tolerance <= spare <= s:tolerance, "string" ends with s:ellipsis)
function! s:shorten_text(text, len) "{{{ returns [string, spare] function! s:shorten_text(text, len)
" returns [string, spare]
" strlen() returns lenght in bytes, not in characters, so we'll have to do a " strlen() returns lenght in bytes, not in characters, so we'll have to do a
" trick here -- replace all non-spaces with dot, calculate lengths and " trick here -- replace all non-spaces with dot, calculate lengths and
" indexes on it, then use original string to break at selected index. " indexes on it, then use original string to break at selected index.
@ -215,11 +207,11 @@ function! s:shorten_text(text, len) "{{{ returns [string, spare]
let newlen = a:len - s:ell_len let newlen = a:len - s:ell_len
let idx = strridx(text_pattern, ' ', newlen + s:tolerance) let idx = strridx(text_pattern, ' ', newlen + s:tolerance)
let break_idx = (idx + s:tolerance >= newlen) ? idx : newlen let break_idx = (idx + s:tolerance >= newlen) ? idx : newlen
return [matchstr(a:text, '\m^.\{'.break_idx.'\}').s:ellipsis, return [matchstr(a:text, '\m^.\{'.break_idx.'\}').s:ellipsis, newlen - break_idx]
\ newlen - break_idx] endfunction
endfunction "}}}
function! VimwikiFoldText() "{{{
function! VimwikiFoldText()
let line = getline(v:foldstart) let line = getline(v:foldstart)
let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '') let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '')
let fold_len = v:foldend - v:foldstart + 1 let fold_len = v:foldend - v:foldstart + 1
@ -239,18 +231,21 @@ function! VimwikiFoldText() "{{{
endif endif
return main_text.len_text.content_text return main_text.len_text.content_text
endif endif
endfunction "}}} endfunction
" Folding sections and code blocks }}}
" FOLDING }}}
" COMMANDS {{{
" ------------------------------------------------
" Commands
" ------------------------------------------------
command! -buffer Vimwiki2HTML command! -buffer Vimwiki2HTML
\ if filewritable(expand('%')) | silent noautocmd w | endif \ if filewritable(expand('%')) | silent noautocmd w | endif
\ <bar> \ <bar>
\ let res = vimwiki#html#Wiki2HTML(vimwiki#vars#get_wikilocal('path_html'), vimwiki#path#current_file()) \ let res = vimwiki#html#Wiki2HTML(vimwiki#vars#get_wikilocal('path_html'), vimwiki#path#current_file())
\ <bar> \ <bar>
\ if res != '' | echo 'Vimwiki: HTML conversion is done, output: ' . vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path_html')) | endif \ if res != '' | echo 'Vimwiki: HTML conversion is done, output: '
\ . vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path_html')) | endif
command! -buffer Vimwiki2HTMLBrowse command! -buffer Vimwiki2HTMLBrowse
\ if filewritable(expand('%')) | silent noautocmd w | endif \ if filewritable(expand('%')) | silent noautocmd w | endif
\ <bar> \ <bar>
@ -266,14 +261,14 @@ command! -buffer VimwikiNextLink call vimwiki#base#find_next_link()
command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link() command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link()
command! -buffer VimwikiDeleteLink call vimwiki#base#delete_link() command! -buffer VimwikiDeleteLink call vimwiki#base#delete_link()
command! -buffer VimwikiRenameLink call vimwiki#base#rename_link() command! -buffer VimwikiRenameLink call vimwiki#base#rename_link()
command! -buffer VimwikiFollowLink call vimwiki#base#follow_link('nosplit') command! -buffer VimwikiFollowLink call vimwiki#base#follow_link('nosplit', 0, 1)
command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link() command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link()
command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('split') command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('hsplit', 0, 1)
command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit') command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit', 0, 1)
command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link(<f-args>) command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link(<f-args>)
command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tabnew') command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tab', 0, 1)
command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links() command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links()
@ -293,11 +288,19 @@ command! -buffer VimwikiCheckLinks call vimwiki#base#check_links()
" list commands " list commands
command! -buffer -nargs=+ VimwikiReturn call <SID>CR(<f-args>) command! -buffer -nargs=+ VimwikiReturn call <SID>CR(<f-args>)
command! -buffer -range -nargs=1 VimwikiChangeSymbolTo call vimwiki#lst#change_marker(<line1>, <line2>, <f-args>, 'n') command! -buffer -range -nargs=1 VimwikiChangeSymbolTo
command! -buffer -range -nargs=1 VimwikiListChangeSymbolI call vimwiki#lst#change_marker(<line1>, <line2>, <f-args>, 'i') \ call vimwiki#lst#change_marker(<line1>, <line2>, <f-args>, 'n')
command! -buffer -nargs=1 VimwikiChangeSymbolInListTo call vimwiki#lst#change_marker_in_list(<f-args>) command! -buffer -range -nargs=1 VimwikiListChangeSymbolI
\ call vimwiki#lst#change_marker(<line1>, <line2>, <f-args>, 'i')
command! -buffer -nargs=1 VimwikiChangeSymbolInListTo
\ call vimwiki#lst#change_marker_in_list(<f-args>)
command! -buffer -range VimwikiToggleListItem call vimwiki#lst#toggle_cb(<line1>, <line2>) command! -buffer -range VimwikiToggleListItem call vimwiki#lst#toggle_cb(<line1>, <line2>)
command! -buffer -range -nargs=+ VimwikiListChangeLvl call vimwiki#lst#change_level(<line1>, <line2>, <f-args>) command! -buffer -range VimwikiToggleRejectedListItem
\ call vimwiki#lst#toggle_rejected_cb(<line1>, <line2>)
command! -buffer -range VimwikiIncrementListItem call vimwiki#lst#increment_cb(<line1>, <line2>)
command! -buffer -range VimwikiDecrementListItem call vimwiki#lst#decrement_cb(<line1>, <line2>)
command! -buffer -range -nargs=+ VimwikiListChangeLvl
\ call vimwiki#lst#change_level(<line1>, <line2>, <f-args>)
command! -buffer -range VimwikiRemoveSingleCB call vimwiki#lst#remove_cb(<line1>, <line2>) command! -buffer -range VimwikiRemoveSingleCB call vimwiki#lst#remove_cb(<line1>, <line2>)
command! -buffer VimwikiRemoveCBInList call vimwiki#lst#remove_cb_in_list() command! -buffer VimwikiRemoveCBInList call vimwiki#lst#remove_cb_in_list()
command! -buffer VimwikiRenumberList call vimwiki#lst#adjust_numbered_list() command! -buffer VimwikiRenumberList call vimwiki#lst#adjust_numbered_list()
@ -316,20 +319,25 @@ command! -buffer VimwikiDiaryNextDay call vimwiki#diary#goto_next_day()
command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day() command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day()
" tags commands " tags commands
command! -buffer -bang command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>')
\ VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>')
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
\ VimwikiSearchTags VimwikiSearch /:<args>:/ \ VimwikiSearchTags VimwikiSearch /:<args>:/
command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags
\ VimwikiGenerateTags call vimwiki#tags#generate_tags(<f-args>) \ VimwikiGenerateTags call vimwiki#tags#generate_tags(<f-args>)
" COMMANDS }}} command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p'))
command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p'))
" ------------------------------------------------
" Keybindings
" ------------------------------------------------
" KEYBINDINGS {{{
if vimwiki#vars#get_global('use_mouse') if vimwiki#vars#get_global('use_mouse')
nmap <buffer> <S-LeftMouse> <NOP> nmap <buffer> <S-LeftMouse> <NOP>
nmap <buffer> <C-LeftMouse> <NOP> nmap <buffer> <C-LeftMouse> <NOP>
nnoremap <silent><buffer> <2-LeftMouse> :call vimwiki#base#follow_link("nosplit", "\<lt>2-LeftMouse>")<CR> nnoremap <silent><buffer> <2-LeftMouse>
\ :call vimwiki#base#follow_link('nosplit', 0, 1, "\<lt>2-LeftMouse>")<CR>
nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR> nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR>
nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR> nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR>
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR> nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
@ -339,44 +347,37 @@ endif
if !hasmapto('<Plug>Vimwiki2HTML') if !hasmapto('<Plug>Vimwiki2HTML')
exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'h <Plug>Vimwiki2HTML' exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'h <Plug>Vimwiki2HTML'
endif endif
nnoremap <script><buffer> nnoremap <script><buffer> <Plug>Vimwiki2HTML :Vimwiki2HTML<CR>
\ <Plug>Vimwiki2HTML :Vimwiki2HTML<CR>
if !hasmapto('<Plug>Vimwiki2HTMLBrowse') if !hasmapto('<Plug>Vimwiki2HTMLBrowse')
exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'hh <Plug>Vimwiki2HTMLBrowse' exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'hh <Plug>Vimwiki2HTMLBrowse'
endif endif
nnoremap <script><buffer> nnoremap <script><buffer> <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR>
\ <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR>
if !hasmapto('<Plug>VimwikiFollowLink') if !hasmapto('<Plug>VimwikiFollowLink')
nmap <silent><buffer> <CR> <Plug>VimwikiFollowLink nmap <silent><buffer> <CR> <Plug>VimwikiFollowLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink :VimwikiFollowLink<CR>
\ <Plug>VimwikiFollowLink :VimwikiFollowLink<CR>
if !hasmapto('<Plug>VimwikiSplitLink') if !hasmapto('<Plug>VimwikiSplitLink')
nmap <silent><buffer> <S-CR> <Plug>VimwikiSplitLink nmap <silent><buffer> <S-CR> <Plug>VimwikiSplitLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink :VimwikiSplitLink<CR>
\ <Plug>VimwikiSplitLink :VimwikiSplitLink<CR>
if !hasmapto('<Plug>VimwikiVSplitLink') if !hasmapto('<Plug>VimwikiVSplitLink')
nmap <silent><buffer> <C-CR> <Plug>VimwikiVSplitLink nmap <silent><buffer> <C-CR> <Plug>VimwikiVSplitLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
\ <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
if !hasmapto('<Plug>VimwikiNormalizeLink') if !hasmapto('<Plug>VimwikiNormalizeLink')
nmap <silent><buffer> + <Plug>VimwikiNormalizeLink nmap <silent><buffer> + <Plug>VimwikiNormalizeLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR>
\ <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR>
if !hasmapto('<Plug>VimwikiNormalizeLinkVisual') if !hasmapto('<Plug>VimwikiNormalizeLinkVisual')
vmap <silent><buffer> + <Plug>VimwikiNormalizeLinkVisual vmap <silent><buffer> + <Plug>VimwikiNormalizeLinkVisual
endif endif
vnoremap <silent><script><buffer> vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR>
\ <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR>
if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR') if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR')
vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR
@ -388,50 +389,42 @@ if !hasmapto('<Plug>VimwikiTabnewLink')
nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR>
\ <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR>
if !hasmapto('<Plug>VimwikiGoBackLink') if !hasmapto('<Plug>VimwikiGoBackLink')
nmap <silent><buffer> <BS> <Plug>VimwikiGoBackLink nmap <silent><buffer> <BS> <Plug>VimwikiGoBackLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR>
\ <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR>
if !hasmapto('<Plug>VimwikiNextLink') if !hasmapto('<Plug>VimwikiNextLink')
nmap <silent><buffer> <TAB> <Plug>VimwikiNextLink nmap <silent><buffer> <TAB> <Plug>VimwikiNextLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiNextLink :VimwikiNextLink<CR>
\ <Plug>VimwikiNextLink :VimwikiNextLink<CR>
if !hasmapto('<Plug>VimwikiPrevLink') if !hasmapto('<Plug>VimwikiPrevLink')
nmap <silent><buffer> <S-TAB> <Plug>VimwikiPrevLink nmap <silent><buffer> <S-TAB> <Plug>VimwikiPrevLink
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink :VimwikiPrevLink<CR>
\ <Plug>VimwikiPrevLink :VimwikiPrevLink<CR>
if !hasmapto('<Plug>VimwikiDeleteLink') if !hasmapto('<Plug>VimwikiDeleteLink')
exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'d <Plug>VimwikiDeleteLink' exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'d <Plug>VimwikiDeleteLink'
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR>
\ <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR>
if !hasmapto('<Plug>VimwikiRenameLink') if !hasmapto('<Plug>VimwikiRenameLink')
exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'r <Plug>VimwikiRenameLink' exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'r <Plug>VimwikiRenameLink'
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiRenameLink :VimwikiRenameLink<CR>
\ <Plug>VimwikiRenameLink :VimwikiRenameLink<CR>
if !hasmapto('<Plug>VimwikiDiaryNextDay') if !hasmapto('<Plug>VimwikiDiaryNextDay')
nmap <silent><buffer> <C-Down> <Plug>VimwikiDiaryNextDay nmap <silent><buffer> <C-Down> <Plug>VimwikiDiaryNextDay
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR>
\ <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR>
if !hasmapto('<Plug>VimwikiDiaryPrevDay') if !hasmapto('<Plug>VimwikiDiaryPrevDay')
nmap <silent><buffer> <C-Up> <Plug>VimwikiDiaryPrevDay nmap <silent><buffer> <C-Up> <Plug>VimwikiDiaryPrevDay
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR>
\ <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR>
" List mappings " List mappings
if !hasmapto('<Plug>VimwikiToggleListItem') if !hasmapto('<Plug>VimwikiToggleListItem')
@ -442,35 +435,50 @@ if !hasmapto('<Plug>VimwikiToggleListItem')
vmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem vmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem
endif endif
endif endif
if !hasmapto('<Plug>VimwikiToggleRejectedListItem')
nmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem
vmap <silent><buffer> glx <Plug>VimwikiToggleRejectedListItem
endif
nnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR>
vnoremap <silent><script><buffer> <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR>
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer>
\ <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR> \ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR>
vnoremap <silent><script><buffer> vnoremap <silent><script><buffer>
\ <Plug>VimwikiToggleListItem :VimwikiToggleListItem<CR> \ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR>
if !hasmapto('<Plug>VimwikiIncrementListItem')
nmap <silent><buffer> gln <Plug>VimwikiIncrementListItem
vmap <silent><buffer> gln <Plug>VimwikiIncrementListItem
endif
if !hasmapto('<Plug>VimwikiDecrementListItem')
nmap <silent><buffer> glp <Plug>VimwikiDecrementListItem
vmap <silent><buffer> glp <Plug>VimwikiDecrementListItem
endif
nnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR>
vnoremap <silent><script><buffer> <Plug>VimwikiIncrementListItem :VimwikiIncrementListItem<CR>
nnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR>
vnoremap <silent><script><buffer> <Plug>VimwikiDecrementListItem :VimwikiDecrementListItem<CR>
if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem', 'i') if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem', 'i')
imap <silent><buffer> <C-D> imap <silent><buffer> <C-D> <Plug>VimwikiDecreaseLvlSingleItem
\ <Plug>VimwikiDecreaseLvlSingleItem
endif endif
inoremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem inoremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem
\ <C-O>:VimwikiListChangeLvl decrease 0<CR> \ <C-O>:VimwikiListChangeLvl decrease 0<CR>
if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem', 'i') if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem', 'i')
imap <silent><buffer> <C-T> imap <silent><buffer> <C-T> <Plug>VimwikiIncreaseLvlSingleItem
\ <Plug>VimwikiIncreaseLvlSingleItem
endif endif
inoremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem inoremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem
\ <C-O>:VimwikiListChangeLvl increase 0<CR> \ <C-O>:VimwikiListChangeLvl increase 0<CR>
if !hasmapto('<Plug>VimwikiListNextSymbol', 'i') if !hasmapto('<Plug>VimwikiListNextSymbol', 'i')
imap <silent><buffer> <C-L><C-J> imap <silent><buffer> <C-L><C-J> <Plug>VimwikiListNextSymbol
\ <Plug>VimwikiListNextSymbol
endif endif
inoremap <silent><script><buffer> <Plug>VimwikiListNextSymbol inoremap <silent><script><buffer> <Plug>VimwikiListNextSymbol
\ <C-O>:VimwikiListChangeSymbolI next<CR> \ <C-O>:VimwikiListChangeSymbolI next<CR>
if !hasmapto('<Plug>VimwikiListPrevSymbol', 'i') if !hasmapto('<Plug>VimwikiListPrevSymbol', 'i')
imap <silent><buffer> <C-L><C-K> imap <silent><buffer> <C-L><C-K> <Plug>VimwikiListPrevSymbol
\ <Plug>VimwikiListPrevSymbol
endif endif
inoremap <silent><script><buffer> <Plug>VimwikiListPrevSymbol inoremap <silent><script><buffer> <Plug>VimwikiListPrevSymbol
\ <C-O>:VimwikiListChangeSymbolI prev<CR> \ <C-O>:VimwikiListChangeSymbolI prev<CR>
@ -480,21 +488,19 @@ if !hasmapto('<Plug>VimwikiListToggle', 'i')
endif endif
inoremap <silent><script><buffer> <Plug>VimwikiListToggle <Esc>:VimwikiListToggle<CR> inoremap <silent><script><buffer> <Plug>VimwikiListToggle <Esc>:VimwikiListToggle<CR>
nnoremap <silent> <buffer> o :call vimwiki#lst#kbd_o()<CR> nnoremap <silent> <buffer> o :<C-U>call vimwiki#lst#kbd_o()<CR>
nnoremap <silent> <buffer> O :call vimwiki#lst#kbd_O()<CR> nnoremap <silent> <buffer> O :<C-U>call vimwiki#lst#kbd_O()<CR>
if !hasmapto('<Plug>VimwikiRenumberList') if !hasmapto('<Plug>VimwikiRenumberList')
nmap <silent><buffer> glr <Plug>VimwikiRenumberList nmap <silent><buffer> glr <Plug>VimwikiRenumberList
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList :VimwikiRenumberList<CR>
\ <Plug>VimwikiRenumberList :VimwikiRenumberList<CR>
if !hasmapto('<Plug>VimwikiRenumberAllLists') if !hasmapto('<Plug>VimwikiRenumberAllLists')
nmap <silent><buffer> gLr <Plug>VimwikiRenumberAllLists nmap <silent><buffer> gLr <Plug>VimwikiRenumberAllLists
nmap <silent><buffer> gLR <Plug>VimwikiRenumberAllLists nmap <silent><buffer> gLR <Plug>VimwikiRenumberAllLists
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR>
\ <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR>
if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem') if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem')
map <silent><buffer> glh <Plug>VimwikiDecreaseLvlSingleItem map <silent><buffer> glh <Plug>VimwikiDecreaseLvlSingleItem
@ -525,14 +531,12 @@ noremap <silent><script><buffer>
if !hasmapto('<Plug>VimwikiRemoveSingleCB') if !hasmapto('<Plug>VimwikiRemoveSingleCB')
map <silent><buffer> gl<Space> <Plug>VimwikiRemoveSingleCB map <silent><buffer> gl<Space> <Plug>VimwikiRemoveSingleCB
endif endif
noremap <silent><script><buffer> noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR>
\ <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR>
if !hasmapto('<Plug>VimwikiRemoveCBInList') if !hasmapto('<Plug>VimwikiRemoveCBInList')
map <silent><buffer> gL<Space> <Plug>VimwikiRemoveCBInList map <silent><buffer> gL<Space> <Plug>VimwikiRemoveCBInList
endif endif
noremap <silent><script><buffer> noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR>
\ <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR>
for s:char in vimwiki#vars#get_syntaxlocal('bullet_types') for s:char in vimwiki#vars#get_syntaxlocal('bullet_types')
if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>') if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>')
@ -553,8 +557,7 @@ for s:typ in vimwiki#vars#get_syntaxlocal('number_types')
endfor endfor
function! s:CR(normal, just_mrkr)
function! s:CR(normal, just_mrkr) "{{{
if vimwiki#vars#get_global('table_mappings') if vimwiki#vars#get_global('table_mappings')
let res = vimwiki#tbl#kbd_cr() let res = vimwiki#tbl#kbd_cr()
if res != "" if res != ""
@ -564,7 +567,7 @@ function! s:CR(normal, just_mrkr) "{{{
endif endif
endif endif
call vimwiki#lst#kbd_cr(a:normal, a:just_mrkr) call vimwiki#lst#kbd_cr(a:normal, a:just_mrkr)
endfunction "}}} endfunction
if !hasmapto('VimwikiReturn', 'i') if !hasmapto('VimwikiReturn', 'i')
if maparg('<CR>', 'i') !~? '<Esc>:VimwikiReturn' if maparg('<CR>', 'i') !~? '<Esc>:VimwikiReturn'
@ -588,8 +591,7 @@ nnoremap <buffer> gww :VimwikiTableAlignW<CR>
if !hasmapto('<Plug>VimwikiTableMoveColumnLeft') if !hasmapto('<Plug>VimwikiTableMoveColumnLeft')
nmap <silent><buffer> <A-Left> <Plug>VimwikiTableMoveColumnLeft nmap <silent><buffer> <A-Left> <Plug>VimwikiTableMoveColumnLeft
endif endif
nnoremap <silent><script><buffer> nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR>
\ <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR>
if !hasmapto('<Plug>VimwikiTableMoveColumnRight') if !hasmapto('<Plug>VimwikiTableMoveColumnRight')
nmap <silent><buffer> <A-Right> <Plug>VimwikiTableMoveColumnRight nmap <silent><buffer> <A-Right> <Plug>VimwikiTableMoveColumnRight
endif endif
@ -598,12 +600,21 @@ nnoremap <silent><script><buffer>
" Text objects {{{ " ------------------------------------------------
onoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0)<CR> " Text objects
vnoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 1)<CR> " ------------------------------------------------
onoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0)<CR> onoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
vnoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 1)<CR> vnoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<CR>
onoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
vnoremap <silent><buffer> ih :<C-U>call vimwiki#base#TO_header(1, 0, v:count1)<CR>
onoremap <silent><buffer> aH :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
vnoremap <silent><buffer> aH :<C-U>call vimwiki#base#TO_header(0, 1, v:count1)<CR>
onoremap <silent><buffer> iH :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
vnoremap <silent><buffer> iH :<C-U>call vimwiki#base#TO_header(1, 1, v:count1)<CR>
onoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 0)<CR> onoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 0)<CR>
vnoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR> vnoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR>
@ -626,8 +637,7 @@ vnoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR>
if !hasmapto('<Plug>VimwikiAddHeaderLevel') if !hasmapto('<Plug>VimwikiAddHeaderLevel')
nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel
endif endif
nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel : nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel :<C-U>call vimwiki#base#AddHeaderLevel()<CR>
\<C-U>call vimwiki#base#AddHeaderLevel()<CR>
if !hasmapto('<Plug>VimwikiRemoveHeaderLevel') if !hasmapto('<Plug>VimwikiRemoveHeaderLevel')
nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel
@ -635,12 +645,39 @@ endif
nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel : nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel :
\<C-U>call vimwiki#base#RemoveHeaderLevel()<CR> \<C-U>call vimwiki#base#RemoveHeaderLevel()<CR>
if !hasmapto('<Plug>VimwikiGoToParentHeader')
nmap <silent><buffer> ]u <Plug>VimwikiGoToParentHeader
nmap <silent><buffer> [u <Plug>VimwikiGoToParentHeader
endif
nnoremap <silent><buffer> <Plug>VimwikiGoToParentHeader :
\<C-u>call vimwiki#base#goto_parent_header()<CR>
if !hasmapto('<Plug>VimwikiGoToNextHeader')
nmap <silent><buffer> ]] <Plug>VimwikiGoToNextHeader
endif
nnoremap <silent><buffer> <Plug>VimwikiGoToNextHeader :
\<C-u>call vimwiki#base#goto_next_header()<CR>
if !hasmapto('<Plug>VimwikiGoToPrevHeader')
nmap <silent><buffer> [[ <Plug>VimwikiGoToPrevHeader
endif
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevHeader :
\<C-u>call vimwiki#base#goto_prev_header()<CR>
if !hasmapto('<Plug>VimwikiGoToNextSiblingHeader')
nmap <silent><buffer> ]= <Plug>VimwikiGoToNextSiblingHeader
endif
nnoremap <silent><buffer> <Plug>VimwikiGoToNextSiblingHeader :
\<C-u>call vimwiki#base#goto_sibling(+1)<CR>
if !hasmapto('<Plug>VimwikiGoToPrevSiblingHeader')
nmap <silent><buffer> [= <Plug>VimwikiGoToPrevSiblingHeader
endif
nnoremap <silent><buffer> <Plug>VimwikiGoToPrevSiblingHeader :
\<C-u>call vimwiki#base#goto_sibling(-1)<CR>
" }}}
" KEYBINDINGS }}}
" AUTOCOMMANDS {{{
if vimwiki#vars#get_wikilocal('auto_export') if vimwiki#vars#get_wikilocal('auto_export')
" Automatically generate HTML on page write. " Automatically generate HTML on page write.
augroup vimwiki augroup vimwiki
@ -662,10 +699,4 @@ if vimwiki#vars#get_wikilocal('auto_tags')
au BufWritePost <buffer> call vimwiki#tags#update_tags(0, '') au BufWritePost <buffer> call vimwiki#tags#update_tags(0, '')
augroup END augroup END
endif endif
" AUTOCOMMANDS }}}
" PASTE, CAT URL {{{
" html commands
command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(vimwiki#path#current_file())
command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(vimwiki#path#current_file())
" }}}

View File

@ -1,19 +1,21 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki plugin file " Vimwiki plugin file
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki " GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki
if exists("g:loaded_vimwiki") || &cp if exists("g:loaded_vimwiki") || &cp
finish finish
endif endif
let g:loaded_vimwiki = 1 let g:loaded_vimwiki = 1
let s:old_cpo = &cpo let s:old_cpo = &cpo
set cpo&vim set cpo&vim
" this is called when the cursor leaves the buffer " this is called when the cursor leaves the buffer
function! s:setup_buffer_leave() "{{{ function! s:setup_buffer_leave()
" don't do anything if it's not managed by Vimwiki (that is, when it's not in " don't do anything if it's not managed by Vimwiki (that is, when it's not in
" a registered wiki and not a temporary wiki) " a registered wiki and not a temporary wiki)
if vimwiki#vars#get_bufferlocal('wiki_nr') == -1 if vimwiki#vars#get_bufferlocal('wiki_nr') == -1
@ -25,7 +27,7 @@ function! s:setup_buffer_leave() "{{{
if vimwiki#vars#get_global('menu') != "" if vimwiki#vars#get_global('menu') != ""
exe 'nmenu disable '.vimwiki#vars#get_global('menu').'.Table' exe 'nmenu disable '.vimwiki#vars#get_global('menu').'.Table'
endif endif
endfunction "}}} endfunction
" create a new temporary wiki for the current buffer " create a new temporary wiki for the current buffer
@ -50,8 +52,10 @@ function! s:create_temporary_wiki()
endfunction endfunction
" this is called when Vim opens a new buffer with a known wiki extension " This function is called when Vim opens a new buffer with a known wiki
function! s:setup_new_wiki_buffer() "{{{ " extension. Both when the buffer has never been opened in this session and
" when it has.
function! s:setup_new_wiki_buffer()
let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr')
if wiki_nr == -1 " it's not in a known wiki directory if wiki_nr == -1 " it's not in a known wiki directory
if vimwiki#vars#get_global('global_ext') if vimwiki#vars#get_global('global_ext')
@ -62,79 +66,39 @@ function! s:setup_new_wiki_buffer() "{{{
endif endif
endif endif
" this makes that ftplugin/vimwiki.vim is sourced if vimwiki#vars#get_wikilocal('maxhi')
set filetype=vimwiki call vimwiki#vars#set_bufferlocal('existing_wikifiles', vimwiki#base#get_wikilinks(wiki_nr, 1))
call vimwiki#vars#set_bufferlocal('existing_wikidirs',
" to force a rescan of the filesystem which may have changed \ vimwiki#base#get_wiki_directories(wiki_nr))
" and update VimwikiLinks syntax group that depends on it;
" 'fs_rescan' indicates that setup_filetype() has not been run
if vimwiki#vars#get_bufferlocal('fs_rescan') == 1 && vimwiki#vars#get_wikilocal('maxhi')
set syntax=vimwiki
endif endif
call vimwiki#vars#set_bufferlocal('fs_rescan', 1)
endfunction "}}} " this makes that ftplugin/vimwiki.vim and afterwards syntax/vimwiki.vim are
" sourced
setfiletype vimwiki
endfunction
" this is called when the cursor enters the buffer " this is called when the cursor enters the buffer
function! s:setup_buffer_enter() "{{{ function! s:setup_buffer_enter()
" don't do anything if it's not managed by Vimwiki (that is, when it's not in " don't do anything if it's not managed by Vimwiki (that is, when it's not in
" a registered wiki and not a temporary wiki) " a registered wiki and not a temporary wiki)
if vimwiki#vars#get_bufferlocal('wiki_nr') == -1 if vimwiki#vars#get_bufferlocal('wiki_nr') == -1
return return
endif endif
let s:vimwiki_autowriteall_saved = &autowriteall if &filetype != 'vimwiki'
let &autowriteall = vimwiki#vars#get_global('autowriteall') setfiletype vimwiki
if &filetype == ''
set filetype=vimwiki
elseif &syntax ==? 'vimwiki'
" to force a rescan of the filesystem which may have changed
" and update VimwikiLinks syntax group that depends on it;
" 'fs_rescan' indicates that setup_filetype() has not been run
if vimwiki#vars#get_bufferlocal('fs_rescan') == 1 && vimwiki#vars#get_wikilocal('maxhi')
set syntax=vimwiki
endif
call vimwiki#vars#set_bufferlocal('fs_rescan', 1)
endif endif
" The settings foldmethod, foldexpr and foldtext are local to window. Thus in call s:set_global_options()
" a new tab with the same buffer folding is reset to vim defaults. So we
" insist vimwiki folding here.
let foldmethod = vimwiki#vars#get_global('folding')
if foldmethod ==? 'expr'
setlocal foldmethod=expr
setlocal foldexpr=VimwikiFoldLevel(v:lnum)
setlocal foldtext=VimwikiFoldText()
elseif foldmethod ==? 'list' || foldmethod ==? 'lists'
setlocal foldmethod=expr
setlocal foldexpr=VimwikiFoldListLevel(v:lnum)
setlocal foldtext=VimwikiFoldText()
elseif foldmethod ==? 'syntax'
setlocal foldmethod=syntax
setlocal foldtext=VimwikiFoldText()
else
setlocal foldmethod=manual
normal! zE
endif
" And conceal level too. call s:set_windowlocal_options()
if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel") endfunction
let &conceallevel = vimwiki#vars#get_global('conceallevel')
endif
" lcd as well
if vimwiki#vars#get_global('auto_chdir')
exe 'lcd' vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path'))
endif
" Set up menu function! s:setup_cleared_syntax()
if vimwiki#vars#get_global('menu') !=# '' " highlight groups that get cleared
exe 'nmenu enable '.vimwiki#vars#get_global('menu').'.Table'
endif
endfunction "}}}
function! s:setup_cleared_syntax() "{{{ highlight groups that get cleared
" on colorscheme change because they are not linked to Vim-predefined groups " on colorscheme change because they are not linked to Vim-predefined groups
hi def VimwikiBold term=bold cterm=bold gui=bold hi def VimwikiBold term=bold cterm=bold gui=bold
hi def VimwikiItalic term=italic cterm=italic gui=italic hi def VimwikiItalic term=italic cterm=italic gui=italic
@ -142,13 +106,16 @@ function! s:setup_cleared_syntax() "{{{ highlight groups that get cleared
hi def VimwikiUnderline gui=underline hi def VimwikiUnderline gui=underline
if vimwiki#vars#get_global('hl_headers') == 1 if vimwiki#vars#get_global('hl_headers') == 1
for i in range(1,6) for i in range(1,6)
execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='.vimwiki#vars#get_global('hcolor_guifg_'.&bg)[i-1].' gui=bold ctermfg='.vimwiki#vars#get_global('hcolor_ctermfg_'.&bg)[i-1].' term=bold cterm=bold' execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='
\ . vimwiki#vars#get_global('hcolor_guifg_'.&bg)[i-1]
\ .' gui=bold ctermfg='.vimwiki#vars#get_global('hcolor_ctermfg_'.&bg)[i-1]
\ .' term=bold cterm=bold'
endfor endfor
endif endif
endfunction "}}} endfunction
function! s:vimwiki_get_known_extensions() " {{{ function! s:vimwiki_get_known_extensions()
" Getting all extensions that different wikis could have " Getting all extensions that different wikis could have
let extensions = {} let extensions = {}
for idx in range(vimwiki#vars#number_of_wikis()) for idx in range(vimwiki#vars#number_of_wikis())
@ -160,40 +127,86 @@ function! s:vimwiki_get_known_extensions() " {{{
let extensions[ext] = 1 let extensions[ext] = 1
endfor endfor
return keys(extensions) return keys(extensions)
endfunction " }}} endfunction
" Set settings which are global for Vim, but should only be executed for
" Vimwiki buffers. So they must be set when the cursor enters a Vimwiki buffer
" and reset when the cursor leaves the buffer.
function! s:set_global_options()
let s:vimwiki_autowriteall_saved = &autowriteall
let &autowriteall = vimwiki#vars#get_global('autowriteall')
if vimwiki#vars#get_global('menu') !=# ''
exe 'nmenu enable '.vimwiki#vars#get_global('menu').'.Table'
endif
endfunction
" Set settings which are local to a window. In a new tab they would be reset to
" Vim defaults. So we enforce our settings here when the cursor enters a
" Vimwiki buffer.
function! s:set_windowlocal_options()
let foldmethod = vimwiki#vars#get_global('folding')
if foldmethod =~? '^expr.*'
setlocal foldmethod=expr
setlocal foldexpr=VimwikiFoldLevel(v:lnum)
setlocal foldtext=VimwikiFoldText()
elseif foldmethod =~? '^list.*' || foldmethod =~? '^lists.*'
setlocal foldmethod=expr
setlocal foldexpr=VimwikiFoldListLevel(v:lnum)
setlocal foldtext=VimwikiFoldText()
elseif foldmethod =~? '^syntax.*'
setlocal foldmethod=syntax
setlocal foldtext=VimwikiFoldText()
elseif foldmethod =~? '^custom.*'
" do nothing
else
setlocal foldmethod=manual
normal! zE
endif
if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel")
let &conceallevel = vimwiki#vars#get_global('conceallevel')
endif
if vimwiki#vars#get_global('auto_chdir')
exe 'lcd' vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path'))
endif
endfunction
" }}}
" Initialization of Vimwiki starts here. Make sure everything below does not " Initialization of Vimwiki starts here. Make sure everything below does not
" cause autoload/base to be loaded " cause autoload/vimwiki/base.vim to be loaded
call vimwiki#vars#init() call vimwiki#vars#init()
" CALLBACK functions "{{{
" User can redefine it. " Define callback functions which the user can redefine
if !exists("*VimwikiLinkHandler") "{{{ if !exists("*VimwikiLinkHandler")
function VimwikiLinkHandler(url) function VimwikiLinkHandler(url)
return 0 return 0
endfunction endfunction
endif "}}} endif
if !exists("*VimwikiLinkConverter") "{{{ if !exists("*VimwikiLinkConverter")
function VimwikiLinkConverter(url, source, target) function VimwikiLinkConverter(url, source, target)
" Return the empty string when unable to process link " Return the empty string when unable to process link
return '' return ''
endfunction endfunction
endif "}}} endif
if !exists("*VimwikiWikiIncludeHandler") "{{{ if !exists("*VimwikiWikiIncludeHandler")
function! VimwikiWikiIncludeHandler(value) "{{{ function! VimwikiWikiIncludeHandler(value)
return '' return ''
endfunction "}}} endfunction
endif "}}} endif
" CALLBACK }}}
" AUTOCOMMANDS for all known wiki extensions {{{
" Define autocommands for all known wiki extensions
let s:known_extensions = s:vimwiki_get_known_extensions() let s:known_extensions = s:vimwiki_get_known_extensions()
@ -207,8 +220,8 @@ endif
augroup vimwiki augroup vimwiki
autocmd! autocmd!
for s:ext in s:known_extensions for s:ext in s:known_extensions
exe 'autocmd BufEnter *'.s:ext.' call s:setup_buffer_enter()'
exe 'autocmd BufNewFile,BufRead *'.s:ext.' call s:setup_new_wiki_buffer()' exe 'autocmd BufNewFile,BufRead *'.s:ext.' call s:setup_new_wiki_buffer()'
exe 'autocmd BufEnter *'.s:ext.' call s:setup_buffer_enter()'
exe 'autocmd BufLeave *'.s:ext.' call s:setup_buffer_leave()' exe 'autocmd BufLeave *'.s:ext.' call s:setup_buffer_leave()'
exe 'autocmd ColorScheme *'.s:ext.' call s:setup_cleared_syntax()' exe 'autocmd ColorScheme *'.s:ext.' call s:setup_cleared_syntax()'
" Format tables when exit from insert mode. Do not use textwidth to " Format tables when exit from insert mode. Do not use textwidth to
@ -217,14 +230,24 @@ augroup vimwiki
exe 'autocmd InsertLeave *'.s:ext.' call vimwiki#tbl#format(line("."))' exe 'autocmd InsertLeave *'.s:ext.' call vimwiki#tbl#format(line("."))'
exe 'autocmd InsertEnter *'.s:ext.' call vimwiki#tbl#reset_tw(line("."))' exe 'autocmd InsertEnter *'.s:ext.' call vimwiki#tbl#reset_tw(line("."))'
endif endif
if vimwiki#vars#get_global('folding') =~? ':quick$'
" from http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text
" Don't screw up folds when inserting text that might affect them, until
" leaving insert mode. Foldmethod is local to the window. Protect against
" screwing up folding when switching between windows.
exe 'autocmd InsertEnter *'.s:ext.' if !exists("w:last_fdm") | let w:last_fdm=&foldmethod'.
\ ' | setlocal foldmethod=manual | endif'
exe 'autocmd InsertLeave,WinLeave *'.s:ext.' if exists("w:last_fdm") |'.
\ 'let &l:foldmethod=w:last_fdm | unlet w:last_fdm | endif'
endif
endfor endfor
augroup END augroup END
"}}}
" COMMANDS {{{
command! VimwikiUISelect call vimwiki#base#ui_select() command! VimwikiUISelect call vimwiki#base#ui_select()
" XXX: why not using <count> instead of v:count1? " why not using <count> instead of v:count1?
" See Issue 324. " See https://github.com/vimwiki-backup/vimwiki/issues/324
command! -count=1 VimwikiIndex command! -count=1 VimwikiIndex
\ call vimwiki#base#goto_index(v:count1) \ call vimwiki#base#goto_index(v:count1)
command! -count=1 VimwikiTabIndex command! -count=1 VimwikiTabIndex
@ -237,13 +260,17 @@ command! -count=1 VimwikiMakeDiaryNote
command! -count=1 VimwikiTabMakeDiaryNote command! -count=1 VimwikiTabMakeDiaryNote
\ call vimwiki#diary#make_note(v:count1, 1) \ call vimwiki#diary#make_note(v:count1, 1)
command! -count=1 VimwikiMakeYesterdayDiaryNote command! -count=1 VimwikiMakeYesterdayDiaryNote
\ call vimwiki#diary#make_note(v:count1, 0, vimwiki#diary#diary_date_link(localtime() - 60*60*24)) \ call vimwiki#diary#make_note(v:count1, 0,
\ vimwiki#diary#diary_date_link(localtime() - 60*60*24))
command! -count=1 VimwikiMakeTomorrowDiaryNote
\ call vimwiki#diary#make_note(v:count1, 0,
\ vimwiki#diary#diary_date_link(localtime() + 60*60*24))
command! VimwikiDiaryGenerateLinks command! VimwikiDiaryGenerateLinks
\ call vimwiki#diary#generate_diary_section() \ call vimwiki#diary#generate_diary_section()
"}}}
" MAPPINGS {{{
let s:map_prefix = vimwiki#vars#get_global('map_prefix') let s:map_prefix = vimwiki#vars#get_global('map_prefix')
if !hasmapto('<Plug>VimwikiIndex') if !hasmapto('<Plug>VimwikiIndex')
@ -288,9 +315,15 @@ endif
nnoremap <unique><script> <Plug>VimwikiMakeYesterdayDiaryNote nnoremap <unique><script> <Plug>VimwikiMakeYesterdayDiaryNote
\ :VimwikiMakeYesterdayDiaryNote<CR> \ :VimwikiMakeYesterdayDiaryNote<CR>
"}}} if !hasmapto('<Plug>VimwikiMakeTomorrowDiaryNote')
exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>m <Plug>VimwikiMakeTomorrowDiaryNote'
endif
nnoremap <unique><script> <Plug>VimwikiMakeTomorrowDiaryNote
\ :VimwikiMakeTomorrowDiaryNote<CR>
" MENU {{{
function! s:build_menu(topmenu) function! s:build_menu(topmenu)
for idx in range(vimwiki#vars#number_of_wikis()) for idx in range(vimwiki#vars#number_of_wikis())
let norm_path = vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path', idx)) let norm_path = vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path', idx))
@ -307,7 +340,8 @@ function! s:build_table_menu(topmenu)
exe 'menu '.a:topmenu.'.Table.Create\ (enter\ cols\ rows) :VimwikiTable ' exe 'menu '.a:topmenu.'.Table.Create\ (enter\ cols\ rows) :VimwikiTable '
exe 'nmenu '.a:topmenu.'.Table.Format<tab>gqq gqq' exe 'nmenu '.a:topmenu.'.Table.Format<tab>gqq gqq'
exe 'nmenu '.a:topmenu.'.Table.Move\ column\ left<tab><A-Left> :VimwikiTableMoveColumnLeft<CR>' exe 'nmenu '.a:topmenu.'.Table.Move\ column\ left<tab><A-Left> :VimwikiTableMoveColumnLeft<CR>'
exe 'nmenu '.a:topmenu.'.Table.Move\ column\ right<tab><A-Right> :VimwikiTableMoveColumnRight<CR>' exe 'nmenu '.a:topmenu.
\ '.Table.Move\ column\ right<tab><A-Right> :VimwikiTableMoveColumnRight<CR>'
exe 'nmenu disable '.a:topmenu.'.Table' exe 'nmenu disable '.a:topmenu.'.Table'
endfunction endfunction
@ -316,14 +350,13 @@ if !empty(vimwiki#vars#get_global('menu'))
call s:build_menu(vimwiki#vars#get_global('menu')) call s:build_menu(vimwiki#vars#get_global('menu'))
call s:build_table_menu(vimwiki#vars#get_global('menu')) call s:build_table_menu(vimwiki#vars#get_global('menu'))
endif endif
" }}}
" CALENDAR Hook "{{{
" Hook for calendar.vim
if vimwiki#vars#get_global('use_calendar') if vimwiki#vars#get_global('use_calendar')
let g:calendar_action = 'vimwiki#diary#calendar_action' let g:calendar_action = 'vimwiki#diary#calendar_action'
let g:calendar_sign = 'vimwiki#diary#calendar_sign' let g:calendar_sign = 'vimwiki#diary#calendar_sign'
endif endif
"}}}
let &cpo = s:old_cpo let &cpo = s:old_cpo

View File

@ -1,9 +1,10 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki syntax file " Vimwiki syntax file
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" Quit if syntax file is already loaded " Quit if syntax file is already loaded
if version < 600 if v:version < 600
syntax clear syntax clear
elseif exists("b:current_syntax") elseif exists("b:current_syntax")
finish finish
@ -12,35 +13,38 @@ endif
let s:current_syntax = vimwiki#vars#get_wikilocal('syntax') let s:current_syntax = vimwiki#vars#get_wikilocal('syntax')
call vimwiki#vars#populate_syntax_vars(s:current_syntax) call vimwiki#vars#populate_syntax_vars(s:current_syntax)
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{ " LINKS: highlighting is complicated due to "nonexistent" links feature
function! s:add_target_syntax_ON(target, type) " {{{ function! s:add_target_syntax_ON(target, type)
let prefix0 = 'syntax match '.a:type.' `' let prefix0 = 'syntax match '.a:type.' `'
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char' let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
let prefix1 = 'syntax match '.a:type.'T `' let prefix1 = 'syntax match '.a:type.'T `'
let suffix1 = '` display contained' let suffix1 = '` display contained'
execute prefix0. a:target. suffix0 execute prefix0. a:target. suffix0
execute prefix1. a:target. suffix1 execute prefix1. a:target. suffix1
endfunction "}}} endfunction
function! s:add_target_syntax_OFF(target) " {{{
function! s:add_target_syntax_OFF(target)
let prefix0 = 'syntax match VimwikiNoExistsLink `' let prefix0 = 'syntax match VimwikiNoExistsLink `'
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,VimwikiLinkChar' let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,VimwikiLinkChar'
let prefix1 = 'syntax match VimwikiNoExistsLinkT `' let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
let suffix1 = '` display contained' let suffix1 = '` display contained'
execute prefix0. a:target. suffix0 execute prefix0. a:target. suffix0
execute prefix1. a:target. suffix1 execute prefix1. a:target. suffix1
endfunction "}}} endfunction
function! s:highlight_existing_links() "{{{
function! s:highlight_existing_links()
" Wikilink " Wikilink
" Conditional highlighting that depends on the existence of a wiki file or " Conditional highlighting that depends on the existence of a wiki file or
" directory is only available for *schemeless* wiki links " directory is only available for *schemeless* wiki links
" Links are set up upon BufEnter (see plugin/...) " Links are set up upon BufEnter (see plugin/...)
let safe_links = '\%('.vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikifiles')) . let safe_links = '\%('.vimwiki#base#file_pattern(
\ '\%(#[^|]*\)\?\|#[^|]*\)' \ vimwiki#vars#get_bufferlocal('existing_wikifiles')) . '\%(#[^|]*\)\?\|#[^|]*\)'
" Wikilink Dirs set up upon BufEnter (see plugin/...) " Wikilink Dirs set up upon BufEnter (see plugin/...)
let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs')) let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs'))
@ -75,7 +79,7 @@ function! s:highlight_existing_links() "{{{
\ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')),
\ safe_dirs, vimwiki#vars#get_global('rxWikiLinkDescr'), '') \ safe_dirs, vimwiki#vars#get_global('rxWikiLinkDescr'), '')
call s:add_target_syntax_ON(target, 'VimwikiLink') call s:add_target_syntax_ON(target, 'VimwikiLink')
endfunction "}}} endfunction
" use max highlighting - could be quite slow if there are too many wikifiles " use max highlighting - could be quite slow if there are too many wikifiles
@ -94,9 +98,11 @@ else
call s:add_target_syntax_ON(vimwiki#vars#get_global('rxWikiIncl'), 'VimwikiLink') call s:add_target_syntax_ON(vimwiki#vars#get_global('rxWikiIncl'), 'VimwikiLink')
endif endif
" Weblink " Weblink
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink'), 'VimwikiLink') call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink'), 'VimwikiLink')
" WikiLink " WikiLink
" All remaining schemes are highlighted automatically " All remaining schemes are highlighted automatically
let s:rxSchemes = '\%('. let s:rxSchemes = '\%('.
@ -107,62 +113,73 @@ let s:rxSchemes = '\%('.
" a) match [[nonwiki-scheme-URL]] " a) match [[nonwiki-scheme-URL]]
let s:target = vimwiki#base#apply_template( let s:target = vimwiki#base#apply_template(
\ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')), \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')),
\ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), vimwiki#vars#get_global('rxWikiLinkDescr'), '') \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'),
\ vimwiki#vars#get_global('rxWikiLinkDescr'), '')
call s:add_target_syntax_ON(s:target, 'VimwikiLink') call s:add_target_syntax_ON(s:target, 'VimwikiLink')
" b) match [[nonwiki-scheme-URL|DESCRIPTION]] " b) match [[nonwiki-scheme-URL|DESCRIPTION]]
let s:target = vimwiki#base#apply_template( let s:target = vimwiki#base#apply_template(
\ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')),
\ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), vimwiki#vars#get_global('rxWikiLinkDescr'), '') \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'),
\ vimwiki#vars#get_global('rxWikiLinkDescr'), '')
call s:add_target_syntax_ON(s:target, 'VimwikiLink') call s:add_target_syntax_ON(s:target, 'VimwikiLink')
" a) match {{nonwiki-scheme-URL}} " a) match {{nonwiki-scheme-URL}}
let s:target = vimwiki#base#apply_template( let s:target = vimwiki#base#apply_template(
\ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate1')), \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate1')),
\ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), vimwiki#vars#get_global('rxWikiInclArgs'), '') \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'),
\ vimwiki#vars#get_global('rxWikiInclArgs'), '')
call s:add_target_syntax_ON(s:target, 'VimwikiLink') call s:add_target_syntax_ON(s:target, 'VimwikiLink')
" b) match {{nonwiki-scheme-URL}[{...}]} " b) match {{nonwiki-scheme-URL}[{...}]}
let s:target = vimwiki#base#apply_template( let s:target = vimwiki#base#apply_template(
\ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate2')), \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate2')),
\ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), vimwiki#vars#get_global('rxWikiInclArgs'), '') \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'),
\ vimwiki#vars#get_global('rxWikiInclArgs'), '')
call s:add_target_syntax_ON(s:target, 'VimwikiLink') call s:add_target_syntax_ON(s:target, 'VimwikiLink')
" }}}
" generic headers "{{{
" Header levels, 1-6 " Header levels, 1-6
for s:i in range(1,6) for s:i in range(1,6)
execute 'syntax match VimwikiHeader'.s:i
execute 'syntax match VimwikiHeader'.s:i.' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i, s:current_syntax).'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,@Spell' \ . ' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i, s:current_syntax).
execute 'syntax region VimwikiH'.s:i.'Folding start=/'.vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_Start', s:current_syntax). \ '/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,'.
\ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_End', s:current_syntax).'/me=s-1 transparent fold' \ 'VimwikiLink,@Spell'
execute 'syntax region VimwikiH'.s:i.'Folding start=/'.
\ vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_Start', s:current_syntax).'/ end=/'.
\ vimwiki#vars#get_syntaxlocal('rxH'.s:i.'_End', s:current_syntax).
\ '/me=s-1 transparent fold'
endfor endfor
" }}}
" possibly concealed chars
" possibly concealed chars " {{{
let s:conceal = exists("+conceallevel") ? ' conceal' : '' let s:conceal = exists("+conceallevel") ? ' conceal' : ''
execute 'syn match VimwikiEqInChar contained /'.vimwiki#vars#get_syntaxlocal('char_eqin').'/'.s:conceal execute 'syn match VimwikiEqInChar contained /'.
execute 'syn match VimwikiBoldChar contained /'.vimwiki#vars#get_syntaxlocal('char_bold').'/'.s:conceal \ vimwiki#vars#get_syntaxlocal('char_eqin').'/'.s:conceal
execute 'syn match VimwikiItalicChar contained /'.vimwiki#vars#get_syntaxlocal('char_italic').'/'.s:conceal execute 'syn match VimwikiBoldChar contained /'.
execute 'syn match VimwikiBoldItalicChar contained /'.vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.s:conceal \ vimwiki#vars#get_syntaxlocal('char_bold').'/'.s:conceal
execute 'syn match VimwikiItalicBoldChar contained /'.vimwiki#vars#get_syntaxlocal('char_italicbold').'/'.s:conceal execute 'syn match VimwikiItalicChar contained /'.
execute 'syn match VimwikiCodeChar contained /'.vimwiki#vars#get_syntaxlocal('char_code').'/'.s:conceal \ vimwiki#vars#get_syntaxlocal('char_italic').'/'.s:conceal
execute 'syn match VimwikiDelTextChar contained /'.vimwiki#vars#get_syntaxlocal('char_deltext').'/'.s:conceal execute 'syn match VimwikiBoldItalicChar contained /'.
execute 'syn match VimwikiSuperScript contained /'.vimwiki#vars#get_syntaxlocal('char_superscript').'/'.s:conceal \ vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.s:conceal
execute 'syn match VimwikiSubScript contained /'.vimwiki#vars#get_syntaxlocal('char_subscript').'/'.s:conceal execute 'syn match VimwikiItalicBoldChar contained /'.
" }}} \ vimwiki#vars#get_syntaxlocal('char_italicbold').'/'.s:conceal
execute 'syn match VimwikiCodeChar contained /'.
\ vimwiki#vars#get_syntaxlocal('char_code').'/'.s:conceal
execute 'syn match VimwikiDelTextChar contained /'.
\ vimwiki#vars#get_syntaxlocal('char_deltext').'/'.s:conceal
execute 'syn match VimwikiSuperScript contained /'.
\ vimwiki#vars#get_syntaxlocal('char_superscript').'/'.s:conceal
execute 'syn match VimwikiSubScript contained /'.
\ vimwiki#vars#get_syntaxlocal('char_subscript').'/'.s:conceal
" concealed link parts " {{{
" define the conceal attribute for links only if Vim is new enough to handle it
" and the user has g:vimwiki_url_maxsave > 0
let s:options = ' contained transparent contains=NONE' let s:options = ' contained transparent contains=NONE'
"
" A shortener for long URLs: LinkRest (a middle part of the URL) is concealed " A shortener for long URLs: LinkRest (a middle part of the URL) is concealed
" VimwikiLinkRest group is left undefined if link shortening is not desired " VimwikiLinkRest group is left undefined if link shortening is not desired
if exists("+conceallevel") && vimwiki#vars#get_global('url_maxsave') > 0 if exists("+conceallevel") && vimwiki#vars#get_global('url_maxsave') > 0
@ -185,34 +202,41 @@ execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclPrefix'
execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclSuffix').'/'.s:options execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclSuffix').'/'.s:options
execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclPrefix1').'/'.s:options execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclPrefix1').'/'.s:options
execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclSuffix1').'/'.s:options execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclSuffix1').'/'.s:options
" }}}
" non concealed chars " {{{
execute 'syn match VimwikiHeaderChar contained /\%(^\s*'.vimwiki#vars#get_syntaxlocal('rxH').'\+\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH').'\+\s*$\)/'
execute 'syn match VimwikiEqInCharT contained /'.vimwiki#vars#get_syntaxlocal('char_eqin').'/'
execute 'syn match VimwikiBoldCharT contained /'.vimwiki#vars#get_syntaxlocal('char_bold').'/'
execute 'syn match VimwikiItalicCharT contained /'.vimwiki#vars#get_syntaxlocal('char_italic').'/'
execute 'syn match VimwikiBoldItalicCharT contained /'.vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'
execute 'syn match VimwikiItalicBoldCharT contained /'.vimwiki#vars#get_syntaxlocal('char_italicbold').'/'
execute 'syn match VimwikiCodeCharT contained /'.vimwiki#vars#get_syntaxlocal('char_code').'/'
execute 'syn match VimwikiDelTextCharT contained /'.vimwiki#vars#get_syntaxlocal('char_deltext').'/'
execute 'syn match VimwikiSuperScriptT contained /'.vimwiki#vars#get_syntaxlocal('char_superscript').'/'
execute 'syn match VimwikiSubScriptT contained /'.vimwiki#vars#get_syntaxlocal('char_subscript').'/'
" Emoticons " non concealed chars
"syntax match VimwikiEmoticons /\%((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/ execute 'syn match VimwikiHeaderChar contained /\%(^\s*'.
\ vimwiki#vars#get_syntaxlocal('rxH').'\+\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH').
\ '\+\s*$\)/'
execute 'syn match VimwikiEqInCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_eqin').'/'
execute 'syn match VimwikiBoldCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_bold').'/'
execute 'syn match VimwikiItalicCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_italic').'/'
execute 'syn match VimwikiBoldItalicCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'
execute 'syn match VimwikiItalicBoldCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_italicbold').'/'
execute 'syn match VimwikiCodeCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_code').'/'
execute 'syn match VimwikiDelTextCharT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_deltext').'/'
execute 'syn match VimwikiSuperScriptT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_superscript').'/'
execute 'syn match VimwikiSubScriptT contained /'
\ .vimwiki#vars#get_syntaxlocal('char_subscript').'/'
execute 'syntax match VimwikiTodo /'. vimwiki#vars#get_global('rxTodo') .'/' execute 'syntax match VimwikiTodo /'. vimwiki#vars#get_global('rxTodo') .'/'
" }}}
" main syntax groups {{{
" Tables " Tables
syntax match VimwikiTableRow /^\s*|.\+|\s*$/ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
\ transparent contains=VimwikiCellSeparator, \ transparent contains=VimwikiCellSeparator,
\ VimwikiLinkT, \ VimwikiLinkT,
\ VimwikiNoExistsLinkT, \ VimwikiNoExistsLinkT,
\ VimwikiEmoticons,
\ VimwikiTodo, \ VimwikiTodo,
\ VimwikiBoldT, \ VimwikiBoldT,
\ VimwikiItalicT, \ VimwikiItalicT,
@ -227,45 +251,69 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
syntax match VimwikiCellSeparator syntax match VimwikiCellSeparator
\ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained \ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
" Lists " Lists
execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB').'/' execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB').'/'
execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/' execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/'
execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_syntaxlocal('rxListItem').'/' execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_syntaxlocal('rxListItem').'/'
if vimwiki#vars#get_global('hl_cb_checked') == 1 if vimwiki#vars#get_global('hl_cb_checked') == 1
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB').'\s*\['.vimwiki#vars#get_syntaxlocal('listsyms_list')[4].'\]\s.*$/ '. execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB')
\ 'contains=VimwikiNoExistsLink,VimwikiLink,@Spell' \ . '\s*\[['.vimwiki#vars#get_syntaxlocal('listsyms_list')[-1]
\ . vimwiki#vars#get_global('listsym_rejected')
\ . ']\]\s.*$/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell'
elseif vimwiki#vars#get_global('hl_cb_checked') == 2 elseif vimwiki#vars#get_global('hl_cb_checked') == 2
execute 'syntax match VimwikiCheckBoxDone /'.vimwiki#vars#get_syntaxlocal('rxListItemAndChildren').'/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell' execute 'syntax match VimwikiCheckBoxDone /'
\ . vimwiki#vars#get_syntaxlocal('rxListItemAndChildren')
\ .'/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell'
endif endif
execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn').'/ contains=VimwikiEqInChar' execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn').
execute 'syntax match VimwikiEqInT /'.vimwiki#vars#get_syntaxlocal('rxEqIn').'/ contained contains=VimwikiEqInCharT' \ '/ contains=VimwikiEqInChar'
execute 'syntax match VimwikiEqInT /'.vimwiki#vars#get_syntaxlocal('rxEqIn').
\ '/ contained contains=VimwikiEqInCharT'
execute 'syntax match VimwikiBold /'.vimwiki#vars#get_syntaxlocal('rxBold').'/ contains=VimwikiBoldChar,@Spell' execute 'syntax match VimwikiBold /'.vimwiki#vars#get_syntaxlocal('rxBold').
execute 'syntax match VimwikiBoldT /'.vimwiki#vars#get_syntaxlocal('rxBold').'/ contained contains=VimwikiBoldCharT,@Spell' \ '/ contains=VimwikiBoldChar,@Spell'
execute 'syntax match VimwikiBoldT /'.vimwiki#vars#get_syntaxlocal('rxBold').
\ '/ contained contains=VimwikiBoldCharT,@Spell'
execute 'syntax match VimwikiItalic /'.vimwiki#vars#get_syntaxlocal('rxItalic').'/ contains=VimwikiItalicChar,@Spell' execute 'syntax match VimwikiItalic /'.vimwiki#vars#get_syntaxlocal('rxItalic').
execute 'syntax match VimwikiItalicT /'.vimwiki#vars#get_syntaxlocal('rxItalic').'/ contained contains=VimwikiItalicCharT,@Spell' \ '/ contains=VimwikiItalicChar,@Spell'
execute 'syntax match VimwikiItalicT /'.vimwiki#vars#get_syntaxlocal('rxItalic').
\ '/ contained contains=VimwikiItalicCharT,@Spell'
execute 'syntax match VimwikiBoldItalic /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell' execute 'syntax match VimwikiBoldItalic /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').
execute 'syntax match VimwikiBoldItalicT /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').'/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell' \ '/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
execute 'syntax match VimwikiBoldItalicT /'.vimwiki#vars#get_syntaxlocal('rxBoldItalic').
\ '/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell'
execute 'syntax match VimwikiItalicBold /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell' execute 'syntax match VimwikiItalicBold /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').
execute 'syntax match VimwikiItalicBoldT /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').'/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell' \ '/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
execute 'syntax match VimwikiItalicBoldT /'.vimwiki#vars#get_syntaxlocal('rxItalicBold').
\ '/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell'
execute 'syntax match VimwikiDelText /'.vimwiki#vars#get_syntaxlocal('rxDelText').'/ contains=VimwikiDelTextChar,@Spell' execute 'syntax match VimwikiDelText /'.vimwiki#vars#get_syntaxlocal('rxDelText').
execute 'syntax match VimwikiDelTextT /'.vimwiki#vars#get_syntaxlocal('rxDelText').'/ contained contains=VimwikiDelTextChar,@Spell' \ '/ contains=VimwikiDelTextChar,@Spell'
execute 'syntax match VimwikiDelTextT /'.vimwiki#vars#get_syntaxlocal('rxDelText').
\ '/ contained contains=VimwikiDelTextChar,@Spell'
execute 'syntax match VimwikiSuperScript /'.vimwiki#vars#get_syntaxlocal('rxSuperScript').'/ contains=VimwikiSuperScriptChar,@Spell' execute 'syntax match VimwikiSuperScript /'.vimwiki#vars#get_syntaxlocal('rxSuperScript').
execute 'syntax match VimwikiSuperScriptT /'.vimwiki#vars#get_syntaxlocal('rxSuperScript').'/ contained contains=VimwikiSuperScriptCharT,@Spell' \ '/ contains=VimwikiSuperScriptChar,@Spell'
execute 'syntax match VimwikiSuperScriptT /'.vimwiki#vars#get_syntaxlocal('rxSuperScript').
\ '/ contained contains=VimwikiSuperScriptCharT,@Spell'
execute 'syntax match VimwikiSubScript /'.vimwiki#vars#get_syntaxlocal('rxSubScript').'/ contains=VimwikiSubScriptChar,@Spell' execute 'syntax match VimwikiSubScript /'.vimwiki#vars#get_syntaxlocal('rxSubScript').
execute 'syntax match VimwikiSubScriptT /'.vimwiki#vars#get_syntaxlocal('rxSubScript').'/ contained contains=VimwikiSubScriptCharT,@Spell' \ '/ contains=VimwikiSubScriptChar,@Spell'
execute 'syntax match VimwikiSubScriptT /'.vimwiki#vars#get_syntaxlocal('rxSubScript').
\ '/ contained contains=VimwikiSubScriptCharT,@Spell'
execute 'syntax match VimwikiCode /'.vimwiki#vars#get_syntaxlocal('rxCode').
\ '/ contains=VimwikiCodeChar'
execute 'syntax match VimwikiCodeT /'.vimwiki#vars#get_syntaxlocal('rxCode').
\ '/ contained contains=VimwikiCodeCharT'
execute 'syntax match VimwikiCode /'.vimwiki#vars#get_syntaxlocal('rxCode').'/ contains=VimwikiCodeChar'
execute 'syntax match VimwikiCodeT /'.vimwiki#vars#get_syntaxlocal('rxCode').'/ contained contains=VimwikiCodeCharT'
" <hr> horizontal rule " <hr> horizontal rule
execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/' execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/'
@ -279,9 +327,14 @@ execute 'syntax region VimwikiMath start=/'.vimwiki#vars#get_syntaxlocal('rxMath
" placeholders " placeholders
syntax match VimwikiPlaceholder /^\s*%nohtml\s*$/ syntax match VimwikiPlaceholder /^\s*%nohtml\s*$/
syntax match VimwikiPlaceholder /^\s*%title\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam syntax match VimwikiPlaceholder
syntax match VimwikiPlaceholder /^\s*%template\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam \ /^\s*%title\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
syntax match VimwikiPlaceholderParam /\s.*/ contained syntax match VimwikiPlaceholder
\ /^\s*%date\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
syntax match VimwikiPlaceholder
\ /^\s*%template\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
syntax match VimwikiPlaceholderParam /.*/ contained
" html tags " html tags
if vimwiki#vars#get_global('valid_html_tags') != '' if vimwiki#vars#get_global('valid_html_tags') != ''
@ -291,16 +344,16 @@ if vimwiki#vars#get_global('valid_html_tags') != ''
execute 'syntax match VimwikiItalic #\c<i>.\{-}</i># contains=VimwikiHTMLTag' execute 'syntax match VimwikiItalic #\c<i>.\{-}</i># contains=VimwikiHTMLTag'
execute 'syntax match VimwikiUnderline #\c<u>.\{-}</u># contains=VimwikiHTMLTag' execute 'syntax match VimwikiUnderline #\c<u>.\{-}</u># contains=VimwikiHTMLTag'
execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment').'/ contains=@Spell' execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment').
\ '/ contains=@Spell,VimwikiTodo'
endif endif
" tags " tags
execute 'syntax match VimwikiTag /'.vimwiki#vars#get_syntaxlocal('rxTags').'/' execute 'syntax match VimwikiTag /'.vimwiki#vars#get_syntaxlocal('rxTags').'/'
" }}}
" header groups highlighting "{{{
" header groups highlighting
if vimwiki#vars#get_global('hl_headers') == 0 if vimwiki#vars#get_global('hl_headers') == 0
" Strangely in default colorscheme Title group is not set to bold for cterm... " Strangely in default colorscheme Title group is not set to bold for cterm...
if !exists("g:colors_name") if !exists("g:colors_name")
@ -311,12 +364,13 @@ if vimwiki#vars#get_global('hl_headers') == 0
endfor endfor
else else
for s:i in range(1,6) for s:i in range(1,6)
execute 'hi def VimwikiHeader'.s:i.' guibg=bg guifg='.vimwiki#vars#get_global('hcolor_guifg_'.&bg)[s:i-1].' gui=bold ctermfg='.vimwiki#vars#get_global('ctermfg_'.&bg)[s:i-1].' term=bold cterm=bold' execute 'hi def VimwikiHeader'.s:i.' guibg=bg guifg='
\ .vimwiki#vars#get_global('hcolor_guifg_'.&bg)[s:i-1].' gui=bold ctermfg='
\ .vimwiki#vars#get_global('hcolor_ctermfg_'.&bg)[s:i-1].' term=bold cterm=bold'
endfor endfor
endif endif
"}}}
" syntax group highlighting "{{{
hi def link VimwikiMarkers Normal hi def link VimwikiMarkers Normal
@ -354,7 +408,6 @@ hi def link VimwikiLinkT VimwikiLink
hi def link VimwikiList Identifier hi def link VimwikiList Identifier
hi def link VimwikiListTodo VimwikiList hi def link VimwikiListTodo VimwikiList
hi def link VimwikiCheckBoxDone Comment hi def link VimwikiCheckBoxDone Comment
hi def link VimwikiEmoticons Character
hi def link VimwikiHR Identifier hi def link VimwikiHR Identifier
hi def link VimwikiTag Keyword hi def link VimwikiTag Keyword
@ -398,15 +451,17 @@ hi def link VimwikiCodeCharT VimwikiMarkers
hi def link VimwikiHeaderCharT VimwikiMarkers hi def link VimwikiHeaderCharT VimwikiMarkers
hi def link VimwikiLinkCharT VimwikiLinkT hi def link VimwikiLinkCharT VimwikiLinkT
hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT
"}}}
" Load syntax-specific functionality " Load syntax-specific functionality
call vimwiki#u#reload_regexes_custom() call vimwiki#u#reload_regexes_custom()
" FIXME it now does not make sense to pretend there is a single syntax "vimwiki" " FIXME it now does not make sense to pretend there is a single syntax "vimwiki"
let b:current_syntax="vimwiki" let b:current_syntax="vimwiki"
" EMBEDDED syntax setup "{{{
" EMBEDDED syntax setup
let s:nested = vimwiki#vars#get_wikilocal('nested_syntaxes') let s:nested = vimwiki#vars#get_wikilocal('nested_syntaxes')
if vimwiki#vars#get_wikilocal('automatic_nested_syntaxes') if vimwiki#vars#get_wikilocal('automatic_nested_syntaxes')
let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), "keep") let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), "keep")
@ -419,12 +474,14 @@ if !empty(s:nested)
\ vimwiki#vars#get_syntaxlocal('rxPreEnd'), 'VimwikiPre') \ vimwiki#vars#get_syntaxlocal('rxPreEnd'), 'VimwikiPre')
endfor endfor
endif endif
" LaTeX " LaTeX
call vimwiki#base#nested_syntax('tex', call vimwiki#base#nested_syntax('tex',
\ vimwiki#vars#get_syntaxlocal('rxMathStart').'\%(.*[[:blank:][:punct:]]\)\?'. \ vimwiki#vars#get_syntaxlocal('rxMathStart').'\%(.*[[:blank:][:punct:]]\)\?'.
\ '\%([[:blank:][:punct:]].*\)\?', \ '\%([[:blank:][:punct:]].*\)\?',
\ vimwiki#vars#get_syntaxlocal('rxMathEnd'), 'VimwikiMath') \ vimwiki#vars#get_syntaxlocal('rxMathEnd'), 'VimwikiMath')
"}}}
syntax spell toplevel syntax spell toplevel

View File

@ -1,13 +1,16 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki syntax file " Vimwiki syntax file
" Desc: Defines default syntax " Description: Defines default syntax
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" s:default_syntax is kind of a reference to the dict in " s:default_syntax is kind of a reference to the dict in
" g:vimwiki_syntax_variables['default']. It is used here simply as an " g:vimwiki_syntax_variables['default']. It is used here simply as an
" abbreviation for the latter. " abbreviation for the latter.
let s:default_syntax = g:vimwiki_syntax_variables['default'] let s:default_syntax = g:vimwiki_syntax_variables['default']
" text: $ equation_inline $ " text: $ equation_inline $
let s:default_syntax.rxEqIn = '\$[^$`]\+\$' let s:default_syntax.rxEqIn = '\$[^$`]\+\$'
let s:default_syntax.char_eqin = '\$' let s:default_syntax.char_eqin = '\$'
@ -97,8 +100,11 @@ let s:default_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:''[:space:]]\+:\)\+\%(\s\|$\
let s:default_syntax.header_search = '^\s*\(=\{1,6}\)\([^=].*[^=]\)\1\s*$' let s:default_syntax.header_search = '^\s*\(=\{1,6}\)\([^=].*[^=]\)\1\s*$'
let s:default_syntax.header_match = '^\s*\(=\{1,6}\)=\@!\s*__Header__\s*\1=\@!\s*$' let s:default_syntax.header_match = '^\s*\(=\{1,6}\)=\@!\s*__Header__\s*\1=\@!\s*$'
let s:default_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' let s:default_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*'.
let s:default_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@=' \ '[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@='
let s:default_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*'.
\ '\%([[:punct:]]\|\s\|$\)\@='
let s:default_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' let s:default_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]'
let s:default_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' let s:default_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)'
let s:default_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:\([^:[:space:]]\+:\)*\(\s\|$\)' let s:default_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'.
\ '\([^:[:space:]]\+:\)*\(\s\|$\)'

View File

@ -1,10 +1,12 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki syntax file " Vimwiki syntax file
" Desc: Defines markdown syntax " Description: Defines markdown syntax
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" see the comments in vimwiki_default.vim for some info about this file " see the comments in vimwiki_default.vim for some info about this file
let s:markdown_syntax = g:vimwiki_syntax_variables['markdown'] let s:markdown_syntax = g:vimwiki_syntax_variables['markdown']
" text: $ equation_inline $ " text: $ equation_inline $
@ -87,13 +89,16 @@ let s:markdown_syntax.rxPreEnd = '```'
let s:markdown_syntax.rxMathStart = '\$\$' let s:markdown_syntax.rxMathStart = '\$\$'
let s:markdown_syntax.rxMathEnd = '\$\$' let s:markdown_syntax.rxMathEnd = '\$\$'
let s:markdown_syntax.rxComment = '^\s*%%.*$' let s:markdown_syntax.rxComment = '^\s*%%.*$\|<!--[^>]*-->'
let s:markdown_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:[:space:]]\+:\)\+\%(\s\|$\)\@=' let s:markdown_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:[:space:]]\+:\)\+\%(\s\|$\)\@='
let s:markdown_syntax.header_search = '^\s*\(#\{1,6}\)\([^#].*\)$' let s:markdown_syntax.header_search = '^\s*\(#\{1,6}\)\([^#].*\)$'
let s:markdown_syntax.header_match = '^\s*\(#\{1,6}\)#\@!\s*__Header__\s*$' let s:markdown_syntax.header_match = '^\s*\(#\{1,6}\)#\@!\s*__Header__\s*$'
let s:markdown_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' let s:markdown_syntax.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs'.
let s:markdown_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*\%([[:punct:]]\|\s\|$\)\@=' \ '\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@='
let s:markdown_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' "XXX plus markdown-style links let s:markdown_syntax.bold_match = '\%(^\|\s\|[[:punct:]]\)\@<=\*__Text__\*'.
\ '\%([[:punct:]]\|\s\|$\)\@='
let s:markdown_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]'
let s:markdown_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' let s:markdown_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)'
let s:markdown_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:\([^:[:space:]]\+:\)*\(\s\|$\)' let s:markdown_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'.
\ '\([^:[:space:]]\+:\)*\(\s\|$\)'

View File

@ -4,41 +4,44 @@
function! s:add_target_syntax_ON(target, type)
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
function! s:add_target_syntax_ON(target, type) " {{{
let prefix0 = 'syntax match '.a:type.' `' let prefix0 = 'syntax match '.a:type.' `'
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char' let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
let prefix1 = 'syntax match '.a:type.'T `' let prefix1 = 'syntax match '.a:type.'T `'
let suffix1 = '` display contained' let suffix1 = '` display contained'
execute prefix0. a:target. suffix0 execute prefix0. a:target. suffix0
execute prefix1. a:target. suffix1 execute prefix1. a:target. suffix1
endfunction "}}} endfunction
function! s:add_target_syntax_OFF(target, type) " {{{
function! s:add_target_syntax_OFF(target, type)
let prefix0 = 'syntax match VimwikiNoExistsLink `' let prefix0 = 'syntax match VimwikiNoExistsLink `'
let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char' let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char'
let prefix1 = 'syntax match VimwikiNoExistsLinkT `' let prefix1 = 'syntax match VimwikiNoExistsLinkT `'
let suffix1 = '` display contained' let suffix1 = '` display contained'
execute prefix0. a:target. suffix0 execute prefix0. a:target. suffix0
execute prefix1. a:target. suffix1 execute prefix1. a:target. suffix1
endfunction "}}} endfunction
function! s:wrap_wikilink1_rx(target) "{{{
function! s:wrap_wikilink1_rx(target)
return vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidPrefix') . a:target. return vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidPrefix') . a:target.
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidSuffix') \ vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidSuffix')
endfunction "}}} endfunction
function! s:existing_mkd_refs() "{{{
function! s:existing_mkd_refs()
return keys(vimwiki#markdown_base#scan_reflinks()) return keys(vimwiki#markdown_base#scan_reflinks())
endfunction "}}} endfunction
function! s:highlight_existing_links() "{{{
function! s:highlight_existing_links()
" Wikilink1 " Wikilink1
" Conditional highlighting that depends on the existence of a wiki file or " Conditional highlighting that depends on the existence of a wiki file or
" directory is only available for *schemeless* wiki links " directory is only available for *schemeless* wiki links
" Links are set up upon BufEnter (see plugin/...) " Links are set up upon BufEnter (see plugin/...)
let safe_links = '\%('.vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikifiles')) . let safe_links = '\%('.
\ vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikifiles')) .
\ '\%(#[^|]*\)\?\|#[^|]*\)' \ '\%(#[^|]*\)\?\|#[^|]*\)'
" Wikilink1 Dirs set up upon BufEnter (see plugin/...) " Wikilink1 Dirs set up upon BufEnter (see plugin/...)
let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs')) let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs'))
@ -78,7 +81,7 @@ function! s:highlight_existing_links() "{{{
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')),
\ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') \ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
endfunction "}}} endfunction
" use max highlighting - could be quite slow if there are too many wikifiles " use max highlighting - could be quite slow if there are too many wikifiles
@ -93,9 +96,11 @@ else
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1') call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1')
endif endif
" Weblink " Weblink
call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink1'), 'VimwikiWeblink1') call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink1'), 'VimwikiWeblink1')
" WikiLink " WikiLink
" All remaining schemes are highlighted automatically " All remaining schemes are highlighted automatically
let s:rxSchemes = '\%('. let s:rxSchemes = '\%('.
@ -106,26 +111,28 @@ let s:rxSchemes = '\%('.
" a) match [nonwiki-scheme-URL] " a) match [nonwiki-scheme-URL]
let s:target = vimwiki#base#apply_template( let s:target = vimwiki#base#apply_template(
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')), \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')),
\ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'), vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') \ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'),
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1') call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1')
" b) match [DESCRIPTION][nonwiki-scheme-URL] " b) match [DESCRIPTION][nonwiki-scheme-URL]
let s:target = vimwiki#base#apply_template( let s:target = vimwiki#base#apply_template(
\ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')),
\ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'), vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') \ s:rxSchemes . vimwiki#vars#get_syntaxlocal('rxWikiLink1Url'),
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '')
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1') call s:add_target_syntax_ON(s:wrap_wikilink1_rx(s:target), 'VimwikiWikiLink1')
" }}}
" generic headers "{{{
" Header levels, 1-6 " Header levels, 1-6
for s:i in range(1,6) for s:i in range(1,6)
execute 'syntax match VimwikiHeader'.s:i.' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i).'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell' execute 'syntax match VimwikiHeader'.s:i.' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i).
\ '/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,'.
\ 'VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
endfor endfor
" }}}
" concealed chars " {{{
" concealed chars
if exists("+conceallevel") if exists("+conceallevel")
syntax conceal on syntax conceal on
endif endif
@ -136,24 +143,26 @@ syntax spell toplevel
" is present) and may be concealed " is present) and may be concealed
let s:options = ' contained transparent contains=NONE' let s:options = ' contained transparent contains=NONE'
" conceal wikilink1 " conceal wikilink1
execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rx_wikilink_md_prefix').'/'.s:options execute 'syn match VimwikiWikiLink1Char /'.
execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rx_wikilink_md_suffix').'/'.s:options \ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_prefix').'/'.s:options
execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rxWikiLink1Prefix1').'/'.s:options execute 'syn match VimwikiWikiLink1Char /'.
execute 'syn match VimwikiWikiLink1Char /'.vimwiki#vars#get_syntaxlocal('rxWikiLink1Suffix1').'/'.s:options \ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_suffix').'/'.s:options
execute 'syn match VimwikiWikiLink1Char /'.
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Prefix1').'/'.s:options
execute 'syn match VimwikiWikiLink1Char /'.
\ vimwiki#vars#get_syntaxlocal('rxWikiLink1Suffix1').'/'.s:options
" conceal weblink1 " conceal weblink1
execute 'syn match VimwikiWeblink1Char "'.vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options execute 'syn match VimwikiWeblink1Char "'.
execute 'syn match VimwikiWeblink1Char "'.vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options \ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options
execute 'syn match VimwikiWeblink1Char "'.
\ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options
if exists("+conceallevel") if exists("+conceallevel")
syntax conceal off syntax conceal off
endif endif
" }}}
" non concealed chars " {{{
" }}}
" main syntax groups {{{
" Tables " Tables
syntax match VimwikiTableRow /^\s*|.\+|\s*$/ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
@ -162,7 +171,6 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
\ VimwikiWeblink1T, \ VimwikiWeblink1T,
\ VimwikiWikiLink1T, \ VimwikiWikiLink1T,
\ VimwikiNoExistsLinkT, \ VimwikiNoExistsLinkT,
\ VimwikiEmoticons,
\ VimwikiTodo, \ VimwikiTodo,
\ VimwikiBoldT, \ VimwikiBoldT,
\ VimwikiItalicT, \ VimwikiItalicT,
@ -175,22 +183,12 @@ syntax match VimwikiTableRow /^\s*|.\+|\s*$/
\ VimwikiEqInT, \ VimwikiEqInT,
\ @Spell \ @Spell
" }}}
" header groups highlighting "{{{
"}}}
" syntax group highlighting "{{{ " syntax group highlighting
hi def link VimwikiWeblink1 VimwikiLink hi def link VimwikiWeblink1 VimwikiLink
hi def link VimwikiWeblink1T VimwikiLink hi def link VimwikiWeblink1T VimwikiLink
hi def link VimwikiWikiLink1 VimwikiLink hi def link VimwikiWikiLink1 VimwikiLink
hi def link VimwikiWikiLink1T VimwikiLink hi def link VimwikiWikiLink1T VimwikiLink
"}}}
" EMBEDDED syntax setup "{{{
"}}}
"

View File

@ -1,10 +1,12 @@
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79 " vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki syntax file " Vimwiki syntax file
" Desc: Defines mediaWiki syntax " Description: Defines mediaWiki syntax
" Home: https://github.com/vimwiki/vimwiki/ " Home: https://github.com/vimwiki/vimwiki/
" see the comments in vimwiki_default.vim for some info about this file " see the comments in vimwiki_default.vim for some info about this file
let s:media_syntax = g:vimwiki_syntax_variables['media'] let s:media_syntax = g:vimwiki_syntax_variables['media']
" text: $ equation_inline $ " text: $ equation_inline $
@ -78,5 +80,6 @@ let s:media_syntax.bold_match = '''''''__Text__'''''''
" ^- this strange looking thing is equivalent to "'''__Text__'''" but since we later " ^- this strange looking thing is equivalent to "'''__Text__'''" but since we later
" want to call escape() on this string, we must keep it in single quotes " want to call escape() on this string, we must keep it in single quotes
let s:media_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' let s:media_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]'
let s:media_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' " XXX rework to mediawiki categories format? let s:media_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)'
let s:media_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:\([^:[:space:]]\+:\)*\(\s\|$\)' " XXX rework to mediawiki categories format? let s:media_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'.
\ '\([^:[:space:]]\+:\)*\(\s\|$\)'