diff options
| author | Kumar Damani <damani.kumar@gmail.com> | 2019-05-16 22:16:09 +0000 |
|---|---|---|
| committer | Kumar Damani <damani.kumar@gmail.com> | 2019-05-16 22:16:09 +0000 |
| commit | 12564a8f73ebe721d415a04d36f7aac7091bea9d (patch) | |
| tree | bbc8a6bf6aabe832b3ee435eaa605dcac655fc5f /vim/.vim/plugged/vimwiki | |
| parent | 1241da7ab7a4e91248391ee9b045267bcbbeee4f (diff) | |
updating vimrc
Diffstat (limited to 'vim/.vim/plugged/vimwiki')
27 files changed, 0 insertions, 13907 deletions
diff --git a/vim/.vim/plugged/vimwiki/LICENSE b/vim/.vim/plugged/vimwiki/LICENSE deleted file mode 100644 index cdf8546..0000000 --- a/vim/.vim/plugged/vimwiki/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -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. diff --git a/vim/.vim/plugged/vimwiki/README-cn.md b/vim/.vim/plugged/vimwiki/README-cn.md deleted file mode 100644 index 60574ae..0000000 --- a/vim/.vim/plugged/vimwiki/README-cn.md +++ /dev/null @@ -1,161 +0,0 @@ -VimWiki —— Vim 个人 Wiki 插件 -============================================================================== - -[English](README.md) - - - * - -介绍 ------------------------------------------------------------------------------- - -Vimwiki 是 Vim 中的个人 Wiki —— 一组链接起来的、有独特语法高亮的文本文件。 - -通过 Vimwiki,你可以: - - * 组织笔记和想法 - * 管理待办事项 - * 编写文档 - * 坚持写日记 - * 将这一切导出成 HTML 网页 - -马上开始!按下 `<Leader>ww`(通常是 `\ww`)进入作为目录页的 wiki 文件,这个文件默认存放在 `~/vimwiki/index.wiki`。 - -在该文件中输入以下示例: - - = 我的个人知识库 = - * 任务列表 -- _昨天_ 就该完成的事!!! - * Gutenberg 计划 -- 好书给我力量。 - * 草稿 -- 临时记录一些东西。 - -把光标移到 `任务` 二字上,按 Enter(回车)创建链接。按下后,`任务`二字会变成 `[[任务]]` —— 这是一个 Vimwiki 链接。再次按 Enter 即可进入这个链接(打开新的 wiki 文件)。编辑这个新文件,保存,然后按 Backspace(退格)就能回到目录页。 - -如果 Vimwiki 链接长度不止一个单词(指的是英文单词),只需在 Visual 模式选择这段文本后按 Enter 即可。用上面的 `Gutenberg 计划` 试试吧。最终结果是这样: - - = 我的个人知识库 = - * [[任务列表]] -- _昨天_ 就该完成的事!!! - * [[Gutenberg 计划]] -- 好书给我力量。 - * 草稿 -- 临时记录一些东西。 - - -基本标记 ------------------------------------------------------------------------------- - - = 一级标题 = - == 二级标题 == - === 三级标题 === - - - *bold* -- 粗体文本 - _italic_ -- 斜体文本 - (应用于句中的汉字文本时,必须在标记前后加空格,例如:一段 *中文* 文本) - - [[wiki link]] -- wiki 链接 - [[wiki link|description]] -- 带有描述文本的 wiki 链接 - - -列表: - - * bullet list item 1(无编号列表) - - bullet list item 2 - - bullet list item 3 - * bullet list item 4 - * bullet list item 5 - * bullet list item 6 - * bullet list item 7 - - bullet list item 8 - - bullet list item 9 - - 1. numbered list item 1(有编号列表) - 2. numbered list item 2 - a) numbered list item 3 - b) numbered list item 4 - - -更多格式说明,请阅 `:h vimwiki-syntax` - - -键位绑定 ------------------------------------------------------------------------------- - -normal 模式: - - * `<Leader>ww` -- 打开默认的 wiki 目录文件 - * `<Leader>wt` -- 在新标签(Tab)中打开 wiki 目录文件 - * `<Leader>ws` -- 在多个 wiki 中选择并打开该 wiki 的目录文件 - * `<Leader>wd` -- 删除当前 wiki 文件 - * `<Leader>wr` -- 重命名当前 wiki 文件 - * `<Enter>` -- 创建或打开 wiki 链接 - * `<Shift-Enter>` -- 先上下分屏再打开 wiki 链接(若非链接则先创建) - * `<Ctrl-Enter>` -- 先左右分屏再打开 wiki 链接(若非链接则先创建) - * `<Backspace>` -- 返回之前浏览的 wiki 文件 - * `<Tab>` -- 跳到本文件中下一个 wiki 链接 - * `<Shift-Tab>` -- 跳到本文件中上一个 wiki 链接 - -更多快捷键说明,请阅 `:h vimwiki-mappings` - - -命令 ------------------------------------------------------------------------------- - - * `:Vimwiki2HTML` -- 将当前 wiki 文件转换成 HTML 网页 - * `:VimwikiAll2HTML` -- 把所有 wiki 文件转换成 HTML 网页 - * `:help vimwiki-commands` -- 显示全部命令 - - -安装 -============================================================================== - -准备工作 ------------------------------------------------------------------------------- - -确保在 `vimrc` 中加入了以下设置: - - set nocompatible - filetype plugin on - syntax on - -没有这些设置,Vimwiki 将无法正常工作。 - -通过 [Vim packages](http://vimhelp.appspot.com/repeat.txt.html#packages) 安装(Vim 7.4.1528 后) ------------------------------------------------------------------------------- - - git clone https://github.com/vimwiki/vimwiki.git ~/.vim/pack/plugins/start/vimwiki - -通过 [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332) 安装 ------------------------------------------------------------------------------- - - cd ~/.vim - mkdir bundle - cd bundle - git clone https://github.com/vimwiki/vimwiki.git - -通过 [Vim-Plug](https://github.com/junegunn/vim-plug) 安装 ------------------------------------------------------------------------------- - -在 `vimrc` 中加入以下插件设置: - - Plug 'vimwiki/vimwiki', { 'branch': 'dev' } - -然后运行 `:PlugInstall`。 - -通过 [Vundle](https://github.com/VundleVim/Vundle.vim) 安装 ------------------------------------------------------------------------------- - -在 `vimrc` 中加入 `Plugin 'vimwiki/vimwiki'`,然后执行: - - vim +PluginInstall +qall - -或者下载 [zip 压缩包](https://github.com/vimwiki/vimwiki/archive/master.zip)然后解压到 `~/.vim/bundle/` 目录下。 - -安装后,启动 Vim 并执行 `:Helptags` 以及 `:help vimwiki`,检查安装是否成功。 - - -获取帮助 -============================================================================== - -遇到问题?在 Freenode 的 IRC 频道 `#vimwiki`([网页聊天](https://webchat.freenode.net/?channels=#vimwiki))提问,或者发送问题到[邮件列表](https://groups.google.com/forum/#!forum/vimwiki)上吧。 - - ----- -\* 前面截图中用的是 [solarized 配色方案](https://github.com/altercation/vim-colors-solarized)以及 [lightline](https://github.com/itchyny/lightline.vim) 插件。 diff --git a/vim/.vim/plugged/vimwiki/README.md b/vim/.vim/plugged/vimwiki/README.md deleted file mode 100644 index a8a203a..0000000 --- a/vim/.vim/plugged/vimwiki/README.md +++ /dev/null @@ -1,170 +0,0 @@ -A Personal Wiki For Vim -============================================================================== - -[中文](README-cn.md) - - - * - -Intro ------------------------------------------------------------------------------- - -Vimwiki is a personal wiki for Vim -- a number of linked text files that have -their own syntax highlighting. - -With Vimwiki you can: - - * organize notes and ideas - * manage todo-lists - * write documentation - * maintain a diary - * export everything to HTML - -To do a quick start press `<Leader>ww` (this is usually `\ww`) to go to your index -wiki file. By default it is located in `~/vimwiki/index.wiki`. - -Feed it with the following example: - - = My knowledge base = - * Tasks -- things to be done _yesterday_!!! - * Project Gutenberg -- good books are power. - * Scratchpad -- various temporary stuff. - -Place your cursor on `Tasks` and press Enter to create a link. Once pressed, -`Tasks` will become `[[Tasks]]` -- a Vimwiki link. Press Enter again to -open it. Edit the file, save it, and then press Backspace to jump back to your -index. - -A Vimwiki link can be constructed from more than one word. Just visually -select the words to be linked and press Enter. Try it with `Project Gutenberg`. -The result should look something like: - - = My knowledge base = - * [[Tasks]] -- things to be done _yesterday_!!! - * [[Project Gutenberg]] -- good books are power. - * Scratchpad -- various temporary stuff. - - -Basic Markup ------------------------------------------------------------------------------- - - = Header1 = - == Header2 == - === Header3 === - - - *bold* -- bold text - _italic_ -- italic text - - [[wiki link]] -- wiki link - [[wiki link|description]] -- wiki link with description - - -Lists: - - * bullet list item 1 - - bullet list item 2 - - bullet list item 3 - * bullet list item 4 - * bullet list item 5 - * bullet list item 6 - * bullet list item 7 - - bullet list item 8 - - bullet list item 9 - - 1. numbered list item 1 - 2. numbered list item 2 - a) numbered list item 3 - b) numbered list item 4 - - -For other syntax elements, see `:h vimwiki-syntax` - - -Key bindings ------------------------------------------------------------------------------- - -normal mode: - - * `<Leader>ww` -- Open default wiki index file. - * `<Leader>wt` -- Open default wiki index file in a new tab. - * `<Leader>ws` -- Select and open wiki index file. - * `<Leader>wd` -- Delete wiki file you are in. - * `<Leader>wr` -- Rename wiki file you are in. - * `<Enter>` -- Follow/Create wiki link - * `<Shift-Enter>` -- Split and follow/create wiki link - * `<Ctrl-Enter>` -- Vertical split and follow/create wiki link - * `<Backspace>` -- Go back to parent(previous) wiki link - * `<Tab>` -- Find next wiki link - * `<Shift-Tab>` -- Find previous wiki link - -For more keys, see `:h vimwiki-mappings` - - -Commands ------------------------------------------------------------------------------- - - * `:Vimwiki2HTML` -- Convert current wiki link to HTML - * `:VimwikiAll2HTML` -- Convert all your wiki links to HTML - * `:help vimwiki-commands` -- list all commands - - -Installation -============================================================================== - -Prerequisites ------------------------------------------------------------------------------- - -Make sure you have these settings in your vimrc file: - - set nocompatible - filetype plugin on - syntax on - -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) ------------------------------------------------------------------------------- - - cd ~/.vim - mkdir bundle - cd bundle - git clone https://github.com/vimwiki/vimwiki.git - -Installation using [Vim-Plug](https://github.com/junegunn/vim-plug) ------------------------------------------------------------------------------- - -Add the following to the plugin-configuration in your vimrc: - - Plug 'vimwiki/vimwiki' - -Then run `:PlugInstall`. - -Installation using [Vundle](https://github.com/VundleVim/Vundle.vim) ------------------------------------------------------------------------------- - -Add `Plugin 'vimwiki/vimwiki'` to your vimrc file and run - - vim +PluginInstall +qall - -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. - - -Getting help -============================================================================== - -Have a question? Visit the IRC channel `#vimwiki` on Freenode ([webchat](https://webchat.freenode.net/?channels=#vimwiki)) -or post to the [mailing list](https://groups.google.com/forum/#!forum/vimwiki). - - ----- -\* Screenshots made with the [solarized colorscheme](https://github.com/altercation/vim-colors-solarized) -and [lightline](https://github.com/itchyny/lightline.vim) diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/base.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/base.vim deleted file mode 100644 index 2bb8c4d..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/base.vim +++ /dev/null @@ -1,2046 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Desc: Basic functionality -" Home: https://github.com/vimwiki/vimwiki/ - -if exists("g:loaded_vimwiki_auto") || &cp - finish -endif -let g:loaded_vimwiki_auto = 1 - - -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 - - -function! s:vimwiki_get_known_syntaxes() - " Getting all syntaxes that different wikis could have - let syntaxes = {} - let syntaxes['default'] = 1 - for wiki_nr in range(vimwiki#vars#number_of_wikis()) - let wiki_syntax = vimwiki#vars#get_wikilocal('syntax', wiki_nr) - let syntaxes[wiki_syntax] = 1 - endfor - " also consider the syntaxes from g:vimwiki_ext2syntax - for syn in values(vimwiki#vars#get_global('ext2syntax')) - let syntaxes[syn] = 1 - endfor - return keys(syntaxes) -endfunction - - -function! vimwiki#base#file_pattern(files) - " Get search regex from glob() - " string. Aim to support *all* special characters, forcing the user to choose - " names that are compatible with any external restrictions that they - " encounter (e.g. filesystem, wiki conventions, other syntaxes, ...). - " See: https://github.com/vimwiki-backup/vimwiki/issues/316 - " Change / to [/\\] to allow "Windows paths" - return '\V\%('.join(a:files, '\|').'\)\m' -endfunction - - -"FIXME TODO slow and faulty -function! vimwiki#base#subdir(path, filename) - let path = a:path - " ensure that we are not fooled by a symbolic link - "FIXME if we are not "fooled", we end up in a completely different wiki? - if a:filename !~# '^scp:' - let filename = resolve(a:filename) - else - let filename = a:filename - endif - let idx = 0 - "FIXME this can terminate in the middle of a path component! - while path[idx] ==? filename[idx] - let idx = idx + 1 - endwhile - - let p = split(strpart(filename, idx), '[/\\]') - let res = join(p[:-2], '/') - if len(res) > 0 - let res = res.'/' - endif - return res -endfunction - - -function! vimwiki#base#current_subdir() - return vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), expand('%:p')) -endfunction - - -function! vimwiki#base#invsubdir(subdir) - return substitute(a:subdir, '[^/\.]\+/', '../', 'g') -endfunction - - -" Returns: the number of the wiki a file belongs to or -1 if it doesn't belong -" to any registered wiki. -" The path can be the full path or just the directory of the file -function! vimwiki#base#find_wiki(path) - let bestmatch = -1 - let bestlen = 0 - let path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(a:path)) - for idx in range(vimwiki#vars#number_of_wikis()) - let idx_path = expand(vimwiki#vars#get_wikilocal('path', idx)) - let idx_path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(idx_path)) - let common_pfx = vimwiki#path#path_common_pfx(idx_path, path) - if vimwiki#path#is_equal(common_pfx, idx_path) - if len(common_pfx) > bestlen - let bestlen = len(common_pfx) - let bestmatch = idx - endif - endif - endfor - - return bestmatch -endfunction - - -" THE central function of Vimwiki. Extract infos about the target from a link. -" If the second parameter is present, which should be an absolute file path, it -" is assumed that the link appears in that file. Without it, the current file -" is used. -function! vimwiki#base#resolve_link(link_text, ...) - if a:0 - let source_wiki = vimwiki#base#find_wiki(a:1) - let source_file = a:1 - else - let source_wiki = vimwiki#vars#get_bufferlocal('wiki_nr') - let source_file = vimwiki#path#current_wiki_file() - endif - - let link_text = a:link_text - - - let link_infos = { - \ 'index': -1, - \ 'scheme': '', - \ 'filename': '', - \ 'anchor': '', - \ } - - if link_text == '' - return link_infos - endif - - let scheme = matchstr(link_text, '^\zs'.vimwiki#vars#get_global('rxSchemes').'\ze:') - if scheme == '' - let link_infos.scheme = 'wiki'.source_wiki - else - let link_infos.scheme = scheme - - if link_infos.scheme !~# '\mwiki\d\+\|diary\|local\|file' - let link_infos.filename = link_text " unknown scheme, may be a weblink - return link_infos - endif - - let link_text = matchstr(link_text, '^'.vimwiki#vars#get_global('rxSchemes').':\zs.*\ze') - endif - - let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' || link_infos.scheme ==# 'diary' - - " extract anchor - if is_wiki_link - let split_lnk = split(link_text, '#', 1) - let link_text = split_lnk[0] - if len(split_lnk) > 1 && split_lnk[-1] != '' - let link_infos.anchor = join(split_lnk[1:], '#') - endif - if link_text == '' " because the link was of the form '#anchor' - let link_text = fnamemodify(source_file, ':p:t:r') - endif - endif - - " check if absolute or relative path - if is_wiki_link && link_text[0] == '/' - if link_text != '/' - let link_text = link_text[1:] - endif - let is_relative = 0 - elseif !is_wiki_link && vimwiki#path#is_absolute(link_text) - let is_relative = 0 - else - let is_relative = 1 - let root_dir = fnamemodify(source_file, ':p:h') . '/' - endif - - - " extract the other items depending on the scheme - if link_infos.scheme =~# '\mwiki\d\+' - let link_infos.index = eval(matchstr(link_infos.scheme, '\D\+\zs\d\+\ze')) - if link_infos.index < 0 || link_infos.index >= vimwiki#vars#number_of_wikis() - let link_infos.filename = '' - return link_infos - endif - - if !is_relative || link_infos.index != source_wiki - let root_dir = vimwiki#vars#get_wikilocal('path', link_infos.index) - endif - - let link_infos.filename = root_dir . link_text - - if vimwiki#path#is_link_to_dir(link_text) - if vimwiki#vars#get_global('dir_link') != '' - let link_infos.filename .= vimwiki#vars#get_global('dir_link') . - \ vimwiki#vars#get_wikilocal('ext', link_infos.index) - endif - else - let link_infos.filename .= vimwiki#vars#get_wikilocal('ext', link_infos.index) - endif - - elseif link_infos.scheme ==# 'diary' - let link_infos.index = source_wiki - - let link_infos.filename = - \ vimwiki#vars#get_wikilocal('path', link_infos.index) . - \ vimwiki#vars#get_wikilocal('diary_rel_path', link_infos.index) . - \ link_text . - \ vimwiki#vars#get_wikilocal('ext', link_infos.index) - elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local') && is_relative - let link_infos.filename = simplify(root_dir . link_text) - else " absolute file link - " collapse repeated leading "/"'s within a link - let link_text = substitute(link_text, '\m^/\+', '/', '') - " expand ~/ - let link_text = fnamemodify(link_text, ':p') - let link_infos.filename = simplify(link_text) - endif - - let link_infos.filename = vimwiki#path#normalize(link_infos.filename) - return link_infos -endfunction - - -function! vimwiki#base#system_open_link(url) - " handlers - function! s:win32_handler(url) - "http://vim.wikia.com/wiki/Opening_current_Vim_file_in_your_Windows_browser - "disable 'shellslash', otherwise the url will be enclosed in single quotes, - "which is problematic - "see https://github.com/vimwiki/vimwiki/issues/54#issuecomment-48011289 - if exists('+shellslash') - let old_ssl = &shellslash - set noshellslash - let url = shellescape(a:url, 1) - let &shellslash = old_ssl - else - let url = shellescape(a:url, 1) - endif - if &l:shell ==? "powershell" - execute 'silent ! start ' . a:url - else - execute 'silent ! start "Title" /B ' . a:url - endif - endfunction - function! s:macunix_handler(url) - call system('open ' . shellescape(a:url).' &') - endfunction - function! s:linux_handler(url) - call system('xdg-open ' . shellescape(a:url).' &') - endfunction - try - if vimwiki#u#is_windows() - call s:win32_handler(a:url) - return - elseif vimwiki#u#is_macos() - call s:macunix_handler(a:url) - return - else - call s:linux_handler(a:url) - return - endif - endtry - echomsg 'Vimwiki Error: Default Vimwiki link handler was unable to open the HTML file!' -endfunction - - -function! vimwiki#base#open_link(cmd, link, ...) - let link_infos = {} - if a:0 - let link_infos = vimwiki#base#resolve_link(a:link, a:1) - else - let link_infos = vimwiki#base#resolve_link(a:link) - endif - - if link_infos.filename == '' - echomsg 'Vimwiki Error: Unable to resolve link!' - return - endif - - let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' || link_infos.scheme =~# 'diary' - - let update_prev_link = is_wiki_link && - \ !vimwiki#path#is_equal(link_infos.filename, vimwiki#path#current_wiki_file()) - - let vimwiki_prev_link = [] - " update previous link for wiki pages - if update_prev_link - if a:0 - let vimwiki_prev_link = [a:1, []] - elseif &ft ==# 'vimwiki' - let vimwiki_prev_link = [vimwiki#path#current_wiki_file(), getpos('.')] - endif - endif - - " open/edit - if is_wiki_link - call vimwiki#base#edit_file(a:cmd, link_infos.filename, link_infos.anchor, - \ vimwiki_prev_link, update_prev_link) - else - call vimwiki#base#system_open_link(link_infos.filename) - endif -endfunction - - -function! vimwiki#base#get_globlinks_escaped() abort - " only get links from the current dir - " change to the directory of the current file - let orig_pwd = getcwd() - lcd! %:h - " all path are relative to the current file's location - let globlinks = glob('*'.vimwiki#vars#get_wikilocal('ext'), 1)."\n" - " remove extensions - let globlinks = substitute(globlinks, '\'.vimwiki#vars#get_wikilocal('ext').'\ze\n', '', 'g') - " restore the original working directory - exe 'lcd! '.orig_pwd - " convert to a List - let lst = split(globlinks, '\n') - " Apply fnameescape() to each item - call map(lst, 'fnameescape(v:val)') - " Convert back to newline-separated list - let globlinks = join(lst, "\n") - " return all escaped links as a single newline-separated string - return globlinks -endfunction - - -function! vimwiki#base#generate_links() - let lines = [] - - let links = vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) - call sort(links) - - let bullet = repeat(' ', vimwiki#lst#get_list_margin()) . vimwiki#lst#default_symbol().' ' - for link in links - let abs_filepath = vimwiki#path#abs_path_of_link(link) - if !s:is_diary_file(abs_filepath) - call add(lines, bullet. - \ s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), - \ '__LinkUrl__', link, '')) - endif - endfor - - let links_rx = '\m^\s*'.vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - - call vimwiki#base#update_listing_in_buffer(lines, 'Generated Links', links_rx, line('$')+1, 1) -endfunction - - -function! vimwiki#base#goto(...) - let key = a:1 - let anchor = a:0 > 1 ? a:2 : '' - - call vimwiki#base#edit_file(':e', - \ vimwiki#vars#get_wikilocal('path') . key . vimwiki#vars#get_wikilocal('ext'), - \ anchor) -endfunction - - -function! vimwiki#base#backlinks() - let current_filename = expand("%:p") - let locations = [] - for idx in range(vimwiki#vars#number_of_wikis()) - let syntax = vimwiki#vars#get_wikilocal('syntax', idx) - let wikifiles = vimwiki#base#find_files(idx, 0) - for source_file in wikifiles - let links = s:get_links(source_file, idx) - for [target_file, _, lnum, col] in links - " don't include links from the current file to itself - if vimwiki#path#is_equal(target_file, current_filename) && - \ !vimwiki#path#is_equal(target_file, source_file) - call add(locations, {'filename':source_file, 'lnum':lnum, 'col':col}) - endif - endfor - endfor - endfor - - if empty(locations) - echomsg 'Vimwiki: No other file links to this file' - else - call setloclist(0, locations, 'r') - lopen - endif -endfunction - - -" Returns: a list containing all files of the given wiki as absolute file path. -" If the given wiki number is negative, the diary of the current wiki is used -" If the second argument is not zero, only directories are found -function! vimwiki#base#find_files(wiki_nr, directories_only) - let wiki_nr = a:wiki_nr - if wiki_nr >= 0 - let root_directory = vimwiki#vars#get_wikilocal('path', wiki_nr) - else - let root_directory = vimwiki#vars#get_wikilocal('path') . - \ vimwiki#vars#get_wikilocal('diary_rel_path') - let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') - endif - if a:directories_only - let ext = '/' - else - let ext = vimwiki#vars#get_wikilocal('ext', wiki_nr) - endif - " if current wiki is temporary -- was added by an arbitrary wiki file then do - " not search wiki files in subdirectories. Or it would hang the system if - " wiki file was created in $HOME or C:/ dirs. - if vimwiki#vars#get_wikilocal('is_temporary_wiki', wiki_nr) - let pattern = '*'.ext - else - let pattern = '**/*'.ext - endif - return split(globpath(root_directory, pattern), '\n') -endfunction - - -" Returns: a list containing the links to get from the current file to all wiki -" files in the given wiki. -" If the given wiki number is negative, the diary of the current wiki is used. -" If also_absolute_links is nonzero, also return links of the form /file -function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links) - let files = vimwiki#base#find_files(a:wiki_nr, 0) - if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') - let cwd = vimwiki#path#wikify_path(expand('%:p:h')) - elseif a:wiki_nr < 0 - let cwd = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') - else - let cwd = vimwiki#vars#get_wikilocal('path', a:wiki_nr) - endif - let result = [] - for wikifile in files - let wikifile = fnamemodify(wikifile, ':r') " strip extension - let wikifile = vimwiki#path#relpath(cwd, wikifile) - call add(result, wikifile) - endfor - if a:also_absolute_links - for wikifile in files - if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') - let cwd = vimwiki#vars#get_wikilocal('path') - elseif a:wiki_nr < 0 - let cwd = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') - endif - let wikifile = fnamemodify(wikifile, ':r') " strip extension - let wikifile = '/'.vimwiki#path#relpath(cwd, wikifile) - call add(result, wikifile) - endfor - endif - return result -endfunction - - -" Returns: a list containing the links to all directories from the current file -function! vimwiki#base#get_wiki_directories(wiki_nr) - let dirs = vimwiki#base#find_files(a:wiki_nr, 1) - if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') - let cwd = vimwiki#path#wikify_path(expand('%:p:h')) - let root_dir = vimwiki#vars#get_wikilocal('path') - else - let cwd = vimwiki#vars#get_wikilocal('path', a:wiki_nr) - endif - let result = ['./'] - for wikidir in dirs - let wikidir_relative = vimwiki#path#relpath(cwd, wikidir) - call add(result, wikidir_relative) - if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') - let wikidir_absolute = '/'.vimwiki#path#relpath(root_dir, wikidir) - call add(result, wikidir_absolute) - endif - endfor - return result -endfunction - - -function! vimwiki#base#get_anchors(filename, syntax) - if !filereadable(a:filename) - return [] - endif - - let rxheader = vimwiki#vars#get_syntaxlocal('header_search', a:syntax) - let rxbold = vimwiki#vars#get_syntaxlocal('bold_search', a:syntax) - let rxtag = vimwiki#vars#get_syntaxlocal('tag_search', a:syntax) - - let anchor_level = ['', '', '', '', '', '', ''] - let anchors = [] - let current_complete_anchor = '' - for line in readfile(a:filename) - - " collect headers - let h_match = matchlist(line, rxheader) - if !empty(h_match) - let header = vimwiki#u#trim(h_match[2]) - let level = len(h_match[1]) - call add(anchors, header) - let anchor_level[level-1] = header - for l in range(level, 6) - let anchor_level[l] = '' - endfor - if level == 1 - let current_complete_anchor = header - else - let current_complete_anchor = '' - for l in range(level-1) - if anchor_level[l] != '' - let current_complete_anchor .= anchor_level[l].'#' - endif - endfor - let current_complete_anchor .= header - call add(anchors, current_complete_anchor) - endif - endif - - " collect bold text (there can be several in one line) - let bold_count = 1 - while 1 - let bold_text = matchstr(line, rxbold, 0, bold_count) - if bold_text == '' - break - endif - call add(anchors, bold_text) - if current_complete_anchor != '' - call add(anchors, current_complete_anchor.'#'.bold_text) - endif - let bold_count += 1 - endwhile - - " collect tags text (there can be several in one line) - let tag_count = 1 - while 1 - let tag_group_text = matchstr(line, rxtag, 0, tag_count) - if tag_group_text == '' - break - endif - for tag_text in split(tag_group_text, ':') - call add(anchors, tag_text) - if current_complete_anchor != '' - call add(anchors, current_complete_anchor.'#'.tag_text) - endif - endfor - let tag_count += 1 - endwhile - - endfor - - return anchors -endfunction - - -function! s:jump_to_anchor(anchor) - let oldpos = getpos('.') - call cursor(1, 1) - - let anchor = vimwiki#u#escape(a:anchor) - - let segments = split(anchor, '#', 0) - - for segment in segments - - let anchor_header = s:safesubstitute( - \ vimwiki#vars#get_syntaxlocal('header_match'), - \ '__Header__', segment, '') - let anchor_bold = s:safesubstitute( - \ vimwiki#vars#get_syntaxlocal('bold_match'), - \ '__Text__', segment, '') - let anchor_tag = s:safesubstitute( - \ vimwiki#vars#get_syntaxlocal('tag_match'), - \ '__Tag__', segment, '') - - if !search(anchor_tag, 'Wc') && !search(anchor_header, 'Wc') && !search(anchor_bold, 'Wc') - call setpos('.', oldpos) - break - endif - let oldpos = getpos('.') - endfor -endfunction - - -" Params: full path to a wiki file and its wiki number -" Returns: a list of all links inside the wiki file -" Every list item has the form -" [target file, anchor, line number of the link in source file, column number] -function! s:get_links(wikifile, idx) - if !filereadable(a:wikifile) - return [] - endif - - let syntax = vimwiki#vars#get_wikilocal('syntax', a:idx) - let rx_link = vimwiki#vars#get_syntaxlocal('wikilink', syntax) - let links = [] - let lnum = 0 - - for line in readfile(a:wikifile) - let lnum += 1 - - let link_count = 1 - while 1 - let col = match(line, rx_link, 0, link_count)+1 - let link_text = matchstr(line, rx_link, 0, link_count) - if link_text == '' - break - endif - let link_count += 1 - let target = vimwiki#base#resolve_link(link_text, a:wikifile) - if target.filename != '' && target.scheme =~# '\mwiki\d\+\|diary\|file\|local' - call add(links, [target.filename, target.anchor, lnum, col]) - endif - endwhile - endfor - - return links -endfunction - - -function! vimwiki#base#check_links() - let anchors_of_files = {} - let links_of_files = {} - let errors = [] - for idx in range(vimwiki#vars#number_of_wikis()) - let syntax = vimwiki#vars#get_wikilocal('syntax', idx) - let wikifiles = vimwiki#base#find_files(idx, 0) - for wikifile in wikifiles - let links_of_files[wikifile] = s:get_links(wikifile, idx) - let anchors_of_files[wikifile] = vimwiki#base#get_anchors(wikifile, syntax) - endfor - endfor - - for wikifile in keys(links_of_files) - for [target_file, target_anchor, lnum, col] in links_of_files[wikifile] - if target_file == '' && target_anchor == '' - call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, - \ 'text': "numbered scheme refers to a non-existent wiki"}) - elseif has_key(anchors_of_files, target_file) - if target_anchor != '' && index(anchors_of_files[target_file], target_anchor) < 0 - call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, - \'text': "there is no such anchor: ".target_anchor}) - endif - else - if target_file =~ '\m/$' " maybe it's a link to a directory - if !isdirectory(target_file) - call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, - \'text': "there is no such directory: ".target_file}) - endif - else " maybe it's a non-wiki file - if filereadable(target_file) - let anchors_of_files[target_file] = [] - else - call add(errors, {'filename':wikifile, 'lnum':lnum, 'col':col, - \'text': "there is no such file: ".target_file}) - endif - endif - endif - endfor - endfor - - - " Check which wiki files are reachable from at least one of the index files. - " First, all index files are marked as reachable. Then, pick a reachable file - " and mark all files to which it links as reachable, too. Repeat until the - " links of all reachable files have been checked. - - " Map every wiki file to a number. 0 means not reachable from any index file, - " 1 means reachable, but the outgoing links are not checked yet, 2 means - " reachable and done. - let reachable_wikifiles = {} - - " first, all files are considered not reachable - for wikifile in keys(links_of_files) - let reachable_wikifiles[wikifile] = 0 - endfor - - " mark every index file as reachable - for idx in range(vimwiki#vars#number_of_wikis()) - let index_file = vimwiki#vars#get_wikilocal('path', idx) . - \ vimwiki#vars#get_wikilocal('index', idx) . vimwiki#vars#get_wikilocal('ext', idx) - if filereadable(index_file) - let reachable_wikifiles[index_file] = 1 - endif - endfor - - while 1 - let next_unvisited_wikifile = '' - for wf in keys(reachable_wikifiles) - if reachable_wikifiles[wf] == 1 - let next_unvisited_wikifile = wf - let reachable_wikifiles[wf] = 2 - break - endif - endfor - if next_unvisited_wikifile == '' - break - endif - for [target_file, target_anchor, lnum, col] in links_of_files[next_unvisited_wikifile] - if has_key(reachable_wikifiles, target_file) && reachable_wikifiles[target_file] == 0 - let reachable_wikifiles[target_file] = 1 - endif - endfor - endwhile - - for wf in keys(reachable_wikifiles) - if reachable_wikifiles[wf] == 0 - call add(errors, {'text':wf." is not reachable from the index file"}) - endif - endfor - - if empty(errors) - echomsg 'Vimwiki: All links are OK' - else - call setqflist(errors, 'r') - copen - endif -endfunction - - -function! vimwiki#base#edit_file(command, filename, anchor, ...) - let fname = escape(a:filename, '% *|#`') - let dir = fnamemodify(a:filename, ":p:h") - - let ok = vimwiki#path#mkdir(dir, 1) - - if !ok - echomsg ' ' - echomsg 'Vimwiki Error: Unable to edit file in non-existent directory: '.dir - return - endif - - " Check if the file we want to open is already the current file - " which happens if we jump to an achor in the current file. - " This hack is necessary because apparently Vim messes up the result of - " getpos() directly after this command. Strange. - if !(a:command ==# ':e ' && vimwiki#path#is_equal(a:filename, expand('%:p'))) - try - if &autowriteall && !&hidden " in this case, the file is saved before switching to the - " new buffer. This causes Vim to show two messages in the command line which triggers - " the annoying hit-enter prompt. Solution: show no messages at all. - silent execute a:command fname - else - execute a:command fname - endif - catch /E37:/ - echomsg 'Vimwiki: The current file is modified. Hint: Take a look at' - \ ''':h g:vimwiki_autowriteall'' to see how to save automatically.' - return - endtry - - " If the opened file was not already loaded by Vim, an autocommand is - " triggered at this point - - " Make sure no other plugin takes ownership over the new file. Vimwiki - " rules them all! Well, except for directories, which may be opened with - " Netrw - if &filetype != 'vimwiki' && fname !~ '\m/$' - setfiletype vimwiki - endif - endif - if a:anchor != '' - call s:jump_to_anchor(a:anchor) - endif - - " save previous link - " a:1 -- previous vimwiki link to save - " a:2 -- should we update previous link - if a:0 && a:2 && len(a:1) > 0 - call vimwiki#vars#set_bufferlocal('prev_link', a:1) - endif -endfunction - - -function! vimwiki#base#search_word(wikiRx, cmd) - let match_line = search(a:wikiRx, 's'.a:cmd) - if match_line == 0 - echomsg 'Vimwiki: Wiki link not found' - endif -endfunction - - -" Returns part of the line that matches wikiRX at cursor -function! vimwiki#base#matchstr_at_cursor(wikiRX) - let col = col('.') - 1 - let line = getline('.') - let ebeg = -1 - let cont = match(line, a:wikiRX, 0) - while (ebeg >= 0 || (0 <= cont) && (cont <= col)) - let contn = matchend(line, a:wikiRX, cont) - if (cont <= col) && (col < contn) - let ebeg = match(line, a:wikiRX, cont) - let elen = contn - ebeg - break - else - let cont = match(line, a:wikiRX, contn) - endif - endwh - if ebeg >= 0 - return strpart(line, ebeg, elen) - else - return "" - endif -endfunction - - -function! vimwiki#base#replacestr_at_cursor(wikiRX, sub) - let col = col('.') - 1 - let line = getline('.') - let ebeg = -1 - let cont = match(line, a:wikiRX, 0) - while (ebeg >= 0 || (0 <= cont) && (cont <= col)) - let contn = matchend(line, a:wikiRX, cont) - if (cont <= col) && (col < contn) - let ebeg = match(line, a:wikiRX, cont) - let elen = contn - ebeg - break - else - let cont = match(line, a:wikiRX, contn) - endif - endwh - if ebeg >= 0 - " TODO: There might be problems with Unicode chars... - let newline = strpart(line, 0, ebeg).a:sub.strpart(line, ebeg+elen) - call setline(line('.'), newline) - endif -endfunction - - -function! s:print_wiki_list() - let idx = 0 - while idx < vimwiki#vars#number_of_wikis() - if idx == vimwiki#vars#get_bufferlocal('wiki_nr') - let sep = ' * ' - echohl PmenuSel - else - let sep = ' ' - echohl None - endif - echo (idx + 1) . sep . vimwiki#vars#get_wikilocal('path', idx) - let idx += 1 - endwhile - echohl None -endfunction - - -function! s:update_wiki_link(fname, old, new) - echo "Updating links in ".a:fname - let has_updates = 0 - let dest = [] - for line in readfile(a:fname) - if !has_updates && match(line, a:old) != -1 - let has_updates = 1 - endif - " XXX: any other characters to escape!? - call add(dest, substitute(line, a:old, escape(a:new, "&"), "g")) - endfor - " add exception handling... - if has_updates - call rename(a:fname, a:fname.'#vimwiki_upd#') - call writefile(dest, a:fname) - call delete(a:fname.'#vimwiki_upd#') - endif -endfunction - - -function! s:update_wiki_links_dir(dir, old_fname, new_fname) - let old_fname = substitute(a:old_fname, '[/\\]', '[/\\\\]', 'g') - let new_fname = a:new_fname - - let old_fname_r = vimwiki#base#apply_template( - \ vimwiki#vars#get_syntaxlocal('WikiLinkMatchUrlTemplate'), old_fname, '', '') - - let files = split(glob(vimwiki#vars#get_wikilocal('path').a:dir.'*'. - \ vimwiki#vars#get_wikilocal('ext')), '\n') - for fname in files - call s:update_wiki_link(fname, old_fname_r, new_fname) - endfor -endfunction - - -function! s:tail_name(fname) - let result = substitute(a:fname, ":", "__colon__", "g") - let result = fnamemodify(result, ":t:r") - let result = substitute(result, "__colon__", ":", "g") - return result -endfunction - - -function! s:update_wiki_links(old_fname, new_fname) - let old_fname = a:old_fname - let new_fname = a:new_fname - - let subdirs = split(a:old_fname, '[/\\]')[: -2] - - " TODO: Use Dictionary here... - let dirs_keys = [''] - let dirs_vals = [''] - if len(subdirs) > 0 - let dirs_keys = [''] - let dirs_vals = [join(subdirs, '/').'/'] - let idx = 0 - while idx < len(subdirs) - 1 - call add(dirs_keys, join(subdirs[: idx], '/').'/') - call add(dirs_vals, join(subdirs[idx+1 :], '/').'/') - let idx = idx + 1 - endwhile - call add(dirs_keys,join(subdirs, '/').'/') - call add(dirs_vals, '') - endif - - let idx = 0 - while idx < len(dirs_keys) - let dir = dirs_keys[idx] - let new_dir = dirs_vals[idx] - call s:update_wiki_links_dir(dir, new_dir.old_fname, new_dir.new_fname) - let idx = idx + 1 - endwhile -endfunction - - -function! s:get_wiki_buffers() - let blist = [] - let bcount = 1 - while bcount<=bufnr("$") - if bufexists(bcount) - let bname = fnamemodify(bufname(bcount), ":p") - " this may find buffers that are not part of the current wiki, but that - " doesn't hurt - if bname =~# vimwiki#vars#get_wikilocal('ext')."$" - let bitem = [bname, vimwiki#vars#get_bufferlocal('prev_link', bcount)] - call add(blist, bitem) - endif - endif - let bcount = bcount + 1 - endwhile - return blist -endfunction - - -function! s:open_wiki_buffer(item) - call vimwiki#base#edit_file(':e', a:item[0], '') - if !empty(a:item[1]) - call vimwiki#vars#set_bufferlocal('prev_link', a:item[1], a:item[0]) - endif -endfunction - - -function! vimwiki#base#nested_syntax(filetype, start, end, textSnipHl) abort -" From http://vim.wikia.com/wiki/VimTip857 - let ft=toupper(a:filetype) - let group='textGroup'.ft - if exists('b:current_syntax') - let s:current_syntax=b:current_syntax - " Remove current syntax definition, as some syntax files (e.g. cpp.vim) - " do nothing if b:current_syntax is defined. - unlet b:current_syntax - endif - - " Some syntax files set up iskeyword which might scratch vimwiki a bit. - " Let us save and restore it later. - " let b:skip_set_iskeyword = 1 - let is_keyword = &iskeyword - - try - " keep going even if syntax file is not found - execute 'syntax include @'.group.' syntax/'.a:filetype.'.vim' - execute 'syntax include @'.group.' after/syntax/'.a:filetype.'.vim' - catch - endtry - - let &iskeyword = is_keyword - - if exists('s:current_syntax') - let b:current_syntax=s:current_syntax - else - unlet b:current_syntax - endif - - " Fix issue #236: tell Vimwiki to think in maths when encountering maths - " blocks like {{$ }}$. Here, we don't want the tex highlight group, but the - " group for tex math. - if a:textSnipHl ==# 'VimwikiMath' - let group='texMathZoneGroup' - endif - - execute 'syntax region textSnip'.ft. - \ ' matchgroup='.a:textSnipHl. - \ ' start="'.a:start.'" end="'.a:end.'"'. - \ ' contains=@'.group.' keepend' - - " A workaround to Issue 115: Nested Perl syntax highlighting differs from - " regular one. - " Perl syntax file has perlFunctionName which is usually has no effect due to - " 'contained' flag. Now we have 'syntax include' that makes all the groups - " included as 'contained' into specific group. - " Here perlFunctionName (with quite an angry regexp "\h\w*[^:]") clashes with - " the rest syntax rules as now it has effect being really 'contained'. - " Clear it! - if ft =~? 'perl' - syntax clear perlFunctionName - endif -endfunction - - -" creates or updates auto-generated listings in a wiki file, like TOC, diary -" links, tags list etc. -" - the listing consists of a level 1 header and a list of strings as content -" - a:content_regex is used to determine how long a potentially existing list is -" - a:default_lnum is the line number where the new listing should be placed if -" it's not already present -" - if a:create is true, it will be created if it doesn't exist, otherwise it -" will only be updated if it already exists -function! vimwiki#base#update_listing_in_buffer(strings, start_header, - \ content_regex, default_lnum, create) - " apparently, Vim behaves strange when files change while in diff mode - if &diff || &readonly - return - endif - - " check if the listing is already there - let already_there = 0 - - let header_rx = '\m^\s*'.substitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), - \ '__Header__', a:start_header, '') .'\s*$' - - let start_lnum = 1 - while start_lnum <= line('$') - if getline(start_lnum) =~# header_rx - let already_there = 1 - break - endif - let start_lnum += 1 - endwhile - - if !already_there && !a:create - return - endif - - let winview_save = winsaveview() - let cursor_line = winview_save.lnum - let is_cursor_after_listing = 0 - - let is_fold_closed = 1 - - let lines_diff = 0 - - if already_there - let is_fold_closed = ( foldclosed(start_lnum) > -1 ) - " delete the old listing - let whitespaces_in_first_line = matchstr(getline(start_lnum), '\m^\s*') - let end_lnum = start_lnum + 1 - while end_lnum <= line('$') && getline(end_lnum) =~# a:content_regex - let end_lnum += 1 - endwhile - let is_cursor_after_listing = ( cursor_line >= end_lnum ) - " We'll be removing a range. But, apparently, if folds are enabled, Vim - " won't let you remove a range that overlaps with closed fold -- the entire - " fold gets deleted. So we temporarily disable folds, and then reenable - " them right back. - let foldenable_save = &l:foldenable - setlo nofoldenable - silent exe start_lnum.','.string(end_lnum - 1).'delete _' - let &l:foldenable = foldenable_save - let lines_diff = 0 - (end_lnum - start_lnum) - else - let start_lnum = a:default_lnum - let is_cursor_after_listing = ( cursor_line > a:default_lnum ) - let whitespaces_in_first_line = '' - endif - - let start_of_listing = start_lnum - - " write new listing - let new_header = whitespaces_in_first_line - \ . s:safesubstitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), - \ '__Header__', a:start_header, '') - call append(start_lnum - 1, new_header) - let start_lnum += 1 - let lines_diff += 1 + len(a:strings) - for string in a:strings - call append(start_lnum - 1, string) - let start_lnum += 1 - endfor - " append an empty line if there is not one - if start_lnum <= line('$') && getline(start_lnum) !~# '\m^\s*$' - call append(start_lnum - 1, '') - let lines_diff += 1 - endif - - " Open fold, if needed - if !is_fold_closed && ( foldclosed(start_of_listing) > -1 ) - exe start_of_listing - norm! zo - endif - - if is_cursor_after_listing - let winview_save.lnum += lines_diff - endif - call winrestview(winview_save) -endfunction - - -function! vimwiki#base#find_next_link() - call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), '') -endfunction - - -function! vimwiki#base#find_prev_link() - "Jump 2 times if the cursor is in the middle of a link - if synIDattr(synID(line('.'), col('.'), 0), "name") =~# "VimwikiLink.*" && - \ synIDattr(synID(line('.'), col('.')-1, 0), "name") =~# "VimwikiLink.*" - call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') - endif - call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') -endfunction - - -" This is an API function, that is, remappable by the user. Don't change the signature. -function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) - " Parse link at cursor and pass to VimwikiLinkHandler, or failing that, the - " default open_link handler - - " 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 != "" " cursor is indeed on a link - let processed_by_user_defined_handler = VimwikiLinkHandler(lnk) - if processed_by_user_defined_handler - return - endif - - if a:split ==# "hsplit" - let cmd = ":split " - elseif a:split ==# "vsplit" - let cmd = ":vsplit " - elseif a:split ==# "tab" - let cmd = ":tabnew " - else - let cmd = ":e " - endif - - " if we want to and can reuse a split window, jump to that window and open - " the new file there - if (a:split ==# 'hsplit' || a:split ==# 'vsplit') && a:reuse - let previous_window_nr = winnr('#') - if previous_window_nr > 0 && previous_window_nr != winnr() - execute previous_window_nr . 'wincmd w' - let cmd = ':e' - endif - endif - - - if vimwiki#vars#get_wikilocal('syntax') == 'markdown' - let processed_by_markdown_reflink = vimwiki#markdown_base#open_reflink(lnk) - if processed_by_markdown_reflink - return - endif - - " remove the extension from the filename if exists, because non-vimwiki - " markdown files usually include the extension in links - let lnk = substitute(lnk, '\'.vimwiki#vars#get_wikilocal('ext').'$', '', '') - endif - - let current_tab_page = tabpagenr() - - call vimwiki#base#open_link(cmd, lnk) - - if !a:move_cursor - if (a:split ==# 'hsplit' || a:split ==# 'vsplit') - execute 'wincmd p' - elseif a:split ==# 'tab' - execute 'tabnext ' . current_tab_page - endif - endif - - else - if a:0 > 0 - execute "normal! ".a:1 - else - call vimwiki#base#normalize_link(0) - endif - endif -endfunction - - -function! vimwiki#base#go_back_link() - let prev_link = vimwiki#vars#get_bufferlocal('prev_link') - if !empty(prev_link) - " go back to saved wiki link - call vimwiki#base#edit_file(':e ', prev_link[0], '') - call setpos('.', prev_link[1]) - else - " maybe we came here by jumping to a tag -> pop from the tag stack - silent! pop! - endif -endfunction - - -function! vimwiki#base#goto_index(wnum, ...) - if a:wnum > vimwiki#vars#number_of_wikis() - echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in your Vimwiki settings!' - return - endif - - " usually a:wnum is greater then 0 but with the following command it is == 0: - " vim -n -c ":VimwikiIndex" - if a:wnum > 0 - let idx = a:wnum - 1 - else - let idx = 0 - endif - - 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 - else - let cmd = 'edit' - endif - - let index_file = vimwiki#vars#get_wikilocal('path', idx). - \ vimwiki#vars#get_wikilocal('index', idx). - \ vimwiki#vars#get_wikilocal('ext', idx) - - call vimwiki#base#edit_file(cmd, index_file, '') -endfunction - - -function! vimwiki#base#delete_link() - " Delete wiki file you are in from filesystem - let val = input('Delete "'.expand('%').'" [y]es/[N]o? ') - if val !~? '^y' - return - endif - let fname = expand('%:p') - try - call delete(fname) - catch /.*/ - echomsg 'Vimwiki Error: Cannot delete "'.expand('%:t:r').'"!' - return - endtry - - call vimwiki#base#go_back_link() - execute "bdelete! ".escape(fname, " ") - - " reread buffer => deleted wiki link should appear as non-existent - if expand('%:p') != "" - execute "e" - endif -endfunction - - -" Rename current file, update all links to it -function! vimwiki#base#rename_link() - let subdir = vimwiki#vars#get_bufferlocal('subdir') - let old_fname = subdir.expand('%:t') - - " there is no file (new one maybe) - if glob(expand('%:p')) == '' - echomsg 'Vimwiki Error: Cannot rename "'.expand('%:p'). - \'". It does not exist! (New file? Save it before renaming.)' - return - endif - - let val = input('Rename "'.expand('%:t:r').'" [y]es/[N]o? ') - if val !~? '^y' - return - endif - - let new_link = input('Enter new name: ') - - if new_link =~# '[/\\]' - " It is actually doable but I do not have free time to do it. - echomsg 'Vimwiki Error: Cannot rename to a filename with path!' - return - endif - - " check new_fname - it should be 'good', not empty - if substitute(new_link, '\s', '', 'g') == '' - echomsg 'Vimwiki Error: Cannot rename to an empty filename!' - return - endif - - let url = matchstr(new_link, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) - if url != '' - let new_link = url - endif - - let new_link = subdir.new_link - let new_fname = vimwiki#vars#get_wikilocal('path') . new_link . vimwiki#vars#get_wikilocal('ext') - - " do not rename if file with such name exists - let fname = glob(new_fname) - if fname != '' - echomsg 'Vimwiki Error: Cannot rename to "'.new_fname.'". File with that name exist!' - return - endif - " rename wiki link file - try - echomsg 'Vimwiki: Renaming '.vimwiki#vars#get_wikilocal('path').old_fname.' to '.new_fname - let res = rename(expand('%:p'), expand(new_fname)) - if res != 0 - throw "Cannot rename!" - end - catch /.*/ - echomsg 'Vimwiki Error: Cannot rename "'.expand('%:t:r').'" to "'.new_fname.'"' - return - endtry - - let &buftype="nofile" - - let cur_buffer = [expand('%:p'), vimwiki#vars#get_bufferlocal('prev_link')] - - let blist = s:get_wiki_buffers() - - " save wiki buffers - for bitem in blist - execute ':b '.escape(bitem[0], ' ') - execute ':update' - endfor - - execute ':b '.escape(cur_buffer[0], ' ') - - " remove wiki buffers - for bitem in blist - execute 'bwipeout '.escape(bitem[0], ' ') - endfor - - let setting_more = &more - setlocal nomore - - " update links - call s:update_wiki_links(s:tail_name(old_fname), new_link) - - " restore wiki buffers - for bitem in blist - if !vimwiki#path#is_equal(bitem[0], cur_buffer[0]) - call s:open_wiki_buffer(bitem) - endif - endfor - - call s:open_wiki_buffer([new_fname, cur_buffer[1]]) - " execute 'bwipeout '.escape(cur_buffer[0], ' ') - - echomsg 'Vimwiki: '.old_fname.' is renamed to '.new_fname - - let &more = setting_more -endfunction - - -function! vimwiki#base#ui_select() - call s:print_wiki_list() - let idx = input("Select Wiki (specify number): ") - if idx == "" - return - endif - call vimwiki#base#goto_index(idx) -endfunction - - -function! vimwiki#base#TO_header(inner, including_subheaders, count) - let headers = s:collect_headers() - if empty(headers) - return - endif - - let current_line = line('.') - - let current_header_index = s:current_header(headers, current_line) - - if current_header_index < 0 - return - endif - - " from which to which header - if !a:including_subheaders && a:count <= 1 - let first_line = headers[current_header_index][0] - let last_line = current_header_index == len(headers)-1 ? line('$') : - \ headers[current_header_index + 1][0] - 1 - else - let first_header_index = current_header_index - for _ in range(a:count - 1) - let parent = s:get_another_header(headers, first_header_index, -1, '<') - if parent < 0 - break - else - let first_header_index = parent - endif - endfor - - let next_sibling_or_higher = s:get_another_header(headers, first_header_index, +1, '<=') - - let first_line = headers[first_header_index][0] - let last_line = - \ next_sibling_or_higher >= 0 ? headers[next_sibling_or_higher][0] - 1 : line('$') - endif - - if a:inner - let first_line += 1 - let last_line = prevnonblank(last_line) - endif - - if first_line > last_line - " this can happen e.g. when doing vih on a header with another header in the very next line - return - endif - - call cursor(first_line, 1) - normal! V - call cursor(last_line, 1) -endfunction - - -function! vimwiki#base#TO_table_cell(inner, visual) - if col('.') == col('$')-1 - return - endif - - if a:visual - normal! `> - let sel_end = getpos('.') - normal! `< - let sel_start = getpos('.') - - let firsttime = sel_start == sel_end - - if firsttime - if !search('|\|\(-+-\)', 'cb', line('.')) - return - endif - if getline('.')[virtcol('.')] == '+' - normal! l - endif - if a:inner - normal! 2l - endif - let sel_start = getpos('.') - endif - - normal! `> - call search('|\|\(-+-\)', '', line('.')) - if getline('.')[virtcol('.')] == '+' - normal! l - endif - if a:inner - if firsttime || abs(sel_end[2] - getpos('.')[2]) != 2 - normal! 2h - endif - endif - let sel_end = getpos('.') - - call setpos('.', sel_start) - exe "normal! \<C-v>" - call setpos('.', sel_end) - - " XXX: WORKAROUND. - " if blockwise selection is ended at | character then pressing j to extend - " selection further fails. But if we shake the cursor left and right then - " it works. - normal! hl - else - if !search('|\|\(-+-\)', 'cb', line('.')) - return - endif - if a:inner - normal! 2l - endif - normal! v - call search('|\|\(-+-\)', '', line('.')) - if !a:inner && getline('.')[virtcol('.')-1] == '|' - normal! h - elseif a:inner - normal! 2h - endif - endif -endfunction - - -function! vimwiki#base#TO_table_col(inner, visual) - let t_rows = vimwiki#tbl#get_rows(line('.')) - if empty(t_rows) - return - endif - - " TODO: refactor it! - if a:visual - normal! `> - let sel_end = getpos('.') - normal! `< - let sel_start = getpos('.') - - let firsttime = sel_start == sel_end - - if firsttime - " place cursor to the top row of the table - call vimwiki#u#cursor(t_rows[0][0], virtcol('.')) - " do not accept the match at cursor position if cursor is next to column - " separator of the table separator (^ is a cursor): - " |-----^-+-------| - " | bla | bla | - " |-------+-------| - " or it will select wrong column. - if strpart(getline('.'), virtcol('.')-1) =~# '^-+' - let s_flag = 'b' - else - let s_flag = 'cb' - endif - " search the column separator backwards - if !search('|\|\(-+-\)', s_flag, line('.')) - return - endif - " -+- column separator is matched --> move cursor to the + sign - if getline('.')[virtcol('.')] == '+' - normal! l - endif - " inner selection --> reduce selection - if a:inner - normal! 2l - endif - let sel_start = getpos('.') - endif - - normal! `> - if !firsttime && getline('.')[virtcol('.')] == '|' - normal! l - elseif a:inner && getline('.')[virtcol('.')+1] =~# '[|+]' - normal! 2l - endif - " search for the next column separator - call search('|\|\(-+-\)', '', line('.')) - " Outer selection selects a column without border on the right. So we move - " our cursor left if the previous search finds | border, not -+-. - if getline('.')[virtcol('.')] != '+' - normal! h - endif - if a:inner - " reduce selection a bit more if inner. - normal! h - endif - " expand selection to the bottom line of the table - call vimwiki#u#cursor(t_rows[-1][0], virtcol('.')) - let sel_end = getpos('.') - - call setpos('.', sel_start) - exe "normal! \<C-v>" - call setpos('.', sel_end) - - else - " place cursor to the top row of the table - call vimwiki#u#cursor(t_rows[0][0], virtcol('.')) - " do not accept the match at cursor position if cursor is next to column - " separator of the table separator (^ is a cursor): - " |-----^-+-------| - " | bla | bla | - " |-------+-------| - " or it will select wrong column. - if strpart(getline('.'), virtcol('.')-1) =~# '^-+' - let s_flag = 'b' - else - let s_flag = 'cb' - endif - " search the column separator backwards - if !search('|\|\(-+-\)', s_flag, line('.')) - return - endif - " -+- column separator is matched --> move cursor to the + sign - if getline('.')[virtcol('.')] == '+' - normal! l - endif - " inner selection --> reduce selection - if a:inner - normal! 2l - endif - - exe "normal! \<C-V>" - - " search for the next column separator - call search('|\|\(-+-\)', '', line('.')) - " Outer selection selects a column without border on the right. So we move - " our cursor left if the previous search finds | border, not -+-. - if getline('.')[virtcol('.')] != '+' - normal! h - endif - " reduce selection a bit more if inner. - if a:inner - normal! h - endif - " expand selection to the bottom line of the table - call vimwiki#u#cursor(t_rows[-1][0], virtcol('.')) - endif -endfunction - - -function! vimwiki#base#AddHeaderLevel() - let lnum = line('.') - let line = getline(lnum) - let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') - if line =~# '^\s*$' - return - endif - - if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') - let level = vimwiki#u#count_first_sym(line) - if level < 6 - if vimwiki#vars#get_syntaxlocal('symH') - let line = substitute(line, '\('.rxHdr.'\+\).\+\1', rxHdr.'&'.rxHdr, '') - else - let line = substitute(line, '\('.rxHdr.'\+\).\+', rxHdr.'&', '') - endif - call setline(lnum, line) - endif - else - let line = substitute(line, '^\s*', '&'.rxHdr.' ', '') - if vimwiki#vars#get_syntaxlocal('symH') - let line = substitute(line, '\s*$', ' '.rxHdr.'&', '') - endif - call setline(lnum, line) - endif -endfunction - - -function! vimwiki#base#RemoveHeaderLevel() - let lnum = line('.') - let line = getline(lnum) - let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') - if line =~# '^\s*$' - return - endif - - if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') - let level = vimwiki#u#count_first_sym(line) - let old = repeat(rxHdr, level) - let new = repeat(rxHdr, level - 1) - - let chomp = line =~# rxHdr.'\s' - - if vimwiki#vars#get_syntaxlocal('symH') - let line = substitute(line, old, new, 'g') - else - let line = substitute(line, old, new, '') - endif - - if level == 1 && chomp - let line = substitute(line, '^\s', '', 'g') - let line = substitute(line, '\s$', '', 'g') - endif - - let line = substitute(line, '\s*$', '', '') - - call setline(lnum, line) - endif -endfunction - - - -" Returns all the headers in the current buffer as a list of the form -" [[line_number, header_level, header_text], [...], [...], ...] -function! s:collect_headers() - let is_inside_pre_or_math = 0 " 1: inside pre, 2: inside math, 0: outside - let headers = [] - for lnum in range(1, line('$')) - let line_content = getline(lnum) - if (is_inside_pre_or_math == 1 && line_content =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')) || - \ (is_inside_pre_or_math == 2 && line_content =~# vimwiki#vars#get_syntaxlocal('rxMathEnd')) - let is_inside_pre_or_math = 0 - continue - endif - if is_inside_pre_or_math > 0 - continue - endif - if line_content =~# vimwiki#vars#get_syntaxlocal('rxPreStart') - let is_inside_pre_or_math = 1 - continue - endif - if line_content =~# vimwiki#vars#get_syntaxlocal('rxMathStart') - let is_inside_pre_or_math = 2 - continue - endif - if line_content !~# vimwiki#vars#get_syntaxlocal('rxHeader') - continue - endif - let header_level = vimwiki#u#count_first_sym(line_content) - let header_text = - \ vimwiki#u#trim(matchstr(line_content, vimwiki#vars#get_syntaxlocal('rxHeader'))) - call add(headers, [lnum, header_level, header_text]) - endfor - - return headers -endfunction - - -function! s:current_header(headers, line_number) - if empty(a:headers) - return -1 - endif - - if a:line_number >= a:headers[-1][0] - return len(a:headers) - 1 - endif - - let current_header_index = -1 - while a:headers[current_header_index+1][0] <= a:line_number - let current_header_index += 1 - endwhile - return current_header_index -endfunction - - -function! s:get_another_header(headers, current_index, direction, operation) - if empty(a:headers) || a:current_index < 0 - return -1 - endif - let current_level = a:headers[a:current_index][1] - let index = a:current_index + a:direction - - while 1 - if index < 0 || index >= len(a:headers) - return -1 - endif - if eval('a:headers[index][1] ' . a:operation . ' current_level') - return index - endif - let index += a:direction - endwhile -endfunction - - -function! vimwiki#base#goto_parent_header() - let headers = s:collect_headers() - let current_header_index = s:current_header(headers, line('.')) - let parent_header = s:get_another_header(headers, current_header_index, -1, '<') - if parent_header >= 0 - call cursor(headers[parent_header][0], 1) - else - echo 'Vimwiki: no parent header found' - endif -endfunction - - -function! vimwiki#base#goto_next_header() - let headers = s:collect_headers() - let current_header_index = s:current_header(headers, line('.')) - if current_header_index >= 0 && current_header_index < len(headers) - 1 - call cursor(headers[current_header_index + 1][0], 1) - elseif current_header_index < 0 && !empty(headers) " we're above the first header - call cursor(headers[0][0], 1) - else - echo 'Vimwiki: no next header found' - endif -endfunction - - -function! vimwiki#base#goto_prev_header() - let headers = s:collect_headers() - let current_header_index = s:current_header(headers, line('.')) - " if the cursor already was on a header, jump to the previous one - if current_header_index >= 1 && headers[current_header_index][0] == line('.') - let current_header_index -= 1 - endif - if current_header_index >= 0 - call cursor(headers[current_header_index][0], 1) - else - echo 'Vimwiki: no previous header found' - endif -endfunction - - -function! vimwiki#base#goto_sibling(direction) - let headers = s:collect_headers() - let current_header_index = s:current_header(headers, line('.')) - let next_potential_sibling = - \ s:get_another_header(headers, current_header_index, a:direction, '<=') - if next_potential_sibling >= 0 && headers[next_potential_sibling][1] == - \ headers[current_header_index][1] - call cursor(headers[next_potential_sibling][0], 1) - else - echo 'Vimwiki: no sibling header found' - endif -endfunction - - -" a:create == 1: creates or updates TOC in current file -" a:create == 0: update if TOC exists -function! vimwiki#base#table_of_contents(create) - let headers = s:collect_headers() - let numbering = vimwiki#vars#get_global('html_header_numbering') - let headers_levels = [['', 0], ['', 0], ['', 0], ['', 0], ['', 0], ['', 0]] - let complete_header_infos = [] - for header in headers - let h_text = header[2] - let h_level = header[1] - if h_text ==# vimwiki#vars#get_global('toc_header') " don't include the TOC's header itself - continue - endif - let headers_levels[h_level-1] = [h_text, headers_levels[h_level-1][1]+1] - for idx in range(h_level, 5) | let headers_levels[idx] = ['', 0] | endfor - - let h_complete_id = '' - for l in range(h_level-1) - if headers_levels[l][0] != '' - let h_complete_id .= headers_levels[l][0].'#' - endif - endfor - let h_complete_id .= headers_levels[h_level-1][0] - - if numbering > 0 && numbering <= h_level - let h_number = join(map(copy(headers_levels[numbering-1 : h_level-1]), 'v:val[1]'), '.') - let h_number .= vimwiki#vars#get_global('html_header_numbering_sym') - let h_text = h_number.' '.h_text - endif - - call add(complete_header_infos, [h_level, h_complete_id, h_text]) - endfor - - let lines = [] - let startindent = repeat(' ', vimwiki#lst#get_list_margin()) - let indentstring = repeat(' ', vimwiki#u#sw()) - let bullet = vimwiki#lst#default_symbol().' ' - for [lvl, link, desc] in complete_header_infos - let esc_link = substitute(link, "'", "''", 'g') - let esc_desc = substitute(desc, "'", "''", 'g') - let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate2') - if vimwiki#vars#get_wikilocal('syntax') == 'markdown' - let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template') - endif - let link = s:safesubstitute(link_tpl, '__LinkUrl__', - \ '#'.esc_link, '') - let link = s:safesubstitute(link, '__LinkDescription__', esc_desc, '') - call add(lines, startindent.repeat(indentstring, lvl-1).bullet.link) - endfor - - let links_rx = '\m^\s*'.vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - - call vimwiki#base#update_listing_in_buffer(lines, - \ vimwiki#vars#get_global('toc_header'), links_rx, 1, a:create) -endfunction - - -" Construct a regular expression matching from template (with special -" characters properly escaped), by substituting rxUrl for __LinkUrl__, rxDesc -" for __LinkDescription__, and rxStyle for __LinkStyle__. The three -" arguments rxUrl, rxDesc, and rxStyle are copied verbatim, without any -" special character escapes or substitutions. -function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle) - let lnk = a:template - if a:rxUrl != "" - let lnk = s:safesubstitute(lnk, '__LinkUrl__', a:rxUrl, 'g') - endif - if a:rxDesc != "" - let lnk = s:safesubstitute(lnk, '__LinkDescription__', a:rxDesc, 'g') - endif - if a:rxStyle != "" - let lnk = s:safesubstitute(lnk, '__LinkStyle__', a:rxStyle, 'g') - endif - return lnk -endfunction - - -function! s:clean_url(url) - let url = split(a:url, '/\|=\|-\|&\|?\|\.') - let url = filter(url, 'v:val !=# ""') - let url = filter(url, 'v:val !=# "www"') - let url = filter(url, 'v:val !=# "com"') - let url = filter(url, 'v:val !=# "org"') - let url = filter(url, 'v:val !=# "net"') - let url = filter(url, 'v:val !=# "edu"') - let url = filter(url, 'v:val !=# "http\:"') - let url = filter(url, 'v:val !=# "https\:"') - let url = filter(url, 'v:val !=# "file\:"') - let url = filter(url, 'v:val !=# "xml\:"') - return join(url, " ") -endfunction - - -function! s:is_diary_file(filename) - let file_path = vimwiki#path#path_norm(a:filename) - let rel_path = vimwiki#vars#get_wikilocal('diary_rel_path') - let diary_path = vimwiki#path#path_norm(vimwiki#vars#get_wikilocal('path') . rel_path) - return rel_path != '' && file_path =~# '^'.vimwiki#u#escape(diary_path) -endfunction - - -function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) - let url = matchstr(a:str, a:rxUrl) - let descr = matchstr(a:str, a:rxDesc) - if descr == "" - let descr = s:clean_url(url) - endif - let lnk = s:safesubstitute(a:template, '__LinkDescription__', descr, '') - let lnk = s:safesubstitute(lnk, '__LinkUrl__', url, '') - return lnk -endfunction - - -function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, template) - let lnk = vimwiki#base#normalize_link_helper(a:str, a:rxUrl, a:rxDesc, a:template) - let style = matchstr(a:str, a:rxStyle) - let lnk = s:safesubstitute(lnk, '__LinkStyle__', style, '') - return lnk -endfunction - - -function! s:normalize_link_in_diary(lnk) - let link = a:lnk . vimwiki#vars#get_wikilocal('ext') - let link_wiki = vimwiki#vars#get_wikilocal('path') . '/' . link - let link_diary = vimwiki#vars#get_wikilocal('path') . '/' - \ . vimwiki#vars#get_wikilocal('diary_rel_path') . '/' . link - let link_exists_in_diary = filereadable(link_diary) - let link_exists_in_wiki = filereadable(link_wiki) - let link_is_date = a:lnk =~# '\d\d\d\d-\d\d-\d\d' - - if ! link_exists_in_wiki || link_exists_in_diary || link_is_date - let str = a:lnk - let rxUrl = vimwiki#vars#get_global('rxWord') - let rxDesc = '' - let template = vimwiki#vars#get_global('WikiLinkTemplate1') - else - let depth = len(split(vimwiki#vars#get_wikilocal('diary_rel_path'), '/')) - let str = repeat('../', depth) . a:lnk . '|' . a:lnk - let rxUrl = '^.*\ze|' - let rxDesc = '|\zs.*$' - let template = vimwiki#vars#get_global('WikiLinkTemplate2') - endif - - return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) -endfunction - - -function! s:normalize_link_syntax_n() - - " try WikiLink - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')) - if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), - \ vimwiki#vars#get_global('WikiLinkTemplate2')) - call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink'), sub) - return - endif - - " try WikiIncl - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) - if !empty(lnk) - " NO-OP !! - return - endif - - " try Weblink - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) - if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ lnk, '', vimwiki#vars#get_global('WikiLinkTemplate2')) - call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) - return - endif - - " try Word (any characters except separators) - " rxWord is less permissive than rxWikiLinkUrl which is used in - " normalize_link_syntax_v - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) - if !empty(lnk) - if s:is_diary_file(expand("%:p")) - let sub = s:normalize_link_in_diary(lnk) - else - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_global('rxWord'), '', - \ vimwiki#vars#get_global('WikiLinkTemplate1')) - endif - call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) - return - endif - -endfunction - - -function! s:normalize_link_syntax_v() - let sel_save = &selection - let &selection = "old" - let default_register_save = @" - let registertype_save = getregtype('"') - - try - " Save selected text to register " - normal! gv""y - - " Set substitution - if s:is_diary_file(expand("%:p")) - let sub = s:normalize_link_in_diary(@") - else - let sub = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), - \ '__LinkUrl__', @", '') - endif - - " Put substitution in register " and change text - call setreg('"', substitute(sub, '\n', '', ''), visualmode()) - normal! `>""pgvd - finally - call setreg('"', default_register_save, registertype_save) - let &selection = sel_save - endtry -endfunction - - -function! vimwiki#base#normalize_link(is_visual_mode) - if exists('*vimwiki#'.vimwiki#vars#get_wikilocal('syntax').'_base#normalize_link') - " Syntax-specific links - call vimwiki#{vimwiki#vars#get_wikilocal('syntax')}_base#normalize_link(a:is_visual_mode) - else - if !a:is_visual_mode - call s:normalize_link_syntax_n() - elseif line("'<") == line("'>") - " action undefined for multi-line visual mode selections - call s:normalize_link_syntax_v() - endif - endif -endfunction - - -function! vimwiki#base#detect_nested_syntax() - let last_word = '\v.*<(\w+)\s*$' - let lines = map(filter(getline(1, "$"), 'v:val =~ "\\%({{{\\|```\\)" && v:val =~ last_word'), - \ 'substitute(v:val, last_word, "\\=submatch(1)", "")') - let dict = {} - for elem in lines - let dict[elem] = elem - endfor - return dict -endfunction - - -function! vimwiki#base#complete_links_escaped(ArgLead, CmdLine, CursorPos) abort - " We can safely ignore args if we use -custom=complete option, Vim engine - " will do the job of filtering. - return vimwiki#base#get_globlinks_escaped() -endfunction - - -" ------------------------------------------------------------------------- -" Load syntax-specific Wiki functionality -for s:syn in s:vimwiki_get_known_syntaxes() - execute 'runtime! autoload/vimwiki/'.s:syn.'_base.vim' -endfor -" ------------------------------------------------------------------------- - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/customwiki2html.sh b/vim/.vim/plugged/vimwiki/autoload/vimwiki/customwiki2html.sh deleted file mode 100644 index 6b0c17a..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/customwiki2html.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# -# This script converts markdown into html, to be used with vimwiki's -# "customwiki2html" option. Experiment with the two proposed methods by -# commenting / uncommenting the relevant lines below. -# -# NEW! An alternative converter was developed by Jason6Anderson, and can -# be located at https://github.com/vimwiki-backup/vimwiki/issues/384 -# -# -# To use this script, you must have the Discount converter installed. -# -# http://www.pell.portland.or.us/~orc/Code/discount/ -# -# To verify your installation, check that the commands markdown and mkd2text, -# are on your path. -# -# Also verify that this file is executable. -# -# Then, in your .vimrc file, set: -# -# g:vimwiki_customwiki2html=$HOME.'/.vim/autoload/vimwiki/customwiki2html.sh' -# -# On your next restart, Vimwiki will run this script instead of using the -# internal wiki2html converter. -# - -MARKDOWN=markdown -MKD2HTML=mkd2html - - -FORCE="$1" -SYNTAX="$2" -EXTENSION="$3" -OUTPUTDIR="$4" -INPUT="$5" -CSSFILE="$6" - -FORCEFLAG= - -[ $FORCE -eq 0 ] || { FORCEFLAG="-f"; }; -[ $SYNTAX = "markdown" ] || { echo "Error: Unsupported syntax"; exit -2; }; - -OUTPUT="$OUTPUTDIR"/$(basename "$INPUT" .$EXTENSION).html - -# # Method 1: -# # markdown [-d] [-T] [-V] [-b url-base] [-C prefix] [-F bitmap] [-f flags] [-o file] [-s text] [-t text] [textfile] -# -# URLBASE=http://example.com -# $MARKDOWN -T -b $URLBASE -o $OUTPUT $INPUT - - -# Method 2: -# mkd2html [-css file] [-header string] [-footer string] [file] - -$MKD2HTML -css "$CSSFILE" "$INPUT" -OUTPUTTMP=$(dirname "$INPUT")/$(basename "$INPUT" ."$EXTENSION").html -mv -f "$OUTPUTTMP" "$OUTPUT" - - - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/default.tpl b/vim/.vim/plugged/vimwiki/autoload/vimwiki/default.tpl deleted file mode 100644 index 3a4045f..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/default.tpl +++ /dev/null @@ -1,11 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link rel="Stylesheet" type="text/css" href="%root_path%%css%"> -<title>%title%</title> -<meta http-equiv="Content-Type" content="text/html; charset=%encoding%"> -</head> -<body> -%content% -</body> -</html> diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/diary.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/diary.vim deleted file mode 100644 index 164211d..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/diary.vim +++ /dev/null @@ -1,322 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: Handle diary notes -" Home: https://github.com/vimwiki/vimwiki/ - - -if exists("g:loaded_vimwiki_diary_auto") || &cp - finish -endif -let g:loaded_vimwiki_diary_auto = 1 - - -let s:vimwiki_max_scan_for_caption = 5 - - -function! s:prefix_zero(num) - if a:num < 10 - return '0'.a:num - endif - return a:num -endfunction - - -function! s:diary_path(...) - let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 - return vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx) -endfunction - - -function! s:diary_index(...) - 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) -endfunction - - -function! vimwiki#diary#diary_date_link(...) - if a:0 - return strftime('%Y-%m-%d', a:1) - else - return strftime('%Y-%m-%d') - endif -endfunction - - -function! s:get_position_links(link) - let idx = -1 - let links = [] - if a:link =~# '^\d\{4}-\d\d-\d\d' - let links = map(s:get_diary_files(), 'fnamemodify(v:val, ":t:r")') - " include 'today' into links - if index(links, vimwiki#diary#diary_date_link()) == -1 - call add(links, vimwiki#diary#diary_date_link()) - endif - call sort(links) - let idx = index(links, a:link) - endif - return [idx, links] -endfunction - - -function! s:get_month_name(month) - return vimwiki#vars#get_global('diary_months')[str2nr(a:month)] -endfunction - - -function! s:read_captions(files) - let result = {} - let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader') - for fl in a:files - " remove paths and extensions - let fl_key = substitute(fnamemodify(fl, ':t'), vimwiki#vars#get_wikilocal('ext').'$', '', '') - - if filereadable(fl) - for line in readfile(fl, '', s:vimwiki_max_scan_for_caption) - if line =~# rx_header && !has_key(result, fl_key) - let result[fl_key] = vimwiki#u#trim(matchstr(line, rx_header)) - endif - endfor - endif - - if !has_key(result, fl_key) - let result[fl_key] = '' - endif - - endfor - return result -endfunction - - -function! s:get_diary_files() - let rx = '^\d\{4}-\d\d-\d\d' - let s_files = glob(vimwiki#vars#get_wikilocal('path'). - \ vimwiki#vars#get_wikilocal('diary_rel_path').'*'.vimwiki#vars#get_wikilocal('ext')) - let files = split(s_files, '\n') - call filter(files, 'fnamemodify(v:val, ":t") =~# "'.escape(rx, '\').'"') - - " remove backup files (.wiki~) - call filter(files, 'v:val !~# ''.*\~$''') - - return files -endfunction - - -function! s:group_links(links) - let result = {} - let p_year = 0 - let p_month = 0 - for fl in sort(keys(a:links)) - let year = strpart(fl, 0, 4) - let month = strpart(fl, 5, 2) - if p_year != year - let result[year] = {} - let p_month = 0 - endif - if p_month != month - let result[year][month] = {} - endif - let result[year][month][fl] = a:links[fl] - let p_year = year - let p_month = month - endfor - return result -endfunction - - -function! s:sort(lst) - if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc' - return reverse(sort(a:lst)) - else - return sort(a:lst) - endif -endfunction - - -function! s:format_diary() - let result = [] - - 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)) - call add(result, '') - call add(result, - \ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , '')) - - for month in s:sort(keys(g_files[year])) - call add(result, '') - 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])) - let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate2') - - if vimwiki#vars#get_wikilocal('syntax') == 'markdown' - let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template') - - if empty(cap) " When using markdown syntax, we should ensure we always have a link description. - let cap = fl - endif - elseif empty(cap) - let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1') - endif - - let entry = substitute(link_tpl, '__LinkUrl__', fl, '') - let entry = substitute(entry, '__LinkDescription__', cap, '') - call add(result, repeat(' ', vimwiki#lst#get_list_margin()).'* '.entry) - endfor - - endfor - endfor - - return result -endfunction - - -" The given wiki number a:wnum is 1 for the first wiki, 2 for the second and so on. This is in -" contrast to most other places, where counting starts with 0. When a:wnum is 0, the current wiki -" is used. -function! vimwiki#diary#make_note(wnum, ...) - if a:wnum == 0 - let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') - if wiki_nr < 0 " this happens when e.g. VimwikiMakeDiaryNote was called outside a wiki buffer - let wiki_nr = 0 - endif - else - let wiki_nr = a:wnum - 1 - endif - - if wiki_nr >= vimwiki#vars#number_of_wikis() - echomsg 'Vimwiki Error: Wiki '.wiki_nr.' is not registered in g:vimwiki_list!' - return - endif - - " TODO: refactor it. base#goto_index uses the same - - call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', wiki_nr). - \ vimwiki#vars#get_wikilocal('diary_rel_path', wiki_nr)) - - 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 - if a:0>1 - let link = 'diary:'.a:2 - else - let link = 'diary:'.vimwiki#diary#diary_date_link() - endif - - call vimwiki#base#open_link(cmd, link, s:diary_index(wiki_nr)) -endfunction - - -function! vimwiki#diary#goto_diary_index(wnum) - if a:wnum > vimwiki#vars#number_of_wikis() - echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' - return - endif - - " TODO: refactor it. base#goto_index uses the same - if a:wnum > 0 - let idx = a:wnum - 1 - else - let idx = 0 - endif - - call vimwiki#base#edit_file('e', s:diary_index(idx), '') -endfunction - - -function! vimwiki#diary#goto_next_day() - let link = '' - let [idx, links] = s:get_position_links(expand('%:t:r')) - - if idx == (len(links) - 1) - return - endif - - if idx != -1 && idx < len(links) - 1 - let link = 'diary:'.links[idx+1] - else - " goto today - let link = 'diary:'.vimwiki#diary#diary_date_link() - endif - - if len(link) - call vimwiki#base#open_link(':e ', link) - endif -endfunction - - -function! vimwiki#diary#goto_prev_day() - let link = '' - let [idx, links] = s:get_position_links(expand('%:t:r')) - - if idx == 0 - return - endif - - if idx > 0 - let link = 'diary:'.links[idx-1] - else - " goto today - let link = 'diary:'.vimwiki#diary#diary_date_link() - endif - - if len(link) - call vimwiki#base#open_link(':e ', link) - endif -endfunction - - -function! vimwiki#diary#generate_diary_section() - let current_file = vimwiki#path#path_norm(expand("%:p")) - let diary_file = vimwiki#path#path_norm(s:diary_index()) - if vimwiki#path#is_equal(current_file, diary_file) - let content_rx = '^\%(\s*\* \)\|\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxHeader').'\)' - call vimwiki#base#update_listing_in_buffer(s:format_diary(), - \ vimwiki#vars#get_wikilocal('diary_header'), content_rx, line('$')+1, 1) - else - echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!' - endif -endfunction - - -" Callback function for Calendar.vim -function! vimwiki#diary#calendar_action(day, month, year, week, dir) - let day = s:prefix_zero(a:day) - let month = s:prefix_zero(a:month) - - let link = a:year.'-'.month.'-'.day - if winnr('#') == 0 - if a:dir ==? 'V' - vsplit - else - split - endif - else - wincmd p - if !&hidden && &modified - new - endif - endif - - call vimwiki#diary#make_note(0, 0, link) -endfunction - - -function vimwiki#diary#calendar_sign(day, month, year) - let day = s:prefix_zero(a:day) - let month = s:prefix_zero(a:month) - let sfile = vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path'). - \ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext') - return filereadable(expand(sfile)) -endfunction - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/html.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/html.vim deleted file mode 100644 index bce5465..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/html.vim +++ /dev/null @@ -1,1666 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: HTML export -" Home: https://github.com/vimwiki/vimwiki/ - - -if exists("g:loaded_vimwiki_html_auto") || &cp - finish -endif -let g:loaded_vimwiki_html_auto = 1 - - -function! s:root_path(subdir) - return repeat('../', len(split(a:subdir, '[/\\]'))) -endfunction - - -function! s:syntax_supported() - return vimwiki#vars#get_wikilocal('syntax') ==? "default" -endfunction - - -function! s:remove_blank_lines(lines) - while !empty(a:lines) && a:lines[-1] =~# '^\s*$' - call remove(a:lines, -1) - endwhile -endfunction - - -function! s:is_web_link(lnk) - if a:lnk =~# '^\%(https://\|http://\|www.\|ftp://\|file://\|mailto:\)' - return 1 - endif - return 0 -endfunction - - -function! s:is_img_link(lnk) - if tolower(a:lnk) =~# '\.\%(png\|jpg\|gif\|jpeg\)$' - return 1 - endif - return 0 -endfunction - - -function! s:has_abs_path(fname) - if a:fname =~# '\(^.:\)\|\(^/\)' - return 1 - endif - return 0 -endfunction - - -function! s:find_autoload_file(name) - for path in split(&runtimepath, ',') - let fname = path.'/autoload/vimwiki/'.a:name - if glob(fname) != '' - return fname - endif - endfor - return '' -endfunction - - -function! s:default_CSS_full_name(path) - let path = expand(a:path) - let css_full_name = path . vimwiki#vars#get_wikilocal('css_name') - return css_full_name -endfunction - - -function! s:create_default_CSS(path) - let css_full_name = s:default_CSS_full_name(a:path) - if glob(css_full_name) == "" - call vimwiki#path#mkdir(fnamemodify(css_full_name, ':p:h')) - let default_css = s:find_autoload_file('style.css') - if default_css != '' - let lines = readfile(default_css) - call writefile(lines, css_full_name) - return 1 - endif - endif - return 0 -endfunction - - -function! s:template_full_name(name) - if a:name == '' - let name = vimwiki#vars#get_wikilocal('template_default') - else - let name = a:name - endif - - let fname = expand(vimwiki#vars#get_wikilocal('template_path'). - \ name . vimwiki#vars#get_wikilocal('template_ext')) - - if filereadable(fname) - return fname - else - return '' - endif -endfunction - - -function! s:get_html_template(template) - " TODO: refactor it!!! - let lines=[] - - if a:template != '' - let template_name = s:template_full_name(a:template) - try - let lines = readfile(template_name) - return lines - catch /E484/ - echomsg 'Vimwiki: HTML template '.template_name. ' does not exist!' - endtry - endif - - let default_tpl = s:template_full_name('') - - if default_tpl == '' - let default_tpl = s:find_autoload_file('default.tpl') - endif - - let lines = readfile(default_tpl) - return lines -endfunction - - -function! s:safe_html_preformatted(line) - let line = substitute(a:line,'<','\<', 'g') - let line = substitute(line,'>','\>', 'g') - return line -endfunction - - -function! s:escape_html_attribute(string) - return substitute(a:string, '"', '\"', 'g') -endfunction - - -function! s:safe_html_line(line) - " escape & < > when producing HTML text - " s:lt_pattern, s:gt_pattern depend on g:vimwiki_valid_html_tags - " and are set in vimwiki#html#Wiki2HTML() - let line = substitute(a:line, '&', '\&', 'g') - let line = substitute(line,s:lt_pattern,'\<', 'g') - let line = substitute(line,s:gt_pattern,'\>', 'g') - - return line -endfunction - - -function! s:delete_html_files(path) - let htmlfiles = split(glob(a:path.'**/*.html'), '\n') - for fname in htmlfiles - " ignore user html files, e.g. search.html,404.html - if stridx(vimwiki#vars#get_global('user_htmls'), fnamemodify(fname, ":t")) >= 0 - continue - endif - - " delete if there is no corresponding wiki file - let subdir = vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path_html'), fname) - let wikifile = vimwiki#vars#get_wikilocal('path').subdir. - \fnamemodify(fname, ":t:r").vimwiki#vars#get_wikilocal('ext') - if filereadable(wikifile) - continue - endif - - try - call delete(fname) - catch - echomsg 'Vimwiki Error: Cannot delete '.fname - endtry - endfor -endfunction - - -function! s:mid(value, cnt) - return strpart(a:value, a:cnt, len(a:value) - 2 * a:cnt) -endfunction - - -function! s:subst_func(line, regexp, func, ...) - " Substitute text found by regexp with result of - " func(matched) function. - - let pos = 0 - let lines = split(a:line, a:regexp, 1) - let res_line = "" - for line in lines - let res_line = res_line.line - let matched = matchstr(a:line, a:regexp, pos) - if matched != "" - if a:0 - let res_line = res_line.{a:func}(matched, a:1) - else - let res_line = res_line.{a:func}(matched) - endif - endif - let pos = matchend(a:line, a:regexp, pos) - endfor - return res_line -endfunction - - -function! s:save_vimwiki_buffer() - if &filetype ==? 'vimwiki' && filewritable(expand('%')) - silent update - endif -endfunction - - -function! s:process_date(placeholders, default_date) - if !empty(a:placeholders) - for [placeholder, row, idx] in a:placeholders - let [type, param] = placeholder - if type ==# 'date' && !empty(param) - return param - endif - endfor - endif - return a:default_date -endfunction - - -function! s:process_title(placeholders, default_title) - if !empty(a:placeholders) - for [placeholder, row, idx] in a:placeholders - let [type, param] = placeholder - if type ==# 'title' && !empty(param) - return param - endif - endfor - endif - return a:default_title -endfunction - - -function! s:is_html_uptodate(wikifile) - let tpl_time = -1 - - let tpl_file = s:template_full_name('') - if tpl_file != '' - let tpl_time = getftime(tpl_file) - endif - - let wikifile = fnamemodify(a:wikifile, ":p") - let htmlfile = expand(vimwiki#vars#get_wikilocal('path_html') . - \ vimwiki#vars#get_bufferlocal('subdir') . fnamemodify(wikifile, ":t:r").".html") - - if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile) - return 1 - endif - return 0 -endfunction - - -function! s:html_insert_contents(html_lines, content) - let lines = [] - for line in a:html_lines - if line =~# '%content%' - let parts = split(line, '%content%', 1) - if empty(parts) - call extend(lines, a:content) - else - for idx in range(len(parts)) - call add(lines, parts[idx]) - if idx < len(parts) - 1 - call extend(lines, a:content) - endif - endfor - endif - else - call add(lines, line) - endif - endfor - return lines -endfunction - - -function! s:tag_eqin(value) - " mathJAX wants \( \) for inline maths - return '\('.s:mid(a:value, 1).'\)' -endfunction - - -function! s:tag_em(value) - return '<em>'.s:mid(a:value, 1).'</em>' -endfunction - - -function! s:tag_strong(value, header_ids) - let text = s:mid(a:value, 1) - let id = s:escape_html_attribute(text) - let complete_id = '' - for l in range(6) - if a:header_ids[l][0] != '' - let complete_id .= a:header_ids[l][0].'-' - endif - endfor - if a:header_ids[5][0] == '' - let complete_id = complete_id[:-2] - endif - let complete_id .= '-'.id - return '<span id="'.s:escape_html_attribute(complete_id).'"></span><strong id="' - \ .id.'">'.text.'</strong>' -endfunction - - -function! s:tag_tags(value, header_ids) - let complete_id = '' - for level in range(6) - if a:header_ids[level][0] != '' - let complete_id .= a:header_ids[level][0].'-' - endif - endfor - if a:header_ids[5][0] == '' - let complete_id = complete_id[:-2] - endif - let complete_id = s:escape_html_attribute(complete_id) - - let result = [] - for tag in split(a:value, ':') - let id = s:escape_html_attribute(tag) - call add(result, '<span id="'.complete_id.'-'.id.'"></span><span class="tag" id="' - \ .id.'">'.tag.'</span>') - endfor - return join(result) -endfunction - - -function! s:tag_todo(value) - return '<span class="todo">'.a:value.'</span>' -endfunction - - -function! s:tag_strike(value) - return '<del>'.s:mid(a:value, 2).'</del>' -endfunction - - -function! s:tag_super(value) - return '<sup><small>'.s:mid(a:value, 1).'</small></sup>' -endfunction - - -function! s:tag_sub(value) - return '<sub><small>'.s:mid(a:value, 2).'</small></sub>' -endfunction - - -function! s:tag_code(value) - return '<code>'.s:safe_html_preformatted(s:mid(a:value, 1)).'</code>' -endfunction - - -" match n-th ARG within {{URL[|ARG1|ARG2|...]}} -" *c,d,e),... -function! s:incl_match_arg(nn_index) - let rx = vimwiki#vars#get_global('rxWikiInclPrefix'). vimwiki#vars#get_global('rxWikiInclUrl') - let rx = rx . repeat(vimwiki#vars#get_global('rxWikiInclSeparator') . - \ vimwiki#vars#get_global('rxWikiInclArg'), a:nn_index-1) - if a:nn_index > 0 - let rx = rx. vimwiki#vars#get_global('rxWikiInclSeparator'). '\zs' . - \ vimwiki#vars#get_global('rxWikiInclArg') . '\ze' - endif - let rx = rx . vimwiki#vars#get_global('rxWikiInclArgs') . - \ vimwiki#vars#get_global('rxWikiInclSuffix') - return rx -endfunction - - -function! s:linkify_link(src, descr) - let src_str = ' href="'.s:escape_html_attribute(a:src).'"' - let descr = substitute(a:descr,'^\s*\(.*\)\s*$','\1','') - let descr = (descr == "" ? a:src : descr) - let descr_str = (descr =~# vimwiki#vars#get_global('rxWikiIncl') - \ ? s:tag_wikiincl(descr) - \ : descr) - return '<a'.src_str.'>'.descr_str.'</a>' -endfunction - - -function! s:linkify_image(src, descr, verbatim_str) - let src_str = ' src="'.a:src.'"' - let descr_str = (a:descr != '' ? ' alt="'.a:descr.'"' : '') - let verbatim_str = (a:verbatim_str != '' ? ' '.a:verbatim_str : '') - return '<img'.src_str.descr_str.verbatim_str.' />' -endfunction - - -function! s:tag_weblink(value) - " Weblink Template -> <a href="url">descr</a> - let str = a:value - let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) - let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr')) - let line = s:linkify_link(url, descr) - return line -endfunction - - -function! s:tag_wikiincl(value) - " {{imgurl|arg1|arg2}} -> ??? - " {{imgurl}} -> <img src="imgurl"/> - " {{imgurl|descr|style="A"}} -> <img src="imgurl" alt="descr" style="A" /> - " {{imgurl|descr|class="B"}} -> <img src="imgurl" alt="descr" class="B" /> - let str = a:value - " custom transclusions - let line = VimwikiWikiIncludeHandler(str) - " otherwise, assume image transclusion - if line == '' - let url_0 = matchstr(str, vimwiki#vars#get_global('rxWikiInclMatchUrl')) - let descr = matchstr(str, s:incl_match_arg(1)) - let verbatim_str = matchstr(str, s:incl_match_arg(2)) - - let link_infos = vimwiki#base#resolve_link(url_0) - - if link_infos.scheme =~# '\mlocal\|wiki\d\+\|diary' - let url = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'), link_infos.filename) - " strip the .html extension when we have wiki links, so that the user can - " simply write {{image.png}} to include an image from the wiki directory - if link_infos.scheme =~# '\mwiki\d\+\|diary' - let url = fnamemodify(url, ':r') - endif - else - let url = link_infos.filename - endif - - let url = escape(url, '#') - let line = s:linkify_image(url, descr, verbatim_str) - endif - return line -endfunction - - -function! s:tag_wikilink(value) - " [[url]] -> <a href="url.html">url</a> - " [[url|descr]] -> <a href="url.html">descr</a> - " [[url|{{...}}]] -> <a href="url.html"> ... </a> - " [[fileurl.ext|descr]] -> <a href="fileurl.ext">descr</a> - " [[dirurl/|descr]] -> <a href="dirurl/index.html">descr</a> - " [[url#a1#a2]] -> <a href="url.html#a1-a2">url#a1#a2</a> - " [[#a1#a2]] -> <a href="#a1-a2">#a1#a2</a> - let str = a:value - let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) - let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr')) - let descr = (substitute(descr,'^\s*\(.*\)\s*$','\1','') != '' ? descr : url) - - let line = VimwikiLinkConverter(url, s:current_wiki_file, s:current_html_file) - if line == '' - let link_infos = vimwiki#base#resolve_link(url, s:current_wiki_file) - - if link_infos.scheme ==# 'file' - " external file links are always absolute - let html_link = link_infos.filename - elseif link_infos.scheme ==# 'local' - let html_link = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'), - \ link_infos.filename) - elseif link_infos.scheme =~# '\mwiki\d\+\|diary' - " wiki links are always relative to the current file - let html_link = vimwiki#path#relpath( - \ fnamemodify(s:current_wiki_file, ':h'), - \ fnamemodify(link_infos.filename, ':r')) - if html_link !~ '\m/$' - let html_link .= '.html' - endif - else " other schemes, like http, are left untouched - let html_link = link_infos.filename - endif - - if link_infos.anchor != '' - let anchor = substitute(link_infos.anchor, '#', '-', 'g') - let html_link .= '#'.anchor - endif - let line = html_link - endif - - let line = s:linkify_link(line, descr) - return line -endfunction - - -function! s:tag_remove_internal_link(value) - let value = s:mid(a:value, 2) - - let line = '' - if value =~# '|' - let link_parts = split(value, "|", 1) - else - let link_parts = split(value, "][", 1) - endif - - if len(link_parts) > 1 - if len(link_parts) < 3 - let style = "" - else - let style = link_parts[2] - endif - let line = link_parts[1] - else - let line = value - endif - return line -endfunction - - -function! s:tag_remove_external_link(value) - let value = s:mid(a:value, 1) - - let line = '' - if s:is_web_link(value) - let lnkElements = split(value) - let head = lnkElements[0] - let rest = join(lnkElements[1:]) - if rest == "" - let rest = head - endif - let line = rest - elseif s:is_img_link(value) - let line = '<img src="'.value.'" />' - else - " [alskfj sfsf] shouldn't be a link. So return it as it was -- - " enclosed in [...] - let line = '['.value.']' - endif - return line -endfunction - - -function! s:make_tag(line, regexp, func, ...) - " Make tags for a given matched regexp. - " Exclude preformatted text and href links. - " FIXME - let patt_splitter = '\(`[^`]\+`\)\|'. - \ '\('.vimwiki#vars#get_syntaxlocal('rxPreStart').'.\+'. - \ vimwiki#vars#get_syntaxlocal('rxPreEnd').'\)\|'. - \ '\(<a href.\{-}</a>\)\|'. - \ '\(<img src.\{-}/>\)\|'. - \ '\(<pre.\{-}</pre>\)\|'. - \ '\('.vimwiki#vars#get_syntaxlocal('rxEqIn').'\)' - - "FIXME FIXME !!! these can easily occur on the same line! - "XXX {{{ }}} ??? obsolete - if '`[^`]\+`' ==# a:regexp || '{{{.\+}}}' ==# a:regexp || - \ vimwiki#vars#get_syntaxlocal('rxEqIn') ==# a:regexp - let res_line = s:subst_func(a:line, a:regexp, a:func) - else - let pos = 0 - " split line with patt_splitter to have parts of line before and after - " href links, preformatted text - " ie: - " hello world `is just a` simple <a href="link.html">type of</a> prg. - " result: - " ['hello world ', ' simple ', 'type of', ' prg'] - let lines = split(a:line, patt_splitter, 1) - let res_line = "" - for line in lines - if a:0 - let res_line = res_line.s:subst_func(line, a:regexp, a:func, a:1) - else - let res_line = res_line.s:subst_func(line, a:regexp, a:func) - endif - let res_line = res_line.matchstr(a:line, patt_splitter, pos) - let pos = matchend(a:line, patt_splitter, pos) - endfor - endif - return res_line -endfunction - - -function! s:process_tags_remove_links(line) - let line = a:line - let line = s:make_tag(line, '\[\[.\{-}\]\]', 's:tag_remove_internal_link') - let line = s:make_tag(line, '\[.\{-}\]', 's:tag_remove_external_link') - return line -endfunction - - -function! s:process_tags_typefaces(line, header_ids) - let line = a:line - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxItalic'), 's:tag_em') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxBold'), 's:tag_strong', a:header_ids) - let line = s:make_tag(line, vimwiki#vars#get_global('rxTodo'), 's:tag_todo') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxDelText'), 's:tag_strike') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSuperScript'), 's:tag_super') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSubScript'), 's:tag_sub') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxCode'), 's:tag_code') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxEqIn'), 's:tag_eqin') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxTags'), 's:tag_tags', a:header_ids) - return line -endfunction - - -function! s:process_tags_links(line) - let line = a:line - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWikiLink'), 's:tag_wikilink') - let line = s:make_tag(line, vimwiki#vars#get_global('rxWikiIncl'), 's:tag_wikiincl') - let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWeblink'), 's:tag_weblink') - return line -endfunction - - -function! s:process_inline_tags(line, header_ids) - let line = s:process_tags_links(a:line) - let line = s:process_tags_typefaces(line, a:header_ids) - return line -endfunction - - -function! s:close_tag_pre(pre, ldest) - if a:pre[0] - call insert(a:ldest, "</pre>") - return 0 - endif - return a:pre -endfunction - - -function! s:close_tag_math(math, ldest) - if a:math[0] - call insert(a:ldest, "\\\]") - return 0 - endif - return a:math -endfunction - - -function! s:close_tag_quote(quote, ldest) - if a:quote - call insert(a:ldest, "</blockquote>") - return 0 - endif - return a:quote -endfunction - - -function! s:close_tag_para(para, ldest) - if a:para - call insert(a:ldest, "</p>") - return 0 - endif - return a:para -endfunction - - -function! s:close_tag_table(table, ldest, header_ids) - " The first element of table list is a string which tells us if table should be centered. - " The rest elements are rows which are lists of columns: - " ['center', - " [ CELL1, CELL2, CELL3 ], - " [ CELL1, CELL2, CELL3 ], - " [ CELL1, CELL2, CELL3 ], - " ] - " And CELLx is: { 'body': 'col_x', 'rowspan': r, 'colspan': c } - - function! s:sum_rowspan(table) - let table = a:table - - " Get max cells - let max_cells = 0 - for row in table[1:] - let n_cells = len(row) - if n_cells > max_cells - let max_cells = n_cells - end - endfor - - " Sum rowspan - for cell_idx in range(max_cells) - let rows = 1 - - for row_idx in range(len(table)-1, 1, -1) - if cell_idx >= len(table[row_idx]) - let rows = 1 - continue - endif - - if table[row_idx][cell_idx].rowspan == 0 - let rows += 1 - else " table[row_idx][cell_idx].rowspan == 1 - let table[row_idx][cell_idx].rowspan = rows - let rows = 1 - endif - endfor - endfor - endfunction - - function! s:sum_colspan(table) - for row in a:table[1:] - let cols = 1 - - for cell_idx in range(len(row)-1, 0, -1) - if row[cell_idx].colspan == 0 - let cols += 1 - else "row[cell_idx].colspan == 1 - let row[cell_idx].colspan = cols - let cols = 1 - endif - endfor - endfor - endfunction - - function! s:close_tag_row(row, header, ldest, header_ids) - call add(a:ldest, '<tr>') - - " Set tag element of columns - if a:header - let tag_name = 'th' - else - let tag_name = 'td' - end - - " Close tag of columns - for cell in a:row - if cell.rowspan == 0 || cell.colspan == 0 - continue - endif - - if cell.rowspan > 1 - let rowspan_attr = ' rowspan="' . cell.rowspan . '"' - else "cell.rowspan == 1 - let rowspan_attr = '' - endif - if cell.colspan > 1 - let colspan_attr = ' colspan="' . cell.colspan . '"' - else "cell.colspan == 1 - let colspan_attr = '' - endif - - call add(a:ldest, '<' . tag_name . rowspan_attr . colspan_attr .'>') - call add(a:ldest, s:process_inline_tags(cell.body, a:header_ids)) - call add(a:ldest, '</'. tag_name . '>') - endfor - - call add(a:ldest, '</tr>') - endfunction - - let table = a:table - let ldest = a:ldest - if len(table) - call s:sum_rowspan(table) - call s:sum_colspan(table) - - if table[0] ==# 'center' - call add(ldest, "<table class='center'>") - else - call add(ldest, "<table>") - endif - - " Empty lists are table separators. - " Search for the last empty list. All the above rows would be a table header. - " We should exclude the first element of the table list as it is a text tag - " that shows if table should be centered or not. - let head = 0 - for idx in range(len(table)-1, 1, -1) - if empty(table[idx]) - let head = idx - break - endif - endfor - if head > 0 - for row in table[1 : head-1] - if !empty(filter(row, '!empty(v:val)')) - call s:close_tag_row(row, 1, ldest, a:header_ids) - endif - endfor - for row in table[head+1 :] - call s:close_tag_row(row, 0, ldest, a:header_ids) - endfor - else - for row in table[1 :] - call s:close_tag_row(row, 0, ldest, a:header_ids) - endfor - endif - call add(ldest, "</table>") - let table = [] - endif - return table -endfunction - - -function! s:close_tag_list(lists, ldest) - while len(a:lists) - let item = remove(a:lists, 0) - call insert(a:ldest, item[0]) - endwhile -endfunction - - -function! s:close_tag_def_list(deflist, ldest) - if a:deflist - call insert(a:ldest, "</dl>") - return 0 - endif - return a:deflist -endfunction - - -function! s:process_tag_pre(line, pre) - " pre is the list of [is_in_pre, indent_of_pre] - "XXX always outputs a single line or empty list! - let lines = [] - let pre = a:pre - let processed = 0 - "XXX huh? - "if !pre[0] && a:line =~# '^\s*{{{[^\(}}}\)]*\s*$' - if !pre[0] && a:line =~# '^\s*{{{' - let class = matchstr(a:line, '{{{\zs.*$') - "FIXME class cannot contain arbitrary strings - let class = substitute(class, '\s\+$', '', 'g') - if class != "" - call add(lines, "<pre ".class.">") - else - call add(lines, "<pre>") - endif - let pre = [1, len(matchstr(a:line, '^\s*\ze{{{'))] - let processed = 1 - elseif pre[0] && a:line =~# '^\s*}}}\s*$' - let pre = [0, 0] - call add(lines, "</pre>") - let processed = 1 - elseif pre[0] - let processed = 1 - "XXX destroys indent in general! - "call add(lines, substitute(a:line, '^\s\{'.pre[1].'}', '', '')) - call add(lines, s:safe_html_preformatted(a:line)) - endif - return [processed, lines, pre] -endfunction - - -function! s:process_tag_math(line, math) - " math is the list of [is_in_math, indent_of_math] - let lines = [] - let math = a:math - let processed = 0 - if !math[0] && a:line =~# '^\s*{{\$[^\(}}$\)]*\s*$' - let class = matchstr(a:line, '{{$\zs.*$') - "FIXME class cannot be any string! - let class = substitute(class, '\s\+$', '', 'g') - " store the environment name in a global variable in order to close the - " environment properly - let s:current_math_env = matchstr(class, '^%\zs\S\+\ze%') - if s:current_math_env != "" - call add(lines, substitute(class, '^%\(\S\+\)%','\\begin{\1}', '')) - elseif class != "" - call add(lines, "\\\[".class) - else - call add(lines, "\\\[") - endif - let math = [1, len(matchstr(a:line, '^\s*\ze{{\$'))] - let processed = 1 - elseif math[0] && a:line =~# '^\s*}}\$\s*$' - let math = [0, 0] - if s:current_math_env != "" - call add(lines, "\\end{".s:current_math_env."}") - else - call add(lines, "\\\]") - endif - let processed = 1 - elseif math[0] - let processed = 1 - call add(lines, substitute(a:line, '^\s\{'.math[1].'}', '', '')) - endif - return [processed, lines, math] -endfunction - - -function! s:process_tag_quote(line, quote) - let lines = [] - let quote = a:quote - let processed = 0 - if a:line =~# '^\s\{4,}\S' - if !quote - call add(lines, "<blockquote>") - let quote = 1 - endif - let processed = 1 - call add(lines, substitute(a:line, '^\s*', '', '')) - elseif quote - call add(lines, "</blockquote>") - let quote = 0 - endif - return [processed, lines, quote] -endfunction - - -function! s:process_tag_list(line, lists) - - function! s:add_checkbox(line, rx_list) - let st_tag = '<li>' - let chk = matchlist(a:line, a:rx_list) - if !empty(chk) && len(chk[1]) > 0 - let completion = index(vimwiki#vars#get_syntaxlocal('listsyms_list'), chk[1]) - let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) - if completion == 0 - let st_tag = '<li class="done0">' - elseif completion == -1 && chk[1] == vimwiki#vars#get_global('listsym_rejected') - let st_tag = '<li class="rejected">' - elseif completion > 0 && completion < n - let completion = float2nr(round(completion / (n-1.0) * 3.0 + 0.5 )) - let st_tag = '<li class="done'.completion.'">' - endif - endif - return [st_tag, ''] - endfunction - - - let in_list = (len(a:lists) > 0) - - " If it is not list yet then do not process line that starts from *bold* - " text. - " XXX necessary? in *bold* text, no space must follow the first * - if !in_list - let pos = match(a:line, '^\s*'.vimwiki#vars#get_syntaxlocal('rxBold')) - if pos != -1 - return [0, []] - endif - endif - - let lines = [] - let processed = 0 - - if a:line =~# '^\s*'.s:bullets.'\s' - let lstSym = matchstr(a:line, s:bullets) - let lstTagOpen = '<ul>' - let lstTagClose = '</ul>' - let lstRegExp = '^\s*'.s:bullets.'\s' - elseif a:line =~# '^\s*'.s:numbers.'\s' - let lstSym = matchstr(a:line, s:numbers) - let lstTagOpen = '<ol>' - let lstTagClose = '</ol>' - let lstRegExp = '^\s*'.s:numbers.'\s' - else - let lstSym = '' - let lstTagOpen = '' - let lstTagClose = '' - let lstRegExp = '' - endif - - if lstSym != '' - " To get proper indent level 'retab' the line -- change all tabs - " to spaces*tabstop - let line = substitute(a:line, '\t', repeat(' ', &tabstop), 'g') - let indent = stridx(line, lstSym) - - let checkbox = '\s*\[\(.\)\]\s*' - let [st_tag, en_tag] = s:add_checkbox(line, lstRegExp.checkbox) - - if !in_list - call add(a:lists, [lstTagClose, indent]) - call add(lines, lstTagOpen) - elseif (in_list && indent > a:lists[-1][1]) - let item = remove(a:lists, -1) - call add(lines, item[0]) - - call add(a:lists, [lstTagClose, indent]) - call add(lines, lstTagOpen) - elseif (in_list && indent < a:lists[-1][1]) - while len(a:lists) && indent < a:lists[-1][1] - let item = remove(a:lists, -1) - call add(lines, item[0]) - endwhile - elseif in_list - let item = remove(a:lists, -1) - call add(lines, item[0]) - endif - - call add(a:lists, [en_tag, indent]) - call add(lines, st_tag) - call add(lines, substitute(a:line, lstRegExp.'\%('.checkbox.'\)\?', '', '')) - let processed = 1 - elseif in_list && a:line =~# '^\s\+\S\+' - if vimwiki#vars#get_global('list_ignore_newline') - call add(lines, a:line) - else - call add(lines, '<br />'.a:line) - endif - let processed = 1 - else - call s:close_tag_list(a:lists, lines) - endif - return [processed, lines] -endfunction - - -function! s:process_tag_def_list(line, deflist) - let lines = [] - let deflist = a:deflist - let processed = 0 - let matches = matchlist(a:line, '\(^.*\)::\%(\s\|$\)\(.*\)') - if !deflist && len(matches) > 0 - call add(lines, "<dl>") - let deflist = 1 - endif - if deflist && len(matches) > 0 - if matches[1] != '' - call add(lines, "<dt>".matches[1]."</dt>") - endif - if matches[2] != '' - call add(lines, "<dd>".matches[2]."</dd>") - endif - let processed = 1 - elseif deflist - let deflist = 0 - call add(lines, "</dl>") - endif - return [processed, lines, deflist] -endfunction - - -function! s:process_tag_para(line, para) - let lines = [] - let para = a:para - let processed = 0 - if a:line =~# '^\s\{,3}\S' - if !para - call add(lines, "<p>") - let para = 1 - endif - let processed = 1 - if vimwiki#vars#get_global('text_ignore_newline') - call add(lines, a:line) - else - call add(lines, a:line."<br />") - endif - elseif para && a:line =~# '^\s*$' - call add(lines, "</p>") - let para = 0 - endif - return [processed, lines, para] -endfunction - - -function! s:process_tag_h(line, id) - let line = a:line - let processed = 0 - let h_level = 0 - let h_text = '' - let h_id = '' - - if a:line =~# vimwiki#vars#get_syntaxlocal('rxHeader') - let h_level = vimwiki#u#count_first_sym(a:line) - endif - if h_level > 0 - - let h_text = vimwiki#u#trim(matchstr(line, vimwiki#vars#get_syntaxlocal('rxHeader'))) - let h_number = '' - let h_complete_id = '' - let h_id = s:escape_html_attribute(h_text) - let centered = (a:line =~# '^\s') - - if h_text !=# vimwiki#vars#get_global('toc_header') - - let a:id[h_level-1] = [h_text, a:id[h_level-1][1]+1] - - " reset higher level ids - for level in range(h_level, 5) - let a:id[level] = ['', 0] - endfor - - for l in range(h_level-1) - let h_number .= a:id[l][1].'.' - if a:id[l][0] != '' - let h_complete_id .= a:id[l][0].'-' - endif - endfor - let h_number .= a:id[h_level-1][1] - let h_complete_id .= a:id[h_level-1][0] - - if vimwiki#vars#get_global('html_header_numbering') - let num = matchstr(h_number, - \ '^\(\d.\)\{'.(vimwiki#vars#get_global('html_header_numbering')-1).'}\zs.*') - if !empty(num) - let num .= vimwiki#vars#get_global('html_header_numbering_sym') - endif - let h_text = num.' '.h_text - endif - let h_complete_id = s:escape_html_attribute(h_complete_id) - let h_part = '<div id="'.h_complete_id.'"><h'.h_level.' id="'.h_id.'"' - - else - - let h_part = '<div id="'.h_id.'" class="toc"><h1 id="'.h_id.'"' - - endif - - if centered - let h_part .= ' class="justcenter">' - else - let h_part .= '>' - endif - - let h_text = s:process_inline_tags(h_text, a:id) - - let line = h_part.h_text.'</h'.h_level.'></div>' - - let processed = 1 - endif - return [processed, line] -endfunction - - -function! s:process_tag_hr(line) - let line = a:line - let processed = 0 - if a:line =~# '^-----*$' - let line = '<hr />' - let processed = 1 - endif - return [processed, line] -endfunction - - -function! s:process_tag_table(line, table, header_ids) - function! s:table_empty_cell(value) - let cell = {} - - if a:value =~# '^\s*\\/\s*$' - let cell.body = '' - let cell.rowspan = 0 - let cell.colspan = 1 - elseif a:value =~# '^\s*>\s*$' - let cell.body = '' - let cell.rowspan = 1 - let cell.colspan = 0 - elseif a:value =~# '^\s*$' - let cell.body = ' ' - let cell.rowspan = 1 - let cell.colspan = 1 - else - let cell.body = a:value - let cell.rowspan = 1 - let cell.colspan = 1 - endif - - return cell - endfunction - - function! s:table_add_row(table, line) - if empty(a:table) - if a:line =~# '^\s\+' - let row = ['center', []] - else - let row = ['normal', []] - endif - else - let row = [[]] - endif - return row - endfunction - - let table = a:table - let lines = [] - let processed = 0 - - if vimwiki#tbl#is_separator(a:line) - call extend(table, s:table_add_row(a:table, a:line)) - let processed = 1 - elseif vimwiki#tbl#is_table(a:line) - call extend(table, s:table_add_row(a:table, a:line)) - - let processed = 1 - " let cells = split(a:line, vimwiki#tbl#cell_splitter(), 1)[1: -2] - let cells = vimwiki#tbl#get_cells(a:line) - call map(cells, 's:table_empty_cell(v:val)') - call extend(table[-1], cells) - else - let table = s:close_tag_table(table, lines, a:header_ids) - endif - return [processed, lines, table] -endfunction - - -function! s:parse_line(line, state) - let state = {} - let state.para = a:state.para - let state.quote = a:state.quote - let state.pre = a:state.pre[:] - let state.math = a:state.math[:] - let state.table = a:state.table[:] - let state.lists = a:state.lists[:] - let state.deflist = a:state.deflist - let state.placeholder = a:state.placeholder - let state.header_ids = a:state.header_ids - - let res_lines = [] - - let line = s:safe_html_line(a:line) - - let processed = 0 - - " pres - if !processed - let [processed, lines, state.pre] = s:process_tag_pre(line, state.pre) - " pre is just fine to be in the list -- do not close list item here. - " if processed && len(state.lists) - " call s:close_tag_list(state.lists, lines) - " endif - if !processed - let [processed, lines, state.math] = s:process_tag_math(line, state.math) - endif - if processed && len(state.table) - let state.table = s:close_tag_table(state.table, lines, state.header_ids) - endif - if processed && state.deflist - let state.deflist = s:close_tag_def_list(state.deflist, lines) - endif - if processed && state.quote - let state.quote = s:close_tag_quote(state.quote, lines) - endif - if processed && state.para - let state.para = s:close_tag_para(state.para, lines) - endif - call extend(res_lines, lines) - endif - - - if !processed - if line =~# vimwiki#vars#get_syntaxlocal('rxComment') - let processed = 1 - endif - endif - - " nohtml -- placeholder - if !processed - if line =~# '\m^\s*%nohtml\s*$' - let processed = 1 - let state.placeholder = ['nohtml'] - endif - endif - - " title -- placeholder - if !processed - if line =~# '\m^\s*%title\%(\s.*\)\?$' - let processed = 1 - let param = matchstr(line, '\m^\s*%title\s\+\zs.*') - let state.placeholder = ['title', param] - endif - endif - - " date -- placeholder - if !processed - if line =~# '\m^\s*%date\%(\s.*\)\?$' - let processed = 1 - let param = matchstr(line, '\m^\s*%date\s\+\zs.*') - let state.placeholder = ['date', param] - endif - endif - - " html template -- placeholder - if !processed - if line =~# '\m^\s*%template\%(\s.*\)\?$' - let processed = 1 - let param = matchstr(line, '\m^\s*%template\s\+\zs.*') - let state.placeholder = ['template', param] - endif - endif - - - " tables - if !processed - let [processed, lines, state.table] = s:process_tag_table(line, state.table, state.header_ids) - call extend(res_lines, lines) - endif - - - " lists - if !processed - let [processed, lines] = s:process_tag_list(line, state.lists) - if processed && state.quote - let state.quote = s:close_tag_quote(state.quote, lines) - endif - if processed && state.pre[0] - let state.pre = s:close_tag_pre(state.pre, lines) - endif - if processed && state.math[0] - let state.math = s:close_tag_math(state.math, lines) - endif - if processed && len(state.table) - let state.table = s:close_tag_table(state.table, lines, state.header_ids) - endif - if processed && state.deflist - let state.deflist = s:close_tag_def_list(state.deflist, lines) - endif - if processed && state.para - let state.para = s:close_tag_para(state.para, lines) - endif - - call map(lines, 's:process_inline_tags(v:val, state.header_ids)') - - call extend(res_lines, lines) - endif - - - " headers - if !processed - let [processed, line] = s:process_tag_h(line, state.header_ids) - if processed - call s:close_tag_list(state.lists, res_lines) - let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) - let state.pre = s:close_tag_pre(state.pre, res_lines) - let state.math = s:close_tag_math(state.math, res_lines) - let state.quote = s:close_tag_quote(state.quote, res_lines) - let state.para = s:close_tag_para(state.para, res_lines) - - call add(res_lines, line) - endif - endif - - - " quotes - if !processed - let [processed, lines, state.quote] = s:process_tag_quote(line, state.quote) - if processed && len(state.lists) - call s:close_tag_list(state.lists, lines) - endif - if processed && state.deflist - let state.deflist = s:close_tag_def_list(state.deflist, lines) - endif - if processed && len(state.table) - let state.table = s:close_tag_table(state.table, lines, state.header_ids) - endif - if processed && state.pre[0] - let state.pre = s:close_tag_pre(state.pre, lines) - endif - if processed && state.math[0] - let state.math = s:close_tag_math(state.math, lines) - endif - if processed && state.para - let state.para = s:close_tag_para(state.para, lines) - endif - - call map(lines, 's:process_inline_tags(v:val, state.header_ids)') - - call extend(res_lines, lines) - endif - - - " horizontal rules - if !processed - let [processed, line] = s:process_tag_hr(line) - if processed - call s:close_tag_list(state.lists, res_lines) - let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) - let state.pre = s:close_tag_pre(state.pre, res_lines) - let state.math = s:close_tag_math(state.math, res_lines) - call add(res_lines, line) - endif - endif - - - " definition lists - if !processed - let [processed, lines, state.deflist] = s:process_tag_def_list(line, state.deflist) - - call map(lines, 's:process_inline_tags(v:val, state.header_ids)') - - call extend(res_lines, lines) - endif - - - "" P - if !processed - let [processed, lines, state.para] = s:process_tag_para(line, state.para) - if processed && len(state.lists) - call s:close_tag_list(state.lists, lines) - endif - if processed && state.quote - let state.quote = s:close_tag_quote(state.quote, res_lines) - endif - if processed && state.pre[0] - let state.pre = s:close_tag_pre(state.pre, res_lines) - endif - if processed && state.math[0] - let state.math = s:close_tag_math(state.math, res_lines) - endif - if processed && len(state.table) - let state.table = s:close_tag_table(state.table, res_lines, state.header_ids) - endif - - call map(lines, 's:process_inline_tags(v:val, state.header_ids)') - - call extend(res_lines, lines) - endif - - - "" add the rest - if !processed - call add(res_lines, line) - endif - - return [res_lines, state] - -endfunction - - -function! s:use_custom_wiki2html() - let custom_wiki2html = vimwiki#vars#get_wikilocal('custom_wiki2html') - return !empty(custom_wiki2html) && - \ (s:file_exists(custom_wiki2html) || s:binary_exists(custom_wiki2html)) -endfunction - - -function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) - call vimwiki#path#mkdir(a:path) - echomsg system(vimwiki#vars#get_wikilocal('custom_wiki2html'). ' '. - \ a:force. ' '. - \ vimwiki#vars#get_wikilocal('syntax'). ' '. - \ strpart(vimwiki#vars#get_wikilocal('ext'), 1). ' '. - \ shellescape(a:path). ' '. - \ shellescape(a:wikifile). ' '. - \ shellescape(s:default_CSS_full_name(a:path)). ' '. - \ (len(vimwiki#vars#get_wikilocal('template_path')) > 1 ? - \ shellescape(expand(vimwiki#vars#get_wikilocal('template_path'))) : '-'). ' '. - \ (len(vimwiki#vars#get_wikilocal('template_default')) > 0 ? - \ vimwiki#vars#get_wikilocal('template_default') : '-'). ' '. - \ (len(vimwiki#vars#get_wikilocal('template_ext')) > 0 ? - \ vimwiki#vars#get_wikilocal('template_ext') : '-'). ' '. - \ (len(vimwiki#vars#get_bufferlocal('subdir')) > 0 ? - \ shellescape(s:root_path(vimwiki#vars#get_bufferlocal('subdir'))) : '-'). ' '. - \ (len(vimwiki#vars#get_wikilocal('custom_wiki2html_args')) > 0 ? - \ vimwiki#vars#get_wikilocal('custom_wiki2html_args') : '-')) -endfunction - - -function! s:convert_file(path_html, wikifile) - let done = 0 - - let wikifile = fnamemodify(a:wikifile, ":p") - - let path_html = expand(a:path_html).vimwiki#vars#get_bufferlocal('subdir') - let htmlfile = fnamemodify(wikifile, ":t:r").'.html' - - " the currently processed file name is needed when processing links - " yeah yeah, shame on me for using (quasi-) global variables - let s:current_wiki_file = wikifile - let s:current_html_file = path_html . htmlfile - - if s:use_custom_wiki2html() - let force = 1 - call vimwiki#html#CustomWiki2HTML(path_html, wikifile, force) - let done = 1 - endif - - if s:syntax_supported() && done == 0 - let lsource = readfile(wikifile) - let ldest = [] - - call vimwiki#path#mkdir(path_html) - - " nohtml placeholder -- to skip html generation. - let nohtml = 0 - - " template placeholder - let template_name = '' - - " for table of contents placeholders. - let placeholders = [] - - " current state of converter - let state = {} - let state.para = 0 - let state.quote = 0 - let state.pre = [0, 0] " [in_pre, indent_pre] - let state.math = [0, 0] " [in_math, indent_math] - let state.table = [] - let state.deflist = 0 - let state.lists = [] - let state.placeholder = [] - let state.header_ids = [['', 0], ['', 0], ['', 0], ['', 0], ['', 0], ['', 0]] - " [last seen header text in this level, number] - - " prepare constants for s:safe_html_line() - let s:lt_pattern = '<' - let s:gt_pattern = '>' - if vimwiki#vars#get_global('valid_html_tags') != '' - let tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|') - let s:lt_pattern = '\c<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!' - let s:gt_pattern = '\c\%(</\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>' - endif - - " prepare regexps for lists - let s:bullets = '[*-]' - let s:numbers = '\C\%(#\|\d\+)\|\d\+\.\|[ivxlcdm]\+)\|[IVXLCDM]\+)\|\l\{1,2})\|\u\{1,2})\)' - - for line in lsource - let oldquote = state.quote - let [lines, state] = s:parse_line(line, state) - - " Hack: There could be a lot of empty strings before s:process_tag_quote - " find out `quote` is over. So we should delete them all. Think of the way - " to refactor it out. - if oldquote != state.quote - call s:remove_blank_lines(ldest) - endif - - if !empty(state.placeholder) - if state.placeholder[0] ==# 'nohtml' - let nohtml = 1 - break - elseif state.placeholder[0] ==# 'template' - let template_name = state.placeholder[1] - else - call add(placeholders, [state.placeholder, len(ldest), len(placeholders)]) - endif - let state.placeholder = [] - endif - - call extend(ldest, lines) - endfor - - - if nohtml - echon "\r"."%nohtml placeholder found" - return '' - endif - - call s:remove_blank_lines(ldest) - - " process end of file - " close opened tags if any - let lines = [] - call s:close_tag_quote(state.quote, lines) - call s:close_tag_para(state.para, lines) - call s:close_tag_pre(state.pre, lines) - call s:close_tag_math(state.math, lines) - call s:close_tag_list(state.lists, lines) - call s:close_tag_def_list(state.deflist, lines) - call s:close_tag_table(state.table, lines, state.header_ids) - call extend(ldest, lines) - - let title = s:process_title(placeholders, fnamemodify(a:wikifile, ":t:r")) - let date = s:process_date(placeholders, strftime('%Y-%m-%d')) - - let html_lines = s:get_html_template(template_name) - - " processing template variables (refactor to a function) - call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")') - call map(html_lines, 'substitute(v:val, "%date%", "'. date .'", "g")') - call map(html_lines, 'substitute(v:val, "%root_path%", "'. - \ s:root_path(vimwiki#vars#get_bufferlocal('subdir')) .'", "g")') - - let css_name = expand(vimwiki#vars#get_wikilocal('css_name')) - let css_name = substitute(css_name, '\', '/', 'g') - call map(html_lines, 'substitute(v:val, "%css%", "'. css_name .'", "g")') - - let enc = &fileencoding - if enc == '' - let enc = &encoding - endif - call map(html_lines, 'substitute(v:val, "%encoding%", "'. enc .'", "g")') - - let html_lines = s:html_insert_contents(html_lines, ldest) " %contents% - - call writefile(html_lines, path_html.htmlfile) - let done = 1 - - endif - - if done == 0 - echomsg 'Vimwiki Error: Conversion to HTML is not supported for this syntax' - return '' - endif - - return path_html.htmlfile -endfunction - - -function! vimwiki#html#Wiki2HTML(path_html, wikifile) - let result = s:convert_file(a:path_html, a:wikifile) - if result != '' - call s:create_default_CSS(a:path_html) - endif - return result -endfunction - - -function! vimwiki#html#WikiAll2HTML(path_html) - if !s:syntax_supported() && !s:use_custom_wiki2html() - echomsg 'Vimwiki Error: Conversion to HTML is not supported for this syntax' - return - endif - - echomsg 'Vimwiki: Saving Vimwiki files ...' - let save_eventignore = &eventignore - let &eventignore = "all" - let cur_buf = bufname('%') - bufdo call s:save_vimwiki_buffer() - exe 'buffer '.cur_buf - let &eventignore = save_eventignore - - let path_html = expand(a:path_html) - call vimwiki#path#mkdir(path_html) - - echomsg 'Vimwiki: Deleting non-wiki html files ...' - call s:delete_html_files(path_html) - - echomsg 'Vimwiki: Converting wiki to html files ...' - let setting_more = &more - setlocal nomore - - " temporarily adjust current_subdir global state variable - let current_subdir = vimwiki#vars#get_bufferlocal('subdir') - let current_invsubdir = vimwiki#vars#get_bufferlocal('invsubdir') - - let wikifiles = split(glob(vimwiki#vars#get_wikilocal('path').'**/*'. - \ vimwiki#vars#get_wikilocal('ext')), '\n') - for wikifile in wikifiles - let wikifile = fnamemodify(wikifile, ":p") - - " temporarily adjust 'subdir' and 'invsubdir' state variables - let subdir = vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), wikifile) - call vimwiki#vars#set_bufferlocal('subdir', subdir) - call vimwiki#vars#set_bufferlocal('invsubdir', vimwiki#base#invsubdir(subdir)) - - if !s:is_html_uptodate(wikifile) - echomsg 'Vimwiki: Processing '.wikifile - - call s:convert_file(path_html, wikifile) - else - echomsg 'Vimwiki: Skipping '.wikifile - endif - endfor - " reset 'subdir' state variable - call vimwiki#vars#set_bufferlocal('subdir', current_subdir) - call vimwiki#vars#set_bufferlocal('invsubdir', current_invsubdir) - - let created = s:create_default_CSS(path_html) - if created - echomsg 'Vimwiki: Default style.css has been created' - endif - echomsg 'Vimwiki: HTML exported to '.path_html - echomsg 'Vimwiki: Done!' - - let &more = setting_more -endfunction - - -function! s:file_exists(fname) - return !empty(getftype(expand(a:fname))) -endfunction - - -function! s:binary_exists(fname) - return executable(expand(a:fname)) -endfunction - - -function! s:get_wikifile_url(wikifile) - return vimwiki#vars#get_wikilocal('path_html') . - \ vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), a:wikifile). - \ fnamemodify(a:wikifile, ":t:r").'.html' -endfunction - - -function! vimwiki#html#PasteUrl(wikifile) - execute 'r !echo file://'.s:get_wikifile_url(a:wikifile) -endfunction - - -function! vimwiki#html#CatUrl(wikifile) - execute '!echo file://'.s:get_wikifile_url(a:wikifile) -endfunction - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/lst.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/lst.vim deleted file mode 100644 index d4ccbbd..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/lst.vim +++ /dev/null @@ -1,1677 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: Everything concerning lists and checkboxes -" Home: https://github.com/vimwiki/vimwiki/ - - -if exists("g:loaded_vimwiki_list_auto") || &cp - finish -endif -let g:loaded_vimwiki_list_auto = 1 - - -" --------------------------------------------------------- -" incrementation functions for the various kinds of numbers -" --------------------------------------------------------- - -function! s:increment_1(value) - return eval(a:value) + 1 -endfunction - - -function! s:increment_A(value) - let list_of_chars = split(a:value, '.\zs') - let done = 0 - for idx in reverse(range(len(list_of_chars))) - let cur_num = char2nr(list_of_chars[idx]) - if cur_num < 90 - let list_of_chars[idx] = nr2char(cur_num + 1) - let done = 1 - break - else - let list_of_chars[idx] = 'A' - endif - endfor - if !done - call insert(list_of_chars, 'A') - endif - return join(list_of_chars, '') -endfunction - - -function! s:increment_a(value) - let list_of_chars = split(a:value, '.\zs') - let done = 0 - for idx in reverse(range(len(list_of_chars))) - let cur_num = char2nr(list_of_chars[idx]) - if cur_num < 122 - let list_of_chars[idx] = nr2char(cur_num + 1) - let done = 1 - break - else - let list_of_chars[idx] = 'a' - endif - endfor - if !done - call insert(list_of_chars, 'a') - endif - return join(list_of_chars, '') -endfunction - - -function! s:increment_I(value) - let subst_list = [ ['XLVIII$', 'IL'], ['VIII$', 'IX'], ['III$', 'IV'], - \ ['DCCCXCIX$', 'CM'], ['CCCXCIX$', 'CD'], ['LXXXIX$', 'XC'], - \ ['XXXIX$', 'XL'], ['\(I\{1,2\}\)$', '\1I'], ['CDXCIX$', 'D'], - \ ['CMXCIX$', 'M'], ['XCIX$', 'C'], ['I\([VXLCDM]\)$', '\1'], - \ ['\([VXLCDM]\)$', '\1I'] ] - for [regex, subst] in subst_list - if a:value =~# regex - return substitute(a:value, regex, subst, '') - endif - endfor - return '' -endfunction - - -function! s:increment_i(value) - let subst_list = [ ['xlviii$', 'il'], ['viii$', 'ix'], ['iii$', 'iv'], - \ ['dcccxcix$', 'cm'], ['cccxcix$', 'cd'], ['lxxxix$', 'xc'], - \ ['xxxix$', 'xl'], ['\(i\{1,2\}\)$', '\1i'], ['cdxcix$', 'd'], - \ ['cmxcix$', 'm'], ['xcix$', 'c'], ['i\([vxlcdm]\)$', '\1'], - \ ['\([vxlcdm]\)$', '\1i'] ] - for [regex, subst] in subst_list - if a:value =~# regex - return substitute(a:value, regex, subst, '') - endif - endfor - return '' -endfunction - - -" --------------------------------------------------------- -" utility functions -" --------------------------------------------------------- - -function! s:substitute_rx_in_line(lnum, pattern, new_string) - call setline(a:lnum, substitute(getline(a:lnum), a:pattern, a:new_string, '')) -endfunction - - -function! s:substitute_string_in_line(lnum, old_string, new_string) - call s:substitute_rx_in_line(a:lnum, vimwiki#u#escape(a:old_string), a:new_string) -endfunction - - -function! s:first_char(string) - return matchstr(a:string, '^.') -endfunction - - -if exists("*strdisplaywidth") - function! s:string_length(str) - return strdisplaywidth(a:str) - endfunction -else - function! s:string_length(str) - return strlen(substitute(a:str, '.', 'x', 'g')) - endfunction -endif - - -function! vimwiki#lst#default_symbol() - return vimwiki#vars#get_syntaxlocal('list_markers')[0] -endfunction - - -function! vimwiki#lst#get_list_margin() - let list_margin = vimwiki#vars#get_wikilocal('list_margin') - if list_margin < 0 - return &sw - else - return list_margin - endif -endfunction - - -"Returns: the column where the text of a line starts (possible list item -"markers and checkboxes are skipped) -function! s:text_begin(lnum) - return s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem'))) -endfunction - - -"Returns: 2 if there is a marker and text -" 1 for a marker and no text -" 0 for no marker at all (empty line or only text) -function! s:line_has_marker(lnum) - if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*$' - return 1 - elseif getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*\S' - return 2 - else - return 0 - endif -endfunction - - -" --------------------------------------------------------- -" get properties of a list item -" --------------------------------------------------------- - -"Returns: the mainly used data structure in this file -"An item represents a single list item and is a dictionary with the keys -"lnum - the line number of the list item -"type - 1 for bulleted item, 2 for numbered item, 0 for a regular line -"mrkr - the concrete marker, e.g. '**' or 'b)' -"cb - the char in the checkbox or '' if there is no checkbox -function! s:get_item(lnum) - let item = {'lnum': a:lnum} - if a:lnum == 0 || a:lnum > line('$') - let item.type = 0 - return item - endif - - let matches = matchlist(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem')) - if matches == [] || - \ (matches[1] == '' && matches[2] == '') || - \ (matches[1] != '' && matches[2] != '') - let item.type = 0 - return item - endif - - let item.cb = matches[3] - - if matches[1] != '' - let item.type = 1 - let item.mrkr = matches[1] - else - let item.type = 2 - let item.mrkr = matches[2] - endif - - return item -endfunction - - -function! s:empty_item() - return {'type': 0} -endfunction - - -"Returns: level of the line -"0 is the 'highest' level -function! s:get_level(lnum) - if getline(a:lnum) =~# '^\s*$' - return 0 - endif - if !vimwiki#vars#get_syntaxlocal('recurring_bullets') - let level = indent(a:lnum) - else - let level = s:string_length(matchstr(getline(a:lnum), - \ vimwiki#vars#get_syntaxlocal(rx_bullet_chars)))-1 - if level < 0 - let level = (indent(a:lnum) == 0) ? 0 : 9999 - endif - endif - return level -endfunction - - -"Returns: 1, a, i, A, I or '' -"If in doubt if alphanumeric character or romanian -"numeral, peek in the previous line -function! s:guess_kind_of_numbered_item(item) - if a:item.type != 2 | return '' | endif - let number_chars = a:item.mrkr[:-2] - let divisor = a:item.mrkr[-1:] - - let number_kinds = vimwiki#vars#get_syntaxlocal('number_kinds') - - if number_chars =~# '\d\+' - return '1' - endif - if number_chars =~# '\l\+' - if number_chars !~# '^[ivxlcdm]\+' || index(number_kinds, 'i') == -1 - return 'a' - else - - let item_above = s:get_prev_list_item(a:item, 0) - if item_above.type != 0 - if index(number_kinds, 'a') == -1 || - \ (item_above.mrkr[-1:] !=# divisor && number_chars =~# 'i\+') || - \ s:increment_i(item_above.mrkr[:-2]) ==# number_chars - return 'i' - else - return 'a' - endif - else - if number_chars =~# 'i\+' || index(number_kinds, 'a') == -1 - return 'i' - else - return 'a' - endif - endif - - endif - endif - if number_chars =~# '\u\+' - if number_chars !~# '^[IVXLCDM]\+' || index(number_kinds, 'I') == -1 - return 'A' - else - - let item_above = s:get_prev_list_item(a:item, 0) - if item_above.type != 0 - if index(number_kinds, 'A') == -1 || - \ (item_above.mrkr[-1:] !=# divisor && number_chars =~# 'I\+') || - \ s:increment_I(item_above.mrkr[:-2]) ==# number_chars - return 'I' - else - return 'A' - endif - else - if number_chars =~# 'I\+' || index(number_kinds, 'A') == -1 - return 'I' - else - return 'A' - endif - endif - - endif - endif -endfunction - - -function! s:regexp_of_marker(item) - if a:item.type == 1 - return vimwiki#u#escape(a:item.mrkr) - elseif a:item.type == 2 - let number_divisors = vimwiki#vars#get_syntaxlocal('number_divisors') - for ki in ['d', 'u', 'l'] - let match = matchstr(a:item.mrkr, '\'.ki.'\+['.number_divisors.']') - if match != '' - return '\'.ki.'\+'.vimwiki#u#escape(match[-1:]) - endif - endfor - else - return '' - endif -endfunction - - -" --------------------------------------------------------- -" functions for navigating between items -" --------------------------------------------------------- - -"Returns: the list item after a:item or an empty item -"If a:ignore_kind is 1, the markers can differ -function! s:get_next_list_item(item, ignore_kind) - let org_lvl = s:get_level(a:item.lnum) - if !a:ignore_kind - let org_regex = s:regexp_of_marker(a:item) - endif - - let cur_ln = s:get_next_line(a:item.lnum) - while cur_ln <= line('$') - let cur_lvl = s:get_level(cur_ln) - if cur_lvl <= org_lvl - if a:ignore_kind - return s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) - else - return s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) - endif - endif - let cur_ln = s:get_next_line(cur_ln) - endwhile - return s:empty_item() -endfunction - - -"Returns: the list item before a:item or an empty item -"If a:ignore_kind is 1, the markers can differ -function! s:get_prev_list_item(item, ignore_kind) - let org_lvl = s:get_level(a:item.lnum) - if !a:ignore_kind - let org_regex = s:regexp_of_marker(a:item) - endif - - let cur_ln = s:get_prev_line(a:item.lnum) - while cur_ln >= 1 - let cur_lvl = s:get_level(cur_ln) - if cur_lvl <= org_lvl - if a:ignore_kind - return s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) - else - return s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) - endif - endif - let cur_ln = s:get_prev_line(cur_ln) - endwhile - return s:empty_item() -endfunction - - -function! s:get_item_of_level(cur_ln, cur_lvl, org_lvl, org_regex) - let cur_linecontent = getline(a:cur_ln) - if a:cur_lvl == a:org_lvl - if cur_linecontent =~# '^\s*'.a:org_regex.'\s' - return s:get_item(a:cur_ln) - else - return s:empty_item() - endif - elseif a:cur_lvl < a:org_lvl - return s:empty_item() - endif -endfunction - - -function! s:get_any_item_of_level(cur_ln, cur_lvl, org_lvl) - if a:cur_lvl == a:org_lvl - return s:get_item(a:cur_ln) - elseif a:cur_lvl < a:org_lvl - return s:empty_item() - endif -endfunction - - -function! s:get_first_item_in_list(item, ignore_kind) - let cur_item = a:item - while 1 - let prev_item = s:get_prev_list_item(cur_item, a:ignore_kind) - if prev_item.type == 0 - break - else - let cur_item = prev_item - endif - endwhile - return cur_item -endfunction - - -function! s:get_last_item_in_list(item, ignore_kind) - let cur_item = a:item - while 1 - let next_item = s:get_next_list_item(cur_item, a:ignore_kind) - if next_item.type == 0 - break - else - let cur_item = next_item - endif - endwhile - return cur_item -endfunction - - -"Returns: lnum+1 in most cases, but skips blank lines and preformatted text, -"0 in case of nonvalid line. -"If there is no second argument, 0 is returned at a header, otherwise the -"header is skipped -function! s:get_next_line(lnum, ...) - if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') - let cur_ln = a:lnum + 1 - while cur_ln <= line('$') && getline(cur_ln) !~# vimwiki#vars#get_syntaxlocal('rxPreEnd') - let cur_ln += 1 - endwhile - let next_line = cur_ln - else - let next_line = nextnonblank(a:lnum+1) - endif - - if a:0 > 0 && getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') - let next_line = s:get_next_line(next_line, 1) - endif - - if next_line < 0 || next_line > line('$') || - \ (getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') && a:0 == 0) - return 0 - endif - - return next_line -endfunction - - -"Returns: lnum-1 in most cases, but skips blank lines and preformatted text -"0 in case of nonvalid line and a header, because a header ends every list -function! s:get_prev_line(lnum) - let prev_line = prevnonblank(a:lnum-1) - - if getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') - let cur_ln = a:lnum - 1 - while 1 - if cur_ln == 0 || getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') - break - endif - let cur_ln -= 1 - endwhile - let prev_line = cur_ln - endif - - if prev_line < 0 || prev_line > line('$') || - \ getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') - return 0 - endif - - return prev_line -endfunction - - -function! s:get_first_child(item) - if a:item.lnum >= line('$') - return s:empty_item() - endif - let org_lvl = s:get_level(a:item.lnum) - let cur_item = s:get_item(s:get_next_line(a:item.lnum)) - while 1 - if cur_item.type != 0 && s:get_level(cur_item.lnum) > org_lvl - return cur_item - endif - if cur_item.lnum > line('$') || cur_item.lnum <= 0 || s:get_level(cur_item.lnum) <= org_lvl - return s:empty_item() - endif - let cur_item = s:get_item(s:get_next_line(cur_item.lnum)) - endwhile -endfunction - - -"Returns: the next sibling of a:child, given the parent item -"Used for iterating over children -"Note: child items do not necessarily have the same indent, i.e. level -function! s:get_next_child_item(parent, child) - if a:parent.type == 0 | return s:empty_item() | endif - let parent_lvl = s:get_level(a:parent.lnum) - let cur_ln = s:get_last_line_of_item_incl_children(a:child) - while 1 - let next_line = s:get_next_line(cur_ln) - if next_line == 0 || s:get_level(next_line) <= parent_lvl - break - endif - let cur_ln = next_line - let cur_item = s:get_item(cur_ln) - if cur_item.type > 0 - return cur_item - endif - endwhile - return s:empty_item() -endfunction - - -function! s:get_parent(item) - let parent_line = 0 - - let cur_ln = prevnonblank(a:item.lnum) - let child_lvl = s:get_level(cur_ln) - if child_lvl == 0 - return s:empty_item() - endif - - while 1 - let cur_ln = s:get_prev_line(cur_ln) - if cur_ln == 0 | break | endif - let cur_lvl = s:get_level(cur_ln) - if cur_lvl < child_lvl - let cur_item = s:get_item(cur_ln) - if cur_item.type == 0 - let child_lvl = cur_lvl - continue - endif - let parent_line = cur_ln - break - endif - endwhile - return s:get_item(parent_line) -endfunction - - -"Returns: the item above or the item below or an empty item -function! s:get_a_neighbor_item(item) - let prev_item = s:get_prev_list_item(a:item, 1) - if prev_item.type != 0 - return prev_item - else - let next_item = s:get_next_list_item(a:item, 1) - if next_item.type != 0 - return next_item - endif - endif - return s:empty_item() -endfunction - - -function! s:get_a_neighbor_item_in_column(lnum, column) - let cur_ln = s:get_prev_line(a:lnum) - while cur_ln >= 1 - if s:get_level(cur_ln) <= a:column - return s:get_corresponding_item(cur_ln) - endif - let cur_ln = s:get_prev_line(cur_ln) - endwhile - return s:empty_item() -endfunction - - -"Returns: the item if there is one in a:lnum -"else the multiline item a:lnum belongs to -function! s:get_corresponding_item(lnum) - let item = s:get_item(a:lnum) - if item.type != 0 - return item - endif - let org_lvl = s:get_level(a:lnum) - let cur_ln = a:lnum - while cur_ln > 0 - let cur_lvl = s:get_level(cur_ln) - let cur_item = s:get_item(cur_ln) - if cur_lvl < org_lvl && cur_item.type != 0 - return cur_item - endif - if cur_lvl < org_lvl - let org_lvl = cur_lvl - endif - let cur_ln = s:get_prev_line(cur_ln) - endwhile - return s:empty_item() -endfunction - - -"Returns: the last line of a (possibly multiline) item, including all children -function! s:get_last_line_of_item_incl_children(item) - let cur_ln = a:item.lnum - let org_lvl = s:get_level(a:item.lnum) - while 1 - let next_line = s:get_next_line(cur_ln) - if next_line == 0 || s:get_level(next_line) <= org_lvl - return cur_ln - endif - let cur_ln = next_line - endwhile -endfunction - - -"Returns: the last line of a (possibly multiline) item -"Note: there can be other list items between the first and last line -function! s:get_last_line_of_item(item) - if a:item.type == 0 | return 0 | endif - let org_lvl = s:get_level(a:item.lnum) - let last_corresponding_line = a:item.lnum - - let cur_ln = s:get_next_line(a:item.lnum) - while 1 - if cur_ln == 0 || s:get_level(cur_ln) <= org_lvl - break - endif - let cur_item = s:get_item(cur_ln) - if cur_item.type == 0 - let last_corresponding_line = cur_ln - let cur_ln = s:get_next_line(cur_ln) - else - let cur_ln = s:get_next_line(s:get_last_line_of_item_incl_children(cur_item)) - endif - endwhile - - return last_corresponding_line -endfunction - - -" --------------------------------------------------------- -" renumber list items -" --------------------------------------------------------- - -"Renumbers the current list from a:item on downwards -"Returns: the last item that was adjusted -function! s:adjust_numbered_list_below(item, recursive) - if !(a:item.type == 2 || (a:item.type == 1 && a:recursive)) - return a:item - endif - - let kind = s:guess_kind_of_numbered_item(a:item) - - let cur_item = a:item - while 1 - if a:recursive - call s:adjust_items_recursively(cur_item) - endif - - let next_item = s:get_next_list_item(cur_item, 0) - if next_item.type == 0 - break - endif - - if cur_item.type == 2 - let new_val = s:increment_{kind}(cur_item.mrkr[:-2]) . cur_item.mrkr[-1:] - call s:substitute_string_in_line(next_item.lnum, next_item.mrkr, new_val) - let next_item.mrkr = new_val - endif - - let cur_item = next_item - endwhile - return cur_item -endfunction - - -function! s:adjust_items_recursively(parent) - if a:parent.type == 0 - return s:empty_item() - end - - let child_item = s:get_first_child(a:parent) - if child_item.type == 0 - return child_item - endif - while 1 - let last_item = s:adjust_numbered_list(child_item, 1, 1) - - let child_item = s:get_next_child_item(a:parent, last_item) - if child_item.type == 0 - return last_item - endif - endwhile -endfunction - - -"Renumbers the list a:item is in. -"If a:ignore_kind == 0, only the items which have the same kind of marker as -"a:item are considered, otherwise all items. -"Returns: the last item that was adjusted -function! s:adjust_numbered_list(item, ignore_kind, recursive) - if !(a:item.type == 2 || (a:item.type == 1 && (a:ignore_kind || a:recursive))) - return s:empty_item() - end - - let first_item = s:get_first_item_in_list(a:item, a:ignore_kind) - - while 1 - if first_item.type == 2 - let new_mrkr = s:guess_kind_of_numbered_item(first_item) . first_item.mrkr[-1:] - call s:substitute_string_in_line(first_item.lnum, first_item.mrkr, new_mrkr) - let first_item.mrkr = new_mrkr - endif - - let last_item = s:adjust_numbered_list_below(first_item, a:recursive) - - let next_first_item = s:get_next_list_item(last_item, 1) - if a:ignore_kind == 0 || next_first_item.type == 0 - return last_item - endif - let first_item = next_first_item - endwhile -endfunction - - -"Renumbers the list the cursor is in -"also update its parents checkbox state -function! vimwiki#lst#adjust_numbered_list() - let cur_item = s:get_corresponding_item(line('.')) - if cur_item.type == 0 | return | endif - call s:adjust_numbered_list(cur_item, 1, 0) - call s:update_state(s:get_parent(cur_item)) -endfunction - - -"Renumbers all lists of the buffer -"of course, this might take some seconds -function! vimwiki#lst#adjust_whole_buffer() - let cur_ln = 1 - while 1 - let cur_item = s:get_item(cur_ln) - if cur_item.type != 0 - let cur_item = s:adjust_numbered_list(cur_item, 0, 1) - endif - let cur_ln = s:get_next_line(cur_item.lnum, 1) - if cur_ln <= 0 || cur_ln > line('$') - return - endif - endwhile -endfunction - - -" --------------------------------------------------------- -" checkbox stuff -" --------------------------------------------------------- - -"Returns: the rate of checkboxed list item in percent -function! s:get_rate(item) - if a:item.type == 0 || a:item.cb == '' - return -1 - endif - let state = a:item.cb - if state == vimwiki#vars#get_global('listsym_rejected') - return -1 - endif - let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) - return index(vimwiki#vars#get_syntaxlocal('listsyms_list'), state) * 100/(n-1) -endfunction - - -"Set state of the list item to [ ] or [o] or whatever -"Returns: 1 if the state changed, 0 otherwise -function! s:set_state(item, new_rate) - let new_state = s:rate_to_state(a:new_rate) - let old_state = s:rate_to_state(s:get_rate(a:item)) - if new_state !=# old_state - call s:substitute_rx_in_line(a:item.lnum, '\[.]', '['.new_state.']') - return 1 - else - return 0 - endif -endfunction - - -"Set state of the list item to [ ] or [o] or whatever -"Updates the states of its child items -function! s:set_state_plus_children(item, new_rate) - call s:set_state(a:item, a:new_rate) - - let child_item = s:get_first_child(a:item) - while 1 - if child_item.type == 0 - break - endif - if child_item.cb != '' - call s:set_state_plus_children(child_item, a:new_rate) - endif - let child_item = s:get_next_child_item(a:item, child_item) - endwhile -endfunction - - -"Returns: the appropriate symbol for a given percent rate -function! s:rate_to_state(rate) - let listsyms_list = vimwiki#vars#get_syntaxlocal('listsyms_list') - let state = '' - let n = len(listsyms_list) - if a:rate == 100 - let state = listsyms_list[n-1] - elseif a:rate == 0 - let state = listsyms_list[0] - elseif a:rate == -1 - let state = vimwiki#vars#get_global('listsym_rejected') - else - let index = float2nr(ceil(a:rate/100.0*(n-2))) - let state = listsyms_list[index] - endif - return state -endfunction - - -"updates the symbol of a checkboxed item according to the symbols of its -"children -function! s:update_state(item) - if a:item.type == 0 || a:item.cb == '' - return - endif - - let sum_children_rate = 0 - let count_children_with_cb = 0 - - let child_item = s:get_first_child(a:item) - - while 1 - if child_item.type == 0 - break - endif - if child_item.cb != '' - let rate = s:get_rate(child_item) - if rate != -1 - let count_children_with_cb += 1 - let sum_children_rate += rate - endif - endif - let child_item = s:get_next_child_item(a:item, child_item) - endwhile - - if count_children_with_cb > 0 - let new_rate = sum_children_rate / count_children_with_cb - call s:set_state_recursively(a:item, new_rate) - else - let rate = s:get_rate(a:item) - if rate > 0 && rate < 100 - call s:set_state_recursively(a:item, 0) - endif - endif -endfunction - - -function! s:set_state_recursively(item, new_rate) - let state_changed = s:set_state(a:item, a:new_rate) - if state_changed - call s:update_state(s:get_parent(a:item)) - endif -endfunction - - -"Creates checkbox in a list item. -"Returns: 1 if successful -function! s:create_cb(item) - if a:item.type == 0 || a:item.cb != '' - return 0 - endif - - let new_item = a:item - let new_item.cb = vimwiki#vars#get_syntaxlocal('listsyms_list')[0] - call s:substitute_rx_in_line(new_item.lnum, - \ vimwiki#u#escape(new_item.mrkr) . '\zs\ze', ' [' . new_item.cb . ']') - - call s:update_state(new_item) - return 1 -endfunction - - -function! s:remove_cb(item) - let item = a:item - if item.type != 0 && item.cb != '' - let item.cb = '' - call s:substitute_rx_in_line(item.lnum, '\s\+\[.\]', '') - endif - return item -endfunction - - -"Change state of checkbox -"in the lines of the given range -function! s:change_cb(from_line, to_line, new_rate) - let from_item = s:get_corresponding_item(a:from_line) - if from_item.type == 0 - return - endif - - let parent_items_of_lines = [] - - for cur_ln in range(from_item.lnum, a:to_line) - let cur_item = s:get_item(cur_ln) - if cur_item.type != 0 && cur_item.cb != '' - call s:set_state_plus_children(cur_item, a:new_rate) - let cur_parent_item = s:get_parent(cur_item) - if index(parent_items_of_lines, cur_parent_item) == -1 - call insert(parent_items_of_lines, cur_parent_item) - endif - endif - endfor - - for parent_item in parent_items_of_lines - call s:update_state(parent_item) - endfor - -endfunction - - -"Toggles checkbox between two states in the lines of the given range, -"creates chceckboxes if there aren't any. -function! s:toggle_create_cb(from_line, to_line, state1, state2) - let from_item = s:get_corresponding_item(a:from_line) - if from_item.type == 0 - return - endif - - if from_item.cb == '' - - "if from_line has no CB, make a CB in every selected line - let parent_items_of_lines = [] - for cur_ln in range(from_item.lnum, a:to_line) - let cur_item = s:get_item(cur_ln) - let success = s:create_cb(cur_item) - - if success - let cur_parent_item = s:get_parent(cur_item) - if index(parent_items_of_lines, cur_parent_item) == -1 - call insert(parent_items_of_lines, cur_parent_item) - endif - endif - endfor - - for parent_item in parent_items_of_lines - call s:update_state(parent_item) - endfor - - else - - "if from_line has CB, toggle it and set all siblings to the same new state - let rate_first_line = s:get_rate(from_item) - let new_rate = rate_first_line == a:state1 ? a:state2 : a:state1 - - call s:change_cb(a:from_line, a:to_line, new_rate) - - endif - -endfunction - - -"Decrement checkbox between [ ] and [X] -"in the lines of the given range -function! vimwiki#lst#decrement_cb(from_line, to_line) - let from_item = s:get_corresponding_item(a:from_line) - if from_item.type == 0 - return - endif - - "if from_line has CB, decrement it and set all siblings to the same new state - let rate_first_line = s:get_rate(from_item) - let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) - let new_rate = max([rate_first_line - 100/(n-1)-1, 0]) - - call s:change_cb(a:from_line, a:to_line, new_rate) - -endfunction - - -"Increment checkbox between [ ] and [X] -"in the lines of the given range -function! vimwiki#lst#increment_cb(from_line, to_line) - let from_item = s:get_corresponding_item(a:from_line) - if from_item.type == 0 - return - endif - - "if from_line has CB, increment it and set all siblings to the same new state - let rate_first_line = s:get_rate(from_item) - let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) - let new_rate = min([rate_first_line + 100/(n-1)+1, 100]) - - call s:change_cb(a:from_line, a:to_line, new_rate) - -endfunction - - -"Toggles checkbox between [ ] and [X] or creates one -"in the lines of the given range -function! vimwiki#lst#toggle_cb(from_line, to_line) - return s:toggle_create_cb(a:from_line, a:to_line, 100, 0) -endfunction - - -"Toggles checkbox between [ ] and [-] or creates one -"in the lines of the given range -function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) - return s:toggle_create_cb(a:from_line, a:to_line, -1, 0) -endfunction - - -"Increment checkbox between [ ] and [X] -"in the lines of the given range -function! vimwiki#lst#increment_cb(from_line, to_line) - let from_item = s:get_corresponding_item(a:from_line) - if from_item.type == 0 - return - endif - - "if from_line has CB, increment it and set all siblings to the same new state - let rate_first_line = s:get_rate(from_item) - let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) - let new_rate = min([rate_first_line + 100/(n-1)+1, 100]) - - call s:change_cb(a:from_line, a:to_line, new_rate) - -endfunction - - -"Toggles checkbox between [ ] and [X] or creates one -"in the lines of the given range -function! vimwiki#lst#toggle_cb(from_line, to_line) - return s:toggle_create_cb(a:from_line, a:to_line, 100, 0) -endfunction - - -"Toggles checkbox between [ ] and [-] or creates one -"in the lines of the given range -function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) - return s:toggle_create_cb(a:from_line, a:to_line, -1, 0) -endfunction - - -function! vimwiki#lst#remove_cb(first_line, last_line) - let first_item = s:get_corresponding_item(a:first_line) - let last_item = s:get_corresponding_item(a:last_line) - - if first_item.type == 0 || last_item.type == 0 - return - endif - - let parent_items_of_lines = [] - let cur_ln = first_item.lnum - while 1 - if cur_ln <= 0 || cur_ln > last_item.lnum | break | endif - let cur_item = s:get_item(cur_ln) - if cur_item.type != 0 - let cur_item = s:remove_cb(cur_item) - let cur_parent_item = s:get_parent(cur_item) - if index(parent_items_of_lines, cur_parent_item) == -1 - call insert(parent_items_of_lines, cur_parent_item) - endif - endif - let cur_ln = s:get_next_line(cur_ln) - endwhile - for parent_item in parent_items_of_lines - call s:update_state(parent_item) - endfor -endfunction - - -function! vimwiki#lst#remove_cb_in_list() - let first_item = s:get_first_item_in_list(s:get_corresponding_item(line('.')), 0) - - let cur_item = first_item - while 1 - let next_item = s:get_next_list_item(cur_item, 0) - let cur_item = s:remove_cb(cur_item) - if next_item.type == 0 - break - else - let cur_item = next_item - endif - endwhile - - call s:update_state(s:get_parent(first_item)) -endfunction - - - -" --------------------------------------------------------- -" change the level of list items -" --------------------------------------------------------- - -function! s:set_indent(lnum, new_indent) - if &expandtab - let indentstring = repeat(' ', a:new_indent) - else - let indentstring = repeat('\t', a:new_indent / &tabstop) . repeat(' ', a:new_indent % &tabstop) - endif - call s:substitute_rx_in_line(a:lnum, '^\s*', indentstring) -endfunction - - -function! s:decrease_level(item) - let removed_indent = 0 - if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), - \ s:first_char(a:item.mrkr)) > -1 - if s:string_length(a:item.mrkr) >= 2 - call s:substitute_string_in_line(a:item.lnum, s:first_char(a:item.mrkr), '') - let removed_indent = -1 - endif - else - let old_indent = indent(a:item.lnum) - if &shiftround - let new_indent = (old_indent - 1) / vimwiki#u#sw() * vimwiki#u#sw() - else - let new_indent = old_indent - vimwiki#u#sw() - endif - call s:set_indent(a:item.lnum, new_indent) - let removed_indent = new_indent - old_indent - endif - return removed_indent -endfunction - - -function! s:increase_level(item) - let additional_indent = 0 - if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), - \ s:first_char(a:item.mrkr)) > -1 - call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:item.mrkr . - \ s:first_char(a:item.mrkr)) - let additional_indent = 1 - else - let old_indent = indent(a:item.lnum) - if &shiftround - let new_indent = (old_indent / vimwiki#u#sw() + 1) * vimwiki#u#sw() - else - let new_indent = old_indent + vimwiki#u#sw() - endif - call s:set_indent(a:item.lnum, new_indent) - let additional_indent = new_indent - old_indent - endif - return additional_indent -endfunction - - -"adds a:indent_by to the current indent -"a:indent_by can be negative -function! s:indent_line_by(lnum, indent_by) - let item = s:get_item(a:lnum) - if vimwiki#vars#get_syntaxlocal('recurring_bullets') && item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), - \ s:first_char(item.mrkr)) > -1 - if a:indent_by > 0 - call s:substitute_string_in_line(a:lnum, item.mrkr, item.mrkr . s:first_char(item.mrkr)) - elseif a:indent_by < 0 - call s:substitute_string_in_line(a:lnum, s:first_char(item.mrkr), '') - endif - else - call s:set_indent(a:lnum, indent(a:lnum) + a:indent_by) - endif -endfunction - - -"changes lvl of lines in selection -function! s:change_level(from_line, to_line, direction, plus_children) - let from_item = s:get_corresponding_item(a:from_line) - if from_item.type == 0 - if a:direction ==# 'increase' && a:from_line == a:to_line && empty(getline(a:from_line)) - "that's because :> doesn't work on an empty line - normal! gi - else - execute a:from_line.','.a:to_line.(a:direction ==# 'increase' ? '>' : '<') - endif - return - endif - - if a:direction ==# 'decrease' && s:get_level(from_item.lnum) == 0 - return - endif - - if a:from_line == a:to_line - if a:plus_children - let to_line = s:get_last_line_of_item_incl_children(from_item) - else - let to_line = s:get_last_line_of_item(from_item) - endif - else - let to_item = s:get_corresponding_item(a:to_line) - if to_item.type == 0 - let to_line = a:to_line - else - if a:plus_children - let to_line = s:get_last_line_of_item_incl_children(to_item) - else - let to_line = s:get_last_line_of_item(to_item) - endif - endif - endif - - if to_line == 0 - return - endif - - let to_be_adjusted = s:get_a_neighbor_item(from_item) - let old_parent = s:get_parent(from_item) - let first_line_level = s:get_level(from_item.lnum) - let more_than_one_level_concerned = 0 - - let first_line_indented_by = (a:direction ==# 'increase') ? - \ s:increase_level(from_item) : s:decrease_level(from_item) - - let cur_ln = s:get_next_line(from_item.lnum) - while cur_ln > 0 && cur_ln <= to_line - if !more_than_one_level_concerned && - \ s:get_level(cur_ln) != first_line_level && - \ s:get_item(cur_ln).type != 0 - let more_than_one_level_concerned = 1 - endif - call s:indent_line_by(cur_ln, first_line_indented_by) - let cur_ln = s:get_next_line(cur_ln, 1) - endwhile - - if a:from_line == a:to_line - call s:adjust_mrkr(from_item) - endif - call s:update_state(old_parent) - let from_item = s:get_item(from_item.lnum) - if from_item.cb != '' - call s:update_state(from_item) - call s:update_state(s:get_parent(from_item)) - endif - - if more_than_one_level_concerned - call vimwiki#lst#adjust_whole_buffer() - else - call s:adjust_numbered_list(from_item, 0, 0) - call s:adjust_numbered_list(to_be_adjusted, 0, 0) - endif -endfunction - - -function! vimwiki#lst#change_level(from_line, to_line, direction, plus_children) - let cur_col = col('$') - col('.') - call s:change_level(a:from_line, a:to_line, a:direction, a:plus_children) - call cursor('.', col('$') - cur_col) -endfunction - - -"indent line a:lnum to be the continuation of a:prev_item -function! s:indent_multiline(prev_item, lnum) - if a:prev_item.type != 0 - call s:set_indent(a:lnum, s:text_begin(a:prev_item.lnum)) - endif -endfunction - - -" --------------------------------------------------------- -" change markers of list items -" --------------------------------------------------------- - -"Returns: the position of a marker in g:vimwiki_list_markers -function! s:get_idx_list_markers(item) - if a:item.type == 1 - let m = s:first_char(a:item.mrkr) - else - let m = s:guess_kind_of_numbered_item(a:item) . a:item.mrkr[-1:] - endif - return index(vimwiki#vars#get_syntaxlocal('list_markers'), m) -endfunction - - -"changes the marker of the given item to the next in g:vimwiki_list_markers -function! s:get_next_mrkr(item) - let markers = vimwiki#vars#get_syntaxlocal('list_markers') - if a:item.type == 0 - let new_mrkr = markers[0] - else - let idx = s:get_idx_list_markers(a:item) - let new_mrkr = markers[(idx+1) % len(markers)] - endif - return new_mrkr -endfunction - - -"changes the marker of the given item to the previous in g:vimwiki_list_markers -function! s:get_prev_mrkr(item) - let markers = vimwiki#vars#get_syntaxlocal('list_markers') - if a:item.type == 0 - return markers[-1] - endif - let idx = s:get_idx_list_markers(a:item) - if idx == -1 - return markers[-1] - else - return markers[(idx - 1 + len(markers)) % len(markers)] - endif -endfunction - - -function! s:set_new_mrkr(item, new_mrkr) - if a:item.type == 0 - call s:substitute_rx_in_line(a:item.lnum, '^\s*\zs\ze', a:new_mrkr.' ') - if indent(a:item.lnum) == 0 && !vimwiki#vars#get_syntaxlocal('recurring_bullets') - call s:set_indent(a:item.lnum, vimwiki#lst#get_list_margin()) - endif - else - call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:new_mrkr) - endif -endfunction - - -function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) - let cur_col_from_eol = col("$") - (a:mode ==# "i" ? col("'^") : col('.')) - let new_mrkr = a:new_mrkr - let cur_ln = a:from_line - while 1 - let cur_item = s:get_item(cur_ln) - - if new_mrkr ==# "next" - let new_mrkr = s:get_next_mrkr(cur_item) - elseif new_mrkr ==# "prev" - let new_mrkr = s:get_prev_mrkr(cur_item) - endif - - "handle markers like *** - if index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(new_mrkr)) > -1 - "use *** if the item above has *** too - let item_above = s:get_prev_list_item(cur_item, 1) - if item_above.type == 1 && s:first_char(item_above.mrkr) ==# s:first_char(new_mrkr) - let new_mrkr = item_above.mrkr - else - "use *** if the item below has *** too - let item_below = s:get_next_list_item(cur_item, 1) - if item_below.type == 1 && s:first_char(item_below.mrkr) ==# s:first_char(new_mrkr) - let new_mrkr = item_below.mrkr - else - "if the old is ### and the new is * use *** - if cur_item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), - \ s:first_char(cur_item.mrkr))>-1 - let new_mrkr = repeat(new_mrkr, s:string_length(cur_item.mrkr)) - else - "use *** if the parent item has ** - let parent_item = s:get_parent(cur_item) - if parent_item.type == 1 && s:first_char(parent_item.mrkr) ==# s:first_char(new_mrkr) - let new_mrkr = repeat(s:first_char(parent_item.mrkr), - \ s:string_length(parent_item.mrkr)+1) - endif - endif - endif - endif - - endif - - call s:set_new_mrkr(cur_item, new_mrkr) - call s:adjust_numbered_list(s:get_item(cur_ln), 1, 0) - - if cur_ln >= a:to_line | break | endif - let cur_ln = s:get_next_line(cur_ln, 1) - endwhile - - call cursor('.', col('$') - cur_col_from_eol) -endfunction - - -function! vimwiki#lst#change_marker_in_list(new_mrkr) - let cur_item = s:get_corresponding_item(line('.')) - let first_item = s:get_first_item_in_list(cur_item, 0) - let last_item = s:get_last_item_in_list(cur_item, 0) - if first_item.type == 0 || last_item.type == 0 | return | endif - let first_item_line = first_item.lnum - - let cur_item = first_item - while cur_item.type != 0 && cur_item.lnum <= last_item.lnum - call s:set_new_mrkr(cur_item, a:new_mrkr) - let cur_item = s:get_next_list_item(cur_item, 1) - endwhile - - call s:adjust_numbered_list(s:get_item(first_item_line), 0, 0) -endfunction - - -"sets kind of the item depending on neighbor items and the parent item -function! s:adjust_mrkr(item) - if a:item.type == 0 || vimwiki#vars#get_syntaxlocal('recurring_bullets') - return - endif - - let new_mrkr = a:item.mrkr - let neighbor_item = s:get_a_neighbor_item(a:item) - if neighbor_item.type != 0 - let new_mrkr = neighbor_item.mrkr - endif - - "if possible, set e.g. *** if parent has ** as marker - if neighbor_item.type == 0 && a:item.type == 1 && - \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), - \ s:first_char(a:item.mrkr)) > -1 - let parent_item = s:get_parent(a:item) - if parent_item.type == 1 && s:first_char(parent_item.mrkr) ==# s:first_char(a:item.mrkr) - let new_mrkr = repeat(s:first_char(parent_item.mrkr), s:string_length(parent_item.mrkr)+1) - endif - endif - - call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, new_mrkr) - call s:adjust_numbered_list(a:item, 0, 1) -endfunction - - -function! s:clone_marker_from_to(from, to) - let item_from = s:get_item(a:from) - if item_from.type == 0 | return | endif - let new_mrkr = item_from.mrkr . ' ' - call s:substitute_rx_in_line(a:to, '^\s*', new_mrkr) - let new_indent = ( vimwiki#vars#get_syntaxlocal('recurring_bullets') ? 0 : indent(a:from) ) - call s:set_indent(a:to, new_indent) - if item_from.cb != '' - call s:create_cb(s:get_item(a:to)) - call s:update_state(s:get_parent(s:get_item(a:to))) - endif - if item_from.type == 2 - let adjust_from = ( a:from < a:to ? a:from : a:to ) - call s:adjust_numbered_list_below(s:get_item(adjust_from), 0) - endif -endfunction - - -function! s:remove_mrkr(item) - let item = a:item - if item.cb != '' - let item = s:remove_cb(item) - let parent_item = s:get_parent(item) - else - let parent_item = s:empty_item() - endif - call s:substitute_rx_in_line(item.lnum, vimwiki#u#escape(item.mrkr).'\s*', '') - call remove(item, 'mrkr') - call remove(item, 'cb') - let item.type = 0 - call s:update_state(parent_item) - return item -endfunction - - -function! s:create_marker(lnum) - let new_sibling = s:get_corresponding_item(a:lnum) - if new_sibling.type == 0 - let new_sibling = s:get_a_neighbor_item_in_column(a:lnum, virtcol('.')) - endif - if new_sibling.type != 0 - call s:clone_marker_from_to(new_sibling.lnum, a:lnum) - else - let cur_item = s:get_item(a:lnum) - call s:set_new_mrkr(cur_item, vimwiki#vars#get_syntaxlocal('list_markers')[0]) - call s:adjust_numbered_list(cur_item, 0, 0) - endif -endfunction - - -" --------------------------------------------------------- -" handle keys -" --------------------------------------------------------- - -function! vimwiki#lst#kbd_o() - let fold_end = foldclosedend('.') - let lnum = (fold_end == -1) ? line('.') : fold_end - let cur_item = s:get_item(lnum) - "inserting and deleting the x is necessary - "because otherwise the indent is lost - normal! ox - if cur_item.lnum < s:get_last_line_of_item(cur_item) - call s:indent_multiline(cur_item, cur_item.lnum+1) - else - call s:clone_marker_from_to(cur_item.lnum, cur_item.lnum+1) - endif - startinsert! -endfunction - - -function! vimwiki#lst#kbd_O() - normal! Ox - let cur_ln = line('.') - if getline(cur_ln+1) !~# '^\s*$' - call s:clone_marker_from_to(cur_ln+1, cur_ln) - else - call s:clone_marker_from_to(cur_ln-1, cur_ln) - endif - startinsert! -endfunction - - -function! s:cr_on_empty_list_item(lnum, behavior) - if a:behavior == 1 - "just make a new list item - normal! gi
- call s:clone_marker_from_to(a:lnum, a:lnum+1) - startinsert! - return - elseif a:behavior == 2 - "insert new marker but remove marker in old line - call append(a:lnum-1, '') - startinsert! - return - elseif a:behavior == 3 - "list is finished, but cursor stays in current line - let item = s:get_item(a:lnum) - let neighbor_item = s:get_a_neighbor_item(item) - let child_item = s:get_first_child(item) - let parent_item = (item.cb != '') ? s:get_parent(item) : s:empty_item() - normal! "_cc - call s:adjust_numbered_list(neighbor_item, 0, 0) - call s:adjust_numbered_list(child_item, 0, 0) - call s:update_state(parent_item) - startinsert - return - elseif a:behavior == 4 - "list is finished, but cursor goes to next line - let item = s:get_item(a:lnum) - let neighbor_item = s:get_a_neighbor_item(item) - let child_item = s:get_first_child(item) - let parent_item = (item.cb != '') ? s:get_parent(item) : s:empty_item() - normal! "_cc
- call s:adjust_numbered_list(neighbor_item, 0, 0) - call s:adjust_numbered_list(child_item, 0, 0) - call s:update_state(parent_item) - startinsert - return - elseif a:behavior == 5 - "successively decrease level - if s:get_level(a:lnum) > 0 - call s:change_level(a:lnum, a:lnum, 'decrease', 0) - startinsert! - else - let item = s:get_item(a:lnum) - let neighbor_item = s:get_a_neighbor_item(item) - let child_item = s:get_first_child(item) - let parent_item = (item.cb != '') ? s:get_parent(item) : s:empty_item() - normal! "_cc - call s:adjust_numbered_list(neighbor_item, 0, 0) - call s:adjust_numbered_list(child_item, 0, 0) - call s:update_state(parent_item) - startinsert - endif - return - endif -endfunction - - -function! s:cr_on_empty_line(lnum, behavior) - "inserting and deleting the x is necessary - "because otherwise the indent is lost - normal! gi
x - if a:behavior == 2 || a:behavior == 3 - call s:create_marker(a:lnum+1) - endif -endfunction - - -function! s:cr_on_list_item(lnum, insert_new_marker, not_at_eol) - if a:insert_new_marker - "the ultimate feature of this script: make new marker on <CR> - normal! gi
- call s:clone_marker_from_to(a:lnum, a:lnum+1) - "tiny sweet extra feature: indent next line if current line ends with : - if !a:not_at_eol && getline(a:lnum) =~# ':$' - call s:change_level(a:lnum+1, a:lnum+1, 'increase', 0) - endif - else - " || (cur_item.lnum < s:get_last_line_of_item(cur_item)) - "indent this line so that it becomes the continuation of the line above - normal! gi
- let prev_line = s:get_corresponding_item(s:get_prev_line(a:lnum+1)) - call s:indent_multiline(prev_line, a:lnum+1) - endif -endfunction - - -function! vimwiki#lst#kbd_cr(normal, just_mrkr) - let lnum = line('.') - let has_bp = s:line_has_marker(lnum) - - if has_bp != 0 && virtcol('.') < s:text_begin(lnum) - call append(lnum-1, '') - startinsert! - return - endif - - if has_bp == 1 - call s:cr_on_empty_list_item(lnum, a:just_mrkr) - return - endif - - let insert_new_marker = (a:normal == 1 || a:normal == 3) - if getline('.')[col("'^")-1:] =~# '^\s\+$' - let cur_col = 0 - else - let cur_col = col("$") - col("'^") - if getline('.')[col("'^")-1] =~# '\s' && exists("*strdisplaywidth") - let ws_behind_cursor = - \ strdisplaywidth(matchstr(getline('.')[col("'^")-1:], '\s\+'), - \ virtcol("'^")-1) - let cur_col -= ws_behind_cursor - endif - if insert_new_marker && cur_col == 0 && getline(lnum) =~# '\s$' - let insert_new_marker = 0 - endif - endif - - if has_bp == 0 - call s:cr_on_empty_line(lnum, a:normal) - endif - - if has_bp == 2 - call s:cr_on_list_item(lnum, insert_new_marker, cur_col) - endif - - call cursor(lnum+1, col("$") - cur_col) - if cur_col == 0 - startinsert! - else - startinsert - endif - -endfunction - - -"creates a list item in the current line or removes it -function! vimwiki#lst#toggle_list_item() - let cur_col_from_eol = col("$") - col("'^") - let cur_item = s:get_item(line('.')) - - if cur_item.type == 0 - call s:create_marker(cur_item.lnum) - else - let prev_item = s:get_prev_list_item(cur_item, 1) - if prev_item.type == 0 - let prev_item = s:get_corresponding_item(s:get_prev_line(cur_item.lnum)) - endif - let cur_item = s:remove_mrkr(cur_item) - let adjust_prev_item = (prev_item.type == 2 && - \ s:get_level(cur_item.lnum) <= s:get_level(prev_item.lnum)) ? 1 : 0 - call s:indent_multiline(prev_item, cur_item.lnum) - if adjust_prev_item - call s:adjust_numbered_list_below(prev_item, 0) - endif - endif - - "set cursor position s.t. it's on the same char as before - let new_cur_col = col("$") - cur_col_from_eol - call cursor(cur_item.lnum, new_cur_col >= 1 ? new_cur_col : 1) - - if cur_col_from_eol == 0 || getline(cur_item.lnum) =~# '^\s*$' - startinsert! - else - startinsert - endif -endfunction - - -" --------------------------------------------------------- -" misc stuff -" --------------------------------------------------------- - -function! vimwiki#lst#TO_list_item(inner, visual) - let lnum = prevnonblank('.') - let item = s:get_corresponding_item(lnum) - if item.type == 0 - return - endif - let from_line = item.lnum - if a:inner - let to_line = s:get_last_line_of_item(item) - else - let to_line = s:get_last_line_of_item_incl_children(item) - endif - normal! V - call cursor(to_line, 0) - normal! o - call cursor(from_line, 0) -endfunction - - -function! vimwiki#lst#fold_level(lnum) - let cur_item = s:get_item(a:lnum) - if cur_item.type != 0 - let parent_item = s:get_parent(cur_item) - let child_item = s:get_first_child(cur_item) - let next_item = s:get_next_child_item(parent_item, cur_item) - if child_item.type != 0 - return 'a1' - elseif next_item.type == 0 - return 's1' - endif - endif - return '=' -endfunction - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/markdown_base.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/markdown_base.vim deleted file mode 100644 index f1ce091..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/markdown_base.vim +++ /dev/null @@ -1,150 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: Link functions for markdown syntax -" Home: https://github.com/vimwiki/vimwiki/ - - -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 - - -function! vimwiki#markdown_base#scan_reflinks() - let mkd_refs = {} - " construct list of references using vimgrep - try - " Why noautocmd? Because https://github.com/vimwiki/vimwiki/issues/121 - noautocmd execute 'vimgrep #'.vimwiki#vars#get_syntaxlocal('rxMkdRef').'#j %' - catch /^Vim\%((\a\+)\)\=:E480/ " No Match - "Ignore it, and move on to the next file - endtry - - for d in getqflist() - let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ') - let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr')) - let url = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchUrl')) - if descr != '' && url != '' - let mkd_refs[descr] = url - endif - endfor - call vimwiki#vars#set_bufferlocal('markdown_refs', mkd_refs) - return mkd_refs -endfunction - - -" try markdown reference links -function! vimwiki#markdown_base#open_reflink(link) - " echom "vimwiki#markdown_base#open_reflink" - let link = a:link - let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs') - if has_key(mkd_refs, link) - let url = mkd_refs[link] - call vimwiki#base#system_open_link(url) - return 1 - else - return 0 - endif -endfunction - - -function! s:normalize_link_syntax_n() - let lnum = line('.') - - " try WikiIncl - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) - if !empty(lnk) - " NO-OP !! - return - endif - - " try WikiLink0: replace with WikiLink1 - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0')) - if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), - \ vimwiki#vars#get_syntaxlocal('WikiLink1Template2')) - call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub) - return - endif - - " try WikiLink1: replace with WikiLink0 - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1')) - if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), - \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), - \ vimwiki#vars#get_global('WikiLinkTemplate2')) - call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub) - return - endif - - " try Weblink - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) - if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'), - \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'), - \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) - call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) - return - endif - - " try Word (any characters except separators) - " rxWord is less permissive than rxWikiLinkUrl which is used in - " normalize_link_syntax_v - let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) - if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_global('rxWord'), '', - \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) - call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) - return - endif - -endfunction - - -function! s:normalize_link_syntax_v() - let lnum = line('.') - let sel_save = &selection - let &selection = "old" - let rv = @" - let rt = getregtype('"') - let done = 0 - - try - norm! gvy - let visual_selection = @" - let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), - \ '__LinkUrl__', visual_selection, '') - let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '') - - call setreg('"', substitute(link, '\n', '', ''), visualmode()) - - " paste result - norm! `>""pgvd - - finally - call setreg('"', rv, rt) - let &selection = sel_save - endtry - -endfunction - - -function! vimwiki#markdown_base#normalize_link(is_visual_mode) - if 0 - " Syntax-specific links - else - if !a:is_visual_mode - call s:normalize_link_syntax_n() - elseif line("'<") == line("'>") - " action undefined for multi-line visual mode selections - call s:normalize_link_syntax_v() - endif - endif -endfunction - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/path.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/path.vim deleted file mode 100644 index 367b1d7..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/path.vim +++ /dev/null @@ -1,183 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: Path manipulation functions -" Home: https://github.com/vimwiki/vimwiki/ - - -function! vimwiki#path#chomp_slash(str) - return substitute(a:str, '[/\\]\+$', '', '') -endfunction - - -" Define path-compare function, either case-sensitive or not, depending on OS. -if vimwiki#u#is_windows() - function! vimwiki#path#is_equal(p1, p2) - return a:p1 ==? a:p2 - endfunction -else - function! vimwiki#path#is_equal(p1, p2) - return a:p1 ==# a:p2 - endfunction -endif - - -" collapse sections like /a/b/../c to /a/c -function! vimwiki#path#normalize(path) - let path = a:path - while 1 - let result = substitute(path, '/[^/]\+/\.\.', '', '') - if result ==# path - break - endif - let path = result - endwhile - return result -endfunction - - -function! vimwiki#path#path_norm(path) - " /-slashes - if a:path !~# '^scp:' - let path = substitute(a:path, '\', '/', 'g') - " treat multiple consecutive slashes as one path separator - let path = substitute(path, '/\+', '/', 'g') - " ensure that we are not fooled by a symbolic link - return resolve(path) - else - return a:path - endif -endfunction - - -function! vimwiki#path#is_link_to_dir(link) - " Check if link is to a directory. - " It should be ended with \ or /. - return a:link =~# '\m[/\\]$' -endfunction - - -function! vimwiki#path#abs_path_of_link(link) - return vimwiki#path#normalize(expand("%:p:h").'/'.a:link) -endfunction - - -" return longest common path prefix of 2 given paths. -" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki' -function! vimwiki#path#path_common_pfx(path1, path2) - let p1 = split(a:path1, '[/\\]', 1) - let p2 = split(a:path2, '[/\\]', 1) - - let idx = 0 - let minlen = min([len(p1), len(p2)]) - while (idx < minlen) && vimwiki#path#is_equal(p1[idx], p2[idx]) - let idx = idx + 1 - endwhile - if idx == 0 - return '' - else - return join(p1[: idx-1], '/') - endif -endfunction - - -function! vimwiki#path#wikify_path(path) - let result = resolve(fnamemodify(a:path, ':p')) - if vimwiki#u#is_windows() - let result = substitute(result, '\\', '/', 'g') - endif - let result = vimwiki#path#chomp_slash(result) - return result -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 -function! vimwiki#path#relpath(dir, file) - let result = [] - let dir = split(a:dir, '/') - let file = split(a:file, '/') - while (len(dir) > 0 && len(file) > 0) && vimwiki#path#is_equal(dir[0], file[0]) - call remove(dir, 0) - call remove(file, 0) - endwhile - if empty(dir) && empty(file) - return './' - endif - for segment in dir - let result += ['..'] - endfor - for segment in file - let result += [segment] - endfor - let result_path = join(result, '/') - if a:file =~ '\m/$' - let result_path .= '/' - endif - return result_path -endfunction - - -" If the optional argument provided and nonzero, -" it will ask before creating a directory -" Returns: 1 iff directory exists or successfully created -function! vimwiki#path#mkdir(path, ...) - let path = expand(a:path) - - if path =~# '^scp:' - " we can not do much, so let's pretend everything is ok - return 1 - endif - - if isdirectory(path) - return 1 - else - if !exists("*mkdir") - return 0 - endif - - let path = vimwiki#path#chomp_slash(path) - if vimwiki#u#is_windows() && !empty(vimwiki#vars#get_global('w32_dir_enc')) - let path = iconv(path, &enc, vimwiki#vars#get_global('w32_dir_enc')) - endif - - if a:0 && a:1 && input("Vimwiki: Make new directory: ".path."\n [y]es/[N]o? ") !~? '^y' - return 0 - endif - - call mkdir(path, "p") - return 1 - endif -endfunction - - -function! vimwiki#path#is_absolute(path) - if vimwiki#u#is_windows() - return a:path =~? '\m^\a:' - else - return a:path =~# '\m^/\|\~/' - endif -endfunction - - -" Combine a directory and a file into one path, doesn't generate duplicate -" path separator in case the directory is also having an ending / or \. This -" is because on windows ~\vimwiki//.tags is invalid but ~\vimwiki/.tags is a -" valid path. -if vimwiki#u#is_windows() - function! vimwiki#path#join_path(directory, file) - let directory = vimwiki#path#chomp_slash(a:directory) - let file = substitute(a:file, '\m^[\\/]\+', '', '') - return directory . '/' . file - endfunction -else - function! vimwiki#path#join_path(directory, file) - let directory = substitute(a:directory, '\m/\+$', '', '') - let file = substitute(a:file, '\m^/\+', '', '') - return directory . '/' . file - endfunction -endif - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/style.css b/vim/.vim/plugged/vimwiki/autoload/vimwiki/style.css deleted file mode 100644 index 431d15b..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/style.css +++ /dev/null @@ -1,82 +0,0 @@ -body {font-family: Tahoma, Geneva, sans-serif; margin: 1em 2em 1em 2em; font-size: 100%; line-height: 130%;} -h1, h2, h3, h4, h5, h6 {font-family: Trebuchet MS, Helvetica, sans-serif; font-weight: bold; line-height:100%; margin-top: 1.5em; margin-bottom: 0.5em;} -h1 {font-size: 2.6em; color: #000000;} -h2 {font-size: 2.2em; color: #404040;} -h3 {font-size: 1.8em; color: #707070;} -h4 {font-size: 1.4em; color: #909090;} -h5 {font-size: 1.3em; color: #989898;} -h6 {font-size: 1.2em; color: #9c9c9c;} -p, pre, blockquote, table, ul, ol, dl {margin-top: 1em; margin-bottom: 1em;} -ul ul, ul ol, ol ol, ol ul {margin-top: 0.5em; margin-bottom: 0.5em;} -li {margin: 0.3em auto;} -ul {margin-left: 2em; padding-left: 0.5em;} -dt {font-weight: bold;} -img {border: none;} -pre {border-left: 1px solid #ccc; margin-left: 2em; padding-left: 0.5em;} -blockquote {padding: 0.4em; background-color: #f6f5eb;} -th, td {border: 1px solid #ccc; padding: 0.3em;} -th {background-color: #f0f0f0;} -hr {border: none; border-top: 1px solid #ccc; width: 100%;} -del {text-decoration: line-through; color: #777777;} -.toc li {list-style-type: none;} -.todo {font-weight: bold; background-color: #f0ece8; color: #a03020;} -.justleft {text-align: left;} -.justright {text-align: right;} -.justcenter {text-align: center;} -.center {margin-left: auto; margin-right: auto;} -.tag {background-color: #eeeeee; font-family: monospace; padding: 2px;} - -/* 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 { - /* list-style: none; */ - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - background-position: 0 .2em; - padding-left: 1.5em; -} -.done1 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABtSURBVCiR1ZO7DYAwDER9BDmTeZQMFXmUbGYpOjrEryA0wOvO8itOslFrJYAug5BMM4BeSkmjsrv3aVTa8p48Xw1JSkSsWVUFwD05IqS1tmYzk5zzae9jnVVVzGyXb8sALjse+euRkEzu/uirFomVIdDGOLjuAAAAAElFTkSuQmCC); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} -.done2 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAB1SURBVCiRzdO5DcAgDAVQGxjAYgTvxlDIu1FTIRYAp8qlFISkSH7l5kk+ZIwxKiI2mIyqWoeILYRgZ7GINDOLjnmF3VqklKCUMgTee2DmM661Qs55iI3Zm/1u5h9sm4ig9z4ERHTFzLyd4G4+nFlVrYg8+qoF/c0kdpeMsmcAAAAASUVORK5CYII=); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} -.done3 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABoSURBVCiR7dOxDcAgDATA/0DtUdiKoZC3YhLkHjkVKF3idJHiztKfvrHZWnOSE8Fx95RJzlprimJVnXktvXeY2S0SEZRSAAAbmxnGGKH2I5T+8VfxPhIReQSuuY3XyYWa3T2p6quvOgGrvSFGlewuUAAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} -.done4 { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAQCAYAAAAbBi9cAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAzgAAAM4BlP6ToAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIISURBVDiNnZQ9SFtRFMd/773kpTaGJoQk1im4VDpWQcTNODhkFBcVTCNCF0NWyeDiIIiCm82QoIMIUkHUxcFBg1SEQoZszSat6cdTn1qNue92CMbEr9Sey+XC/Z/zu+f8h6ukUil3sVg0+M+4cFxk42/jH2wAqqqKSCSiPQdwcHHAnDHH9s/tN1h8V28ETdP+eU8fT9Nt62ancYdIPvJNtsu87bmjrJlrTDVM4RROJs1JrHPrD4Bar7A6cpc54iKOaTdJXCUI2UMVrQZ0Js7YPN18ECKkYNQcJe/OE/4dZsw7VqNXQMvHy3QZXQypQ6ycrtwDjf8aJ+PNEDSCzLpn7+m2pD8ZKHlKarYhy6XjEoCYGcN95qansQeA3fNdki+SaJZGTMQIOoL3W/Z89rxv+tokubNajlvk/vm+LFpF2XnUKZHI0I+QrI7Dw0OZTqdzUkpsM7mZTyfy5OPGyw1tK7AFSvmB/Ks8w8YwbUYbe6/3QEKv0vugfxWPnMLJun+d/kI/WLdizpNjMbAIKrhMF4OuwadBALqqs+RfInwUvuNi+fBd+wjogfogAFVRmffO02q01mZZ0HHdgXIzdz0QQLPezIQygX6llxNKKgOFARYCC49CqhoHIUTlss/Vx2phlYwjw8j1CAlfAiwQiJpiy7o1VHnsG5FISkoJu7Q/2YmmaV+i0ei7v38L2CBguSi5AAAAAElFTkSuQmCC); - background-repeat: no-repeat; - background-position: 0 .15em; - padding-left: 1.5em; -} - -code { - font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; - padding: 0px 3px; - display: inline-block; - color: #52595d; - border: 1px solid #ccc; - background-color: #f9f9f9; -} diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/tags.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/tags.vim deleted file mode 100644 index e802bce..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/tags.vim +++ /dev/null @@ -1,342 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file - - -let s:TAGS_METADATA_FILE_NAME = '.tags' - - - -" Tags metadata in-memory format: -" metadata := { 'pagename': [entries, ...] } -" entry := { 'tagname':..., 'lineno':..., 'link':... } - -" Tags metadata in-file format: -" -" Is based on CTags format (see |tags-file-format|). -" -" {tagaddress} is set to lineno. We'll let vim search by exact line number; we -" can afford that, we assume metadata file is always updated before use. -" -" Pagename and link are not saved in standard ctags fields, so we'll add -" an optional field, "vimwiki:". In this field, we encode tab-separated values -" of missing parameters -- "pagename" and "link". - - - -" Update tags metadata. -" a:full_rebuild == 1: re-scan entire wiki -" a:full_rebuild == 0: only re-scan current page -" a:all_files == '': only if the file is newer than .tags -function! vimwiki#tags#update_tags(full_rebuild, all_files) - let all_files = a:all_files != '' - if !a:full_rebuild - " Updating for one page (current) - let page_name = vimwiki#vars#get_bufferlocal('subdir') . expand('%:t:r') - " Collect tags in current file - let tags = s:scan_tags(getline(1, '$'), page_name) - " Load metadata file - let metadata = s:load_tags_metadata() - " Drop old tags - let metadata = s:remove_page_from_tags(metadata, page_name) - " Merge in the new ones - let metadata = s:merge_tags(metadata, page_name, tags) - " Save - call s:write_tags_metadata(metadata) - else " full rebuild - let files = vimwiki#base#find_files(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) - let wiki_base_dir = vimwiki#vars#get_wikilocal('path') - let tags_file_last_modification = getftime(vimwiki#tags#metadata_file_path()) - let metadata = s:load_tags_metadata() - for file in files - if all_files || getftime(file) >= tags_file_last_modification - let subdir = vimwiki#base#subdir(wiki_base_dir, file) - let page_name = subdir . fnamemodify(file, ':t:r') - let tags = s:scan_tags(readfile(file), page_name) - let metadata = s:remove_page_from_tags(metadata, page_name) - let metadata = s:merge_tags(metadata, page_name, tags) - endif - endfor - call s:write_tags_metadata(metadata) - endif -endfunction - - -" Scans the list of text lines (argument) and produces tags metadata as a list of tag entries. -function! s:scan_tags(lines, page_name) - - let entries = [] - - " Code wireframe to scan for headers -- borrowed from - " vimwiki#base#get_anchors(), with minor modifications. - - let rxheader = vimwiki#vars#get_syntaxlocal('header_search') - let rxtag = vimwiki#vars#get_syntaxlocal('tag_search') - - let anchor_level = ['', '', '', '', '', '', ''] - let current_complete_anchor = '' - - let PROXIMITY_LINES_NR = 2 - let header_line_nr = - (2 * PROXIMITY_LINES_NR) - - for line_nr in range(1, len(a:lines)) - let line = a:lines[line_nr - 1] - - " process headers - let h_match = matchlist(line, rxheader) - if !empty(h_match) " got a header - let header_line_nr = line_nr - let header = vimwiki#u#trim(h_match[2]) - let level = len(h_match[1]) - let anchor_level[level-1] = header - for l in range(level, 6) - let anchor_level[l] = '' - endfor - if level == 1 - let current_complete_anchor = header - else - let current_complete_anchor = '' - for l in range(level-1) - if anchor_level[l] != '' - let current_complete_anchor .= anchor_level[l].'#' - endif - endfor - let current_complete_anchor .= header - endif - continue " tags are not allowed in headers - endif - - " TODO ignore verbatim blocks - - " Scan line for tags. There can be many of them. - let str = line - while 1 - let tag_group = matchstr(str, rxtag) - if tag_group == '' - break - endif - let tagend = matchend(str, rxtag) - let str = str[(tagend):] - for tag in split(tag_group, ':') - " Create metadata entry - let entry = {} - let entry.tagname = tag - let entry.lineno = line_nr - if line_nr <= PROXIMITY_LINES_NR && header_line_nr < 0 - " Tag appeared at the top of the file - let entry.link = a:page_name - elseif line_nr <= (header_line_nr + PROXIMITY_LINES_NR) - " Tag appeared right below a header - let entry.link = a:page_name . '#' . current_complete_anchor - else - " Tag stands on its own - let entry.link = a:page_name . '#' . tag - endif - call add(entries, entry) - endfor - endwhile - - endfor " loop over lines - return entries -endfunction - - -" Returns tags metadata file path -function! vimwiki#tags#metadata_file_path() abort - return fnamemodify(vimwiki#path#join_path(vimwiki#vars#get_wikilocal('path'), - \ s:TAGS_METADATA_FILE_NAME), ':p') -endfunction - - -" Loads tags metadata from file, returns a dictionary -function! s:load_tags_metadata() abort - let metadata_path = vimwiki#tags#metadata_file_path() - if !filereadable(metadata_path) - return {} - endif - let metadata = {} - for line in readfile(metadata_path) - if line =~ '^!_TAG_FILE_' - continue - endif - let parts = matchlist(line, '^\(.\{-}\);"\(.*\)$') - if parts[0] == '' || parts[1] == '' || parts[2] == '' - throw 'VimwikiTags1: Metadata file corrupted' - endif - let std_fields = split(parts[1], '\t') - if len(std_fields) != 3 - throw 'VimwikiTags2: Metadata file corrupted' - endif - let vw_part = parts[2] - if vw_part[0] != "\t" - throw 'VimwikiTags3: Metadata file corrupted' - endif - let vw_fields = split(vw_part[1:], "\t") - if len(vw_fields) != 1 || vw_fields[0] !~ '^vimwiki:' - throw 'VimwikiTags4: Metadata file corrupted' - endif - let vw_data = substitute(vw_fields[0], '^vimwiki:', '', '') - let vw_data = substitute(vw_data, '\\n', "\n", 'g') - let vw_data = substitute(vw_data, '\\r', "\r", 'g') - let vw_data = substitute(vw_data, '\\t', "\t", 'g') - let vw_data = substitute(vw_data, '\\\\', "\\", 'g') - let vw_fields = split(vw_data, "\t") - if len(vw_fields) != 2 - throw 'VimwikiTags5: Metadata file corrupted' - endif - let pagename = vw_fields[0] - let entry = {} - let entry.tagname = std_fields[0] - let entry.lineno = std_fields[2] - let entry.link = vw_fields[1] - if has_key(metadata, pagename) - call add(metadata[pagename], entry) - else - let metadata[pagename] = [entry] - endif - endfor - return metadata -endfunction - - -" Removes all entries for given page from metadata in-place. Returns updated -" metadata (just in case). -function! s:remove_page_from_tags(metadata, page_name) - if has_key(a:metadata, a:page_name) - call remove(a:metadata, a:page_name) - return a:metadata - else - return a:metadata - endif -endfunction - - -" Merges metadata of one file into a:metadata -function! s:merge_tags(metadata, pagename, file_metadata) - let metadata = a:metadata - let metadata[a:pagename] = a:file_metadata - return metadata -endfunction - - -" 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 also s:write_tags_metadata below -- that's where we compose these tags -" file lines. -" -" This function is needed for tags sorting, since plain sort() compares line -" 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 -" alphabetically 'less than' string "9".) -function! s:tags_entry_cmp(i1, i2) - let items = [] - for orig_item in [a:i1, a:i2] - let fields = split(orig_item, "\t") - let item = {} - let item.text = fields[0]."\t".fields[1] - let item.lineno = 0 + matchstr(fields[2], '\m\d\+') - call add(items, item) - endfor - if items[0].text ># items[1].text - return 1 - elseif items[0].text <# items[1].text - return -1 - elseif items[0].lineno > items[1].lineno - return 1 - elseif items[0].lineno < items[1].lineno - return -1 - else - return 0 - endif -endfunction - - -" Saves metadata object into a file. Throws exceptions in case of problems. -function! s:write_tags_metadata(metadata) - let metadata_path = vimwiki#tags#metadata_file_path() - let tags = [] - for pagename in keys(a:metadata) - for entry in a:metadata[pagename] - let entry_data = pagename . "\t" . entry.link - let entry_data = substitute(entry_data, "\\", '\\\\', 'g') - let entry_data = substitute(entry_data, "\t", '\\t', 'g') - let entry_data = substitute(entry_data, "\r", '\\r', 'g') - let entry_data = substitute(entry_data, "\n", '\\n', 'g') - call add(tags, - \ entry.tagname . "\t" - \ . pagename . vimwiki#vars#get_wikilocal('ext') . "\t" - \ . entry.lineno - \ . ';"' - \ . "\t" . "vimwiki:" . entry_data - \) - endfor - endfor - call sort(tags, "s:tags_entry_cmp") - call insert(tags, "!_TAG_FILE_SORTED\t1\t") - call writefile(tags, metadata_path) -endfunction - - -" Returns list of unique tags found in the .tags file -function! vimwiki#tags#get_tags() - let metadata = s:load_tags_metadata() - let tags = {} - for entries in values(metadata) - for entry in entries - let tags[entry.tagname] = 1 - endfor - endfor - return keys(tags) -endfunction - - -" Similar to vimwiki#base#generate_links. In the current buffer, appends -" tags and references to all their instances. If no arguments (tags) are -" specified, outputs all tags. -function! vimwiki#tags#generate_tags(...) abort - let need_all_tags = (a:0 == 0) - let specific_tags = a:000 - - let metadata = s:load_tags_metadata() - - " make a dictionary { tag_name: [tag_links, ...] } - let tags_entries = {} - for entries in values(metadata) - for entry in entries - if has_key(tags_entries, entry.tagname) - call add(tags_entries[entry.tagname], entry.link) - else - let tags_entries[entry.tagname] = [entry.link] - endif - endfor - endfor - - let lines = [] - let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' ' - for tagname in sort(keys(tags_entries)) - if need_all_tags || index(specific_tags, tagname) != -1 - call extend(lines, [ - \ '', - \ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', tagname, ''), - \ '' ]) - for taglink in sort(tags_entries[tagname]) - call add(lines, bullet . substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), - \ '__LinkUrl__', taglink, '')) - endfor - endif - endfor - - let links_rx = '\m\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH2').'\)\|\%(^\s*' - \ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - \ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)' - - call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, line('$')+1, 1) -endfunction - - -function! vimwiki#tags#complete_tags(ArgLead, CmdLine, CursorPos) abort - " We can safely ignore args if we use -custom=complete option, Vim engine - " will do the job of filtering. - let taglist = vimwiki#tags#get_tags() - return join(taglist, "\n") -endfunction - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/tbl.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/tbl.vim deleted file mode 100644 index 1c049ce..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/tbl.vim +++ /dev/null @@ -1,703 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: Tables -" | Easily | manageable | text | tables | ! | -" |--------|------------|-------|--------|---------| -" | Have | fun! | Drink | tea | Period. | -" -" Home: https://github.com/vimwiki/vimwiki/ - - - -if exists("g:loaded_vimwiki_tbl_auto") || &cp - finish -endif -let g:loaded_vimwiki_tbl_auto = 1 - - -let s:textwidth = &tw - - -function! s:rxSep() - return vimwiki#vars#get_syntaxlocal('rxTableSep') -endfunction - - -function! s:wide_len(str) - " vim73 has new function that gives correct string width. - if exists("*strdisplaywidth") - return strdisplaywidth(a:str) - endif - - " get str display width in vim ver < 7.2 - if !vimwiki#vars#get_global('CJK_length') - let ret = strlen(substitute(a:str, '.', 'x', 'g')) - else - let savemodified = &modified - let save_cursor = getpos('.') - exe "norm! o\<esc>" - call setline(line("."), a:str) - let ret = virtcol("$") - 1 - d - call setpos('.', save_cursor) - let &modified = savemodified - endif - return ret -endfunction - - -function! s:cell_splitter() - return '\s*'.s:rxSep().'\s*' -endfunction - - -function! s:sep_splitter() - return '-'.s:rxSep().'-' -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) - return a:line =~# '^\s*'.s:rxSep().'\(--\+'.s:rxSep().'\)\+\s*$' -endfunction - - -function! s:is_separator_tail(line) - return a:line =~# '^\{-1}\%(\s*\|-*\)\%('.s:rxSep().'-\+\)\+'.s:rxSep().'\s*$' -endfunction - - -function! s:is_last_column(lnum, cnum) - let line = strpart(getline(a:lnum), a:cnum - 1) - return line =~# s:rxSep().'\s*$' && line !~# s:rxSep().'.*'.s:rxSep().'\s*$' -endfunction - - -function! s:is_first_column(lnum, cnum) - let line = strpart(getline(a:lnum), 0, a:cnum - 1) - return line =~# '^\s*$' || - \ (line =~# '^\s*'.s:rxSep() && line !~# '^\s*'.s:rxSep().'.*'.s:rxSep()) -endfunction - - -function! s:count_separators_up(lnum) - let lnum = a:lnum - 1 - while lnum > 1 - if !s:is_separator(getline(lnum)) - break - endif - let lnum -= 1 - endwhile - - return (a:lnum-lnum) -endfunction - - -function! s:count_separators_down(lnum) - let lnum = a:lnum + 1 - while lnum < line('$') - if !s:is_separator(getline(lnum)) - break - endif - let lnum += 1 - endwhile - - return (lnum-a:lnum) -endfunction - - -function! s:create_empty_row(cols) - let row = s:rxSep() - let cell = " ".s:rxSep() - - for c in range(a:cols) - let row .= cell - endfor - - return row -endfunction - - -function! s:create_row_sep(cols) - let row = s:rxSep() - let cell = "---".s:rxSep() - - for c in range(a:cols) - let row .= cell - endfor - - return row -endfunction - - -function! vimwiki#tbl#get_cells(line) - let result = [] - let cell = '' - let quote = '' - let state = 'NONE' - - " 'Simple' FSM - for idx in range(strlen(a:line)) - " The only way I know Vim can do Unicode... - let ch = a:line[idx] - if state ==# 'NONE' - if ch == '|' - let state = 'CELL' - endif - elseif state ==# 'CELL' - if ch == '[' || ch == '{' - let state = 'BEFORE_QUOTE_START' - let quote = ch - elseif ch == '|' - call add(result, vimwiki#u#trim(cell)) - let cell = "" - else - let cell .= ch - endif - elseif state ==# 'BEFORE_QUOTE_START' - if ch == '[' || ch == '{' - let state = 'QUOTE' - let quote .= ch - else - let state = 'CELL' - let cell .= quote.ch - let quote = '' - endif - elseif state ==# 'QUOTE' - if ch == ']' || ch == '}' - let state = 'BEFORE_QUOTE_END' - endif - let quote .= ch - elseif state ==# 'BEFORE_QUOTE_END' - if ch == ']' || ch == '}' - let state = 'CELL' - endif - let cell .= quote.ch - let quote = '' - endif - endfor - - if cell.quote != '' - call add(result, vimwiki#u#trim(cell.quote, '|')) - endif - return result -endfunction - - -function! s:col_count(lnum) - return len(vimwiki#tbl#get_cells(getline(a:lnum))) -endfunction - - -function! s:get_indent(lnum) - if !s:is_table(getline(a:lnum)) - return - endif - - let indent = 0 - - let lnum = a:lnum - 1 - while lnum > 1 - let line = getline(lnum) - if !s:is_table(line) - let indent = indent(lnum+1) - break - endif - let lnum -= 1 - endwhile - - return indent -endfunction - - -function! s:get_rows(lnum) - if !s:is_table(getline(a:lnum)) - return - endif - - let upper_rows = [] - let lower_rows = [] - - let lnum = a:lnum - 1 - while lnum >= 1 - let line = getline(lnum) - if s:is_table(line) - call add(upper_rows, [lnum, line]) - else - break - endif - let lnum -= 1 - endwhile - call reverse(upper_rows) - - let lnum = a:lnum - while lnum <= line('$') - let line = getline(lnum) - if s:is_table(line) - call add(lower_rows, [lnum, line]) - else - break - endif - let lnum += 1 - endwhile - - return upper_rows + lower_rows -endfunction - - -function! s:get_cell_max_lens(lnum, ...) - let max_lens = {} - for [lnum, row] in s:get_rows(a:lnum) - if s:is_separator(row) - continue - endif - let cells = a:0 > 1 ? a:1[lnum - a:2] : vimwiki#tbl#get_cells(row) - for idx in range(len(cells)) - let value = cells[idx] - if has_key(max_lens, idx) - let max_lens[idx] = max([s:wide_len(value), max_lens[idx]]) - else - let max_lens[idx] = s:wide_len(value) - endif - endfor - endfor - return max_lens -endfunction - - -function! s:get_aligned_rows(lnum, col1, col2) - let rows = s:get_rows(a:lnum) - let startlnum = rows[0][0] - let cells = [] - for [lnum, row] in rows - call add(cells, vimwiki#tbl#get_cells(row)) - endfor - let max_lens = s:get_cell_max_lens(a:lnum, cells, startlnum) - let result = [] - for [lnum, row] in rows - if s:is_separator(row) - let new_row = s:fmt_sep(max_lens, a:col1, a:col2) - else - let new_row = s:fmt_row(cells[lnum - startlnum], max_lens, a:col1, a:col2) - endif - call add(result, [lnum, new_row]) - endfor - return result -endfunction - - -" Number of the current column. Starts from 0. -function! s:cur_column() - let line = getline('.') - if !s:is_table(line) - return -1 - endif - " TODO: do we need conditional: if s:is_separator(line) - - let curs_pos = col('.') - let mpos = match(line, s:rxSep(), 0) - let col = -1 - while mpos < curs_pos && mpos != -1 - let mpos = match(line, s:rxSep(), mpos+1) - if mpos != -1 - let col += 1 - endif - endwhile - return col -endfunction - - -function! s:fmt_cell(cell, max_len) - let cell = ' '.a:cell.' ' - - let diff = a:max_len - s:wide_len(a:cell) - if diff == 0 && empty(a:cell) - let diff = 1 - endif - - let cell .= repeat(' ', diff) - return cell -endfunction - - -function! s:fmt_row(cells, max_lens, col1, col2) - let new_line = s:rxSep() - for idx in range(len(a:cells)) - if idx == a:col1 - let idx = a:col2 - elseif idx == a:col2 - let idx = a:col1 - endif - let value = a:cells[idx] - let new_line .= s:fmt_cell(value, a:max_lens[idx]).s:rxSep() - endfor - - let idx = len(a:cells) - while idx < len(a:max_lens) - let new_line .= s:fmt_cell('', a:max_lens[idx]).s:rxSep() - let idx += 1 - endwhile - return new_line -endfunction - - -function! s:fmt_cell_sep(max_len) - if a:max_len == 0 - return repeat('-', 3) - else - return repeat('-', a:max_len+2) - endif -endfunction - - -function! s:fmt_sep(max_lens, col1, col2) - let new_line = s:rxSep() - for idx in range(len(a:max_lens)) - if idx == a:col1 - let idx = a:col2 - elseif idx == a:col2 - let idx = a:col1 - endif - let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep() - endfor - return new_line -endfunction - - -function! s:kbd_create_new_row(cols, goto_first) - let cmd = "\<ESC>o".s:create_empty_row(a:cols) - let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>" - let cmd .= "\<ESC>0" - if a:goto_first - let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'c', line('.'))\<CR>" - else - let cmd .= (col('.')-1)."l" - let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>" - endif - let cmd .= "a" - - return cmd -endfunction - - -function! s:kbd_goto_next_row() - let cmd = "\<ESC>j" - let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>" - let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>" - let cmd .= "a" - return cmd -endfunction - - -function! s:kbd_goto_prev_row() - let cmd = "\<ESC>k" - let cmd .= ":call search('.\\(".s:rxSep()."\\)', 'c', line('.'))\<CR>" - let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'bc', line('.'))\<CR>" - let cmd .= "a" - return cmd -endfunction - - -" Used in s:kbd_goto_next_col -function! vimwiki#tbl#goto_next_col() - let curcol = virtcol('.') - let lnum = line('.') - let newcol = s:get_indent(lnum) - let max_lens = s:get_cell_max_lens(lnum) - for cell_len in values(max_lens) - if newcol >= curcol-1 - break - endif - let newcol += cell_len + 3 " +3 == 2 spaces + 1 separator |<space>...<space> - endfor - let newcol += 2 " +2 == 1 separator + 1 space |<space - call vimwiki#u#cursor(lnum, newcol) -endfunction - - -function! s:kbd_goto_next_col(jumpdown) - let cmd = "\<ESC>" - if a:jumpdown - let seps = s:count_separators_down(line('.')) - let cmd .= seps."j0" - endif - let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a" - return cmd -endfunction - - -" Used in s:kbd_goto_prev_col -function! vimwiki#tbl#goto_prev_col() - let curcol = virtcol('.') - let lnum = line('.') - let newcol = s:get_indent(lnum) - let max_lens = s:get_cell_max_lens(lnum) - let prev_cell_len = 0 - for cell_len in values(max_lens) - let delta = cell_len + 3 " +3 == 2 spaces + 1 separator |<space>...<space> - if newcol + delta > curcol-1 - let newcol -= (prev_cell_len + 3) " +3 == 2 spaces + 1 separator |<space>...<space> - break - elseif newcol + delta == curcol-1 - break - endif - let prev_cell_len = cell_len - let newcol += delta - endfor - let newcol += 2 " +2 == 1 separator + 1 space |<space - call vimwiki#u#cursor(lnum, newcol) -endfunction - - -function! s:kbd_goto_prev_col(jumpup) - let cmd = "\<ESC>" - if a:jumpup - let seps = s:count_separators_up(line('.')) - let cmd .= seps."k" - let cmd .= "$" - endif - let cmd .= ":call vimwiki#tbl#goto_prev_col()\<CR>a" - " let cmd .= ":call search('\\(".s:rxSep()."\\)\\zs', 'b', line('.'))\<CR>" - " let cmd .= "a" - "echomsg "DEBUG kbd_goto_prev_col> ".cmd - return cmd -endfunction - - -function! vimwiki#tbl#kbd_cr() - let lnum = line('.') - if !s:is_table(getline(lnum)) - return "" - endif - - if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1)) - let cols = len(vimwiki#tbl#get_cells(getline(lnum))) - return s:kbd_create_new_row(cols, 0) - else - return s:kbd_goto_next_row() - endif -endfunction - - -function! vimwiki#tbl#kbd_tab() - let lnum = line('.') - if !s:is_table(getline(lnum)) - return "\<Tab>" - endif - - let last = s:is_last_column(lnum, col('.')) - let is_sep = s:is_separator_tail(getline(lnum)) - "echomsg "DEBUG kbd_tab> last=".last.", is_sep=".is_sep - if (is_sep || last) && !s:is_table(getline(lnum+1)) - let cols = len(vimwiki#tbl#get_cells(getline(lnum))) - return s:kbd_create_new_row(cols, 1) - endif - return s:kbd_goto_next_col(is_sep || last) -endfunction - - -function! vimwiki#tbl#kbd_shift_tab() - let lnum = line('.') - if !s:is_table(getline(lnum)) - return "\<S-Tab>" - endif - - let first = s:is_first_column(lnum, col('.')) - let is_sep = s:is_separator_tail(getline(lnum)) - "echomsg "DEBUG kbd_tab> ".first - if (is_sep || first) && !s:is_table(getline(lnum-1)) - return "" - endif - return s:kbd_goto_prev_col(is_sep || first) -endfunction - - -function! vimwiki#tbl#format(lnum, ...) - if !(&filetype ==? 'vimwiki') - return - endif - let line = getline(a:lnum) - if !s:is_table(line) - return - endif - - if a:0 == 2 - let col1 = a:1 - let col2 = a:2 - else - let col1 = 0 - let col2 = 0 - endif - - let indent = s:get_indent(a:lnum) - if &expandtab - let indentstring = repeat(' ', indent) - else - let indentstring = repeat(' ', indent / &tabstop) . repeat(' ', indent % &tabstop) - endif - - for [lnum, row] in s:get_aligned_rows(a:lnum, col1, col2) - let row = indentstring.row - call setline(lnum, row) - endfor - - let &tw = s:textwidth -endfunction - - -function! vimwiki#tbl#create(...) - if a:0 > 1 - let cols = a:1 - let rows = a:2 - elseif a:0 == 1 - let cols = a:1 - let rows = 2 - elseif a:0 == 0 - let cols = 5 - let rows = 2 - endif - - if cols < 1 - let cols = 5 - endif - - if rows < 1 - let rows = 2 - endif - - let lines = [] - let row = s:create_empty_row(cols) - - call add(lines, row) - if rows > 1 - call add(lines, s:create_row_sep(cols)) - endif - - for r in range(rows - 1) - call add(lines, row) - endfor - - call append(line('.'), lines) -endfunction - - -function! vimwiki#tbl#align_or_cmd(cmd) - if s:is_table(getline('.')) - call vimwiki#tbl#format(line('.')) - else - exe 'normal! '.a:cmd - endif -endfunction - - -function! vimwiki#tbl#reset_tw(lnum) - if !(&filetype ==? 'vimwiki') - return - endif - let line = getline(a:lnum) - if !s:is_table(line) - return - endif - - let s:textwidth = &tw - let &tw = 0 -endfunction - - -" TODO: move_column_left and move_column_right are good candidates to be refactored. -function! vimwiki#tbl#move_column_left() - - "echomsg "DEBUG move_column_left: " - - let line = getline('.') - - if !s:is_table(line) - return - endif - - let cur_col = s:cur_column() - if cur_col == -1 - return - endif - - if cur_col > 0 - call vimwiki#tbl#format(line('.'), cur_col-1, cur_col) - call cursor(line('.'), 1) - - let sep = '\('.s:rxSep().'\).\zs' - let mpos = -1 - let col = -1 - while col < cur_col-1 - let mpos = match(line, sep, mpos+1) - if mpos != -1 - let col += 1 - else - break - endif - endwhile - - endif -endfunction - - -function! vimwiki#tbl#move_column_right() - - let line = getline('.') - - if !s:is_table(line) - return - endif - - let cur_col = s:cur_column() - if cur_col == -1 - return - endif - - if cur_col < s:col_count(line('.'))-1 - call vimwiki#tbl#format(line('.'), cur_col, cur_col+1) - call cursor(line('.'), 1) - - let sep = '\('.s:rxSep().'\).\zs' - let mpos = -1 - let col = -1 - while col < cur_col+1 - let mpos = match(line, sep, mpos+1) - if mpos != -1 - let col += 1 - else - break - endif - endwhile - endif -endfunction - - -function! vimwiki#tbl#get_rows(lnum) - return s:get_rows(a:lnum) -endfunction - - -function! vimwiki#tbl#is_table(line) - return s:is_table(a:line) -endfunction - - -function! vimwiki#tbl#is_separator(line) - return s:is_separator(a:line) -endfunction - - -function! vimwiki#tbl#cell_splitter() - return s:cell_splitter() -endfunction - - -function! vimwiki#tbl#sep_splitter() - return s:sep_splitter() -endfunction - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/u.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/u.vim deleted file mode 100644 index c8f62ee..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/u.vim +++ /dev/null @@ -1,72 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Description: Utility functions -" Home: https://github.com/vimwiki/vimwiki/ - -function! vimwiki#u#trim(string, ...) - let chars = '' - if a:0 > 0 - let chars = a:1 - endif - let res = substitute(a:string, '^[[:space:]'.chars.']\+', '', '') - let res = substitute(res, '[[:space:]'.chars.']\+$', '', '') - return res -endfunction - - -" Builtin cursor doesn't work right with unicode characters. -function! vimwiki#u#cursor(lnum, cnum) - exe a:lnum - exe 'normal! 0'.a:cnum.'|' -endfunction - - -function! vimwiki#u#is_windows() - return has("win32") || has("win64") || has("win95") || has("win16") -endfunction - - -function! vimwiki#u#is_macos() - if has("mac") || has("macunix") || has("gui_mac") - return 1 - endif - " that still doesn't mean we are not on Mac OS - let os = substitute(system('uname'), '\n', '', '') - return os == 'Darwin' || os == 'Mac' -endfunction - - -function! vimwiki#u#count_first_sym(line) - let first_sym = matchstr(a:line, '\S') - return len(matchstr(a:line, first_sym.'\+')) -endfunction - - -function! vimwiki#u#escape(string) - return escape(a:string, '~.*[]\^$') -endfunction - - -" Load concrete Wiki syntax: sets regexes and templates for headers and links -function vimwiki#u#reload_regexes() - execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim' -endfunction - - -" Load syntax-specific functionality -function vimwiki#u#reload_regexes_custom() - execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim' -endfunction - - -" Backward compatible version of the built-in function shiftwidth() -if exists('*shiftwidth') - func vimwiki#u#sw() - return shiftwidth() - endfunc -else - func vimwiki#u#sw() - return &sw - endfunc -endif - diff --git a/vim/.vim/plugged/vimwiki/autoload/vimwiki/vars.vim b/vim/.vim/plugged/vimwiki/autoload/vimwiki/vars.vim deleted file mode 100644 index 2f1ab50..0000000 --- a/vim/.vim/plugged/vimwiki/autoload/vimwiki/vars.vim +++ /dev/null @@ -1,711 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki autoload plugin file -" Home: https://github.com/vimwiki/vimwiki/ - - - -" ------------------------------------------------------------------------------------------------ -" 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() - - let g:vimwiki_global_vars = { - \ 'CJK_length': 0, - \ 'auto_chdir': 0, - \ 'autowriteall': 1, - \ 'conceallevel': 2, - \ 'diary_months': - \ { - \ 1: 'January', 2: 'February', 3: 'March', - \ 4: 'April', 5: 'May', 6: 'June', - \ 7: 'July', 8: 'August', 9: 'September', - \ 10: 'October', 11: 'November', 12: 'December' - \ }, - \ 'dir_link': '', - \ 'ext2syntax': {}, - \ 'folding': '', - \ 'global_ext': 1, - \ 'hl_cb_checked': 0, - \ 'hl_headers': 0, - \ 'html_header_numbering': 0, - \ 'html_header_numbering_sym': '', - \ 'list_ignore_newline': 1, - \ 'text_ignore_newline': 1, - \ 'listsyms': ' .oOX', - \ 'listsym_rejected': '-', - \ 'map_prefix': '<Leader>w', - \ 'menu': 'Vimwiki', - \ 'table_auto_fmt': 1, - \ 'table_mappings': 1, - \ 'toc_header': 'Contents', - \ 'url_maxsave': 15, - \ 'use_calendar': 1, - \ 'use_mouse': 0, - \ 'user_htmls': '', - \ 'valid_html_tags': 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em', - \ '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) - if exists('g:vimwiki_'.key) - let g:vimwiki_global_vars[key] = g:vimwiki_{key} - endif - endfor - - " non-configurable global variables: - - " 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 - let g:vimwiki_global_vars.schemes = join(['wiki\d\+', 'diary', 'local'], '\|') - let g:vimwiki_global_vars.web_schemes1 = join(['http', 'https', 'file', 'ftp', 'gopher', - \ 'telnet', 'nntp', 'ldap', 'rsync', 'imap', 'pop', 'irc', 'ircs', 'cvs', 'svn', 'svn+ssh', - \ 'git', 'ssh', 'fish', 'sftp'], '\|') - let web_schemes2 = - \ join(['mailto', 'news', 'xmpp', 'sip', 'sips', 'doi', 'urn', 'tel', 'data'], '\|') - - let g:vimwiki_global_vars.rxSchemes = '\%('. - \ g:vimwiki_global_vars.schemes . '\|'. - \ g:vimwiki_global_vars.web_schemes1 . '\|'. - \ web_schemes2 . - \ '\)' - - " match URL for common protocols; see http://en.wikipedia.org/wiki/URI_scheme - " http://tools.ietf.org/html/rfc3986 - let rxWebProtocols = - \ '\%('. - \ '\%('. - \ '\%('.g:vimwiki_global_vars.web_schemes1 . '\):'. - \ '\%(//\)'. - \ '\)'. - \ '\|'. - \ '\%('.web_schemes2.'\):'. - \ '\)' - - let g:vimwiki_global_vars.rxWeblinkUrl = rxWebProtocols . '\S\{-1,}'. '\%(([^ \t()]*)\)\=' - - let wikilink_prefix = '[[' - let wikilink_suffix = ']]' - let wikilink_separator = '|' - let g:vimwiki_global_vars.rx_wikilink_prefix = vimwiki#u#escape(wikilink_prefix) - let g:vimwiki_global_vars.rx_wikilink_suffix = vimwiki#u#escape(wikilink_suffix) - let g:vimwiki_global_vars.rx_wikilink_separator = vimwiki#u#escape(wikilink_separator) - - " templates for the creation of wiki links - " [[URL]] - let g:vimwiki_global_vars.WikiLinkTemplate1 = wikilink_prefix . '__LinkUrl__'. wikilink_suffix - " [[URL|DESCRIPTION]] - let g:vimwiki_global_vars.WikiLinkTemplate2 = wikilink_prefix . '__LinkUrl__'. wikilink_separator - \ . '__LinkDescription__' . wikilink_suffix - - let valid_chars = '[^\\\]]' - let g:vimwiki_global_vars.rxWikiLinkUrl = valid_chars.'\{-}' - let g:vimwiki_global_vars.rxWikiLinkDescr = valid_chars.'\{-}' - - " this regexp defines what can form a link when the user presses <CR> in the - " buffer (and not on a link) to create a link - " basically, it's Ascii alphanumeric characters plus #|./@-_~ plus all - " non-Ascii characters, except that . is not accepted as the last character - let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]*[^[:blank:]!"$%&''()*+.,:;<=>?\[\]\\^`{}]' - - let g:vimwiki_global_vars.rx_wikilink_prefix1 = g:vimwiki_global_vars.rx_wikilink_prefix . - \ 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.rxWikiInclPrefix = '{{' - let g:vimwiki_global_vars.rxWikiInclSuffix = '}}' - let g:vimwiki_global_vars.rxWikiInclSeparator = '|' - " '{{__LinkUrl__}}' - let g:vimwiki_global_vars.WikiInclTemplate1 = g:vimwiki_global_vars.rxWikiInclPrefix - \ .'__LinkUrl__'. g:vimwiki_global_vars.rxWikiInclSuffix - " '{{__LinkUrl____LinkDescription__}}' - let g:vimwiki_global_vars.WikiInclTemplate2 = g:vimwiki_global_vars.rxWikiInclPrefix - \ . '__LinkUrl__' . g:vimwiki_global_vars.rxWikiInclSeparator . '__LinkDescription__' - \ . g:vimwiki_global_vars.rxWikiInclSuffix - - let valid_chars = '[^\\\}]' - let g:vimwiki_global_vars.rxWikiInclUrl = valid_chars.'\{-}' - let g:vimwiki_global_vars.rxWikiInclArg = valid_chars.'\{-}' - let g:vimwiki_global_vars.rxWikiInclArgs = '\%('. g:vimwiki_global_vars.rxWikiInclSeparator. - \ g:vimwiki_global_vars.rxWikiInclArg. '\)'.'\{-}' - - " *. {{URL}[{...}]} - i.e. {{URL}}, {{URL|ARG1}}, {{URL|ARG1|ARG2}}, etc. - " *a) match {{URL}[{...}]} - let g:vimwiki_global_vars.rxWikiIncl = g:vimwiki_global_vars.rxWikiInclPrefix. - \ g:vimwiki_global_vars.rxWikiInclUrl. - \ g:vimwiki_global_vars.rxWikiInclArgs. g:vimwiki_global_vars.rxWikiInclSuffix - " *b) match URL within {{URL}[{...}]} - let g:vimwiki_global_vars.rxWikiInclMatchUrl = g:vimwiki_global_vars.rxWikiInclPrefix. - \ '\zs'. g:vimwiki_global_vars.rxWikiInclUrl . '\ze'. - \ g:vimwiki_global_vars.rxWikiInclArgs . g:vimwiki_global_vars.rxWikiInclSuffix - - let g:vimwiki_global_vars.rxWikiInclPrefix1 = g:vimwiki_global_vars.rxWikiInclPrefix. - \ g:vimwiki_global_vars.rxWikiInclUrl . g:vimwiki_global_vars.rxWikiInclSeparator - let g:vimwiki_global_vars.rxWikiInclSuffix1 = g:vimwiki_global_vars.rxWikiInclArgs. - \ g:vimwiki_global_vars.rxWikiInclSuffix - - let g:vimwiki_global_vars.rxTodo = '\C\<\%(TODO\|DONE\|STARTED\|FIXME\|FIXED\|XXX\)\>' - - " default colors when headers of different levels are highlighted differently - " 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_ctermfg_light = ['DarkRed', 'DarkGreen', 'DarkBlue', 'Black' - \ , '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 - - -function! s:populate_wikilocal_options() - let default_values = { - \ 'auto_export': 0, - \ 'auto_tags': 0, - \ 'auto_toc': 0, - \ 'automatic_nested_syntaxes': 1, - \ 'css_name': 'style.css', - \ 'custom_wiki2html': '', - \ 'custom_wiki2html_args': '', - \ 'diary_header': 'Diary', - \ 'diary_index': 'diary', - \ 'diary_rel_path': 'diary/', - \ 'diary_sort': 'desc', - \ 'ext': '.wiki', - \ 'index': 'index', - \ 'list_margin': -1, - \ 'maxhi': 0, - \ 'nested_syntaxes': {}, - \ 'path': '~/vimwiki/', - \ 'path_html': '', - \ 'syntax': 'default', - \ 'template_default': 'default', - \ 'template_ext': '.tpl', - \ 'template_path': '~/vimwiki/templates/', - \ } - - 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') - for users_wiki_settings in g:vimwiki_list - let new_wiki_settings = {} - for key in keys(default_values) - if has_key(users_wiki_settings, key) - let new_wiki_settings[key] = users_wiki_settings[key] - elseif exists('g:vimwiki_'.key) - let new_wiki_settings[key] = g:vimwiki_{key} - else - let new_wiki_settings[key] = default_values[key] - endif - endfor - - let new_wiki_settings.is_temporary_wiki = 0 - - call add(g:vimwiki_wikilocal_vars, new_wiki_settings) - 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 - - " default values for temporary wikis - let temporary_wiki_settings = deepcopy(default_wiki_settings) - let temporary_wiki_settings.is_temporary_wiki = 1 - call add(g:vimwiki_wikilocal_vars, temporary_wiki_settings) - - call s:validate_settings() -endfunction - - -function! s:validate_settings() - for wiki_settings in g:vimwiki_wikilocal_vars - let wiki_settings['path'] = s:normalize_path(wiki_settings['path']) - - let path_html = wiki_settings['path_html'] - if !empty(path_html) - let wiki_settings['path_html'] = s:normalize_path(path_html) - else - let wiki_settings['path_html'] = s:normalize_path( - \ substitute(wiki_settings['path'], '[/\\]\+$', '', '').'_html/') - endif - - let wiki_settings['template_path'] = s:normalize_path(wiki_settings['template_path']) - let wiki_settings['diary_rel_path'] = s:normalize_path(wiki_settings['diary_rel_path']) - endfor -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) - if !exists('g:vimwiki_syntax_variables') - let g:vimwiki_syntax_variables = {} - endif - - if has_key(g:vimwiki_syntax_variables, a:syntax) - return - endif - - let g:vimwiki_syntax_variables[a:syntax] = {} - - execute 'runtime! syntax/vimwiki_'.a:syntax.'.vim' - - " generic stuff - let header_symbol = g:vimwiki_syntax_variables[a:syntax].rxH - if g:vimwiki_syntax_variables[a:syntax].symH - " symmetric headers - 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] = - \ '^\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 - let g:vimwiki_syntax_variables[a:syntax].rxHeader = - \ '^\s*\('.header_symbol.'\{1,6}\)\zs[^'.header_symbol.'].*[^'.header_symbol.']\ze\1\s*$' - else - " asymmetric - 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] = - \ '^\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 - let g:vimwiki_syntax_variables[a:syntax].rxHeader = - \ '^\s*\('.header_symbol.'\{1,6}\)\zs[^'.header_symbol.'].*\ze$' - endif - - let g:vimwiki_syntax_variables[a:syntax].rxPreStart = - \ '^\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].rxMathEnd = - \ '^\s*'.g:vimwiki_syntax_variables[a:syntax].rxMathEnd.'\s*$' - - " 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].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_divisors = '' - for i in g:vimwiki_syntax_variables[a:syntax].number_types - call add(g:vimwiki_syntax_variables[a:syntax].number_kinds, i[0]) - let g:vimwiki_syntax_variables[a:syntax].number_divisors .= vimwiki#u#escape(i[1]) - endfor - - let char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+', - \ 'a': '\l\{1,2}', 'A': '\u\{1,2}'} - - "create regexp for bulleted list items - 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, - \'vimwiki#u#escape(v:val).' - \ .'repeat("\\+", g:vimwiki_syntax_variables[a:syntax].recurring_bullets)' - \ ) , '\|') - else - "regex that matches nothing - let g:vimwiki_syntax_variables[a:syntax].rxListBullet = '$^' - endif - - "create regex for numbered list items - if !empty(g:vimwiki_syntax_variables[a:syntax].number_types) - let g:vimwiki_syntax_variables[a:syntax].rxListNumber = '\C\%(' - for type in g:vimwiki_syntax_variables[a:syntax].number_types[:-2] - let g:vimwiki_syntax_variables[a:syntax].rxListNumber .= char_to_rx[type[0]] . - \ vimwiki#u#escape(type[1]) . '\|' - endfor - 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]) . '\)' - else - "regex that matches nothing - let g:vimwiki_syntax_variables[a:syntax].rxListNumber = '$^' - endif - - "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') - 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 - 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 - 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 - - " 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L)) - " let g:vimwiki_rxWeblink = '[\["(|]\@<!'. g:vimwiki_rxWeblinkUrl . - " \ '\%([),:;.!?]\=\%([ \t]\|$\)\)\@=' - let g:vimwiki_syntax_variables[a:syntax].rxWeblink = - \ '\<'. g:vimwiki_global_vars.rxWeblinkUrl . '\S*' - " 0a) match URL within URL - let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchUrl = - \ g:vimwiki_syntax_variables[a:syntax].rxWeblink - " 0b) match DESCRIPTION within URL - let g:vimwiki_syntax_variables[a:syntax].rxWeblinkMatchDescr = '' - - " template for matching all wiki links with a given target file - let g:vimwiki_syntax_variables[a:syntax].WikiLinkMatchUrlTemplate = - \ g:vimwiki_global_vars.rx_wikilink_prefix . - \ '\zs__LinkUrl__\ze\%(#.*\)\?' . - \ g:vimwiki_global_vars.rx_wikilink_suffix . - \ '\|' . - \ g:vimwiki_global_vars.rx_wikilink_prefix . - \ '\zs__LinkUrl__\ze\%(#.*\)\?' . - \ g:vimwiki_global_vars.rx_wikilink_separator . - \ '.*' . - \ g:vimwiki_global_vars.rx_wikilink_suffix - - " a) match [[URL|DESCRIPTION]] - 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.rxWikiLinkDescr.'\)\?'.g:vimwiki_global_vars.rx_wikilink_suffix - 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 - " b) match URL within [[URL|DESCRIPTION]] - let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchUrl = - \ g:vimwiki_global_vars.rx_wikilink_prefix . '\zs'. g:vimwiki_global_vars.rxWikiLinkUrl - \ .'\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]] - let g:vimwiki_syntax_variables[a:syntax].rxWikiLinkMatchDescr = - \ g:vimwiki_global_vars.rx_wikilink_prefix . g:vimwiki_global_vars.rxWikiLinkUrl - \ . 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' - call s:populate_extra_markdown_vars() - endif -endfunction - - -function! s:populate_extra_markdown_vars() - let mkd_syntax = g:vimwiki_syntax_variables['markdown'] - - " 0a) match [[URL|DESCRIPTION]] - let mkd_syntax.rxWikiLink0 = mkd_syntax.rxWikiLink - " 0b) match URL within [[URL|DESCRIPTION]] - let mkd_syntax.rxWikiLink0MatchUrl = mkd_syntax.rxWikiLinkMatchUrl - " 0c) match DESCRIPTION within [[URL|DESCRIPTION]] - let mkd_syntax.rxWikiLink0MatchDescr = mkd_syntax.rxWikiLinkMatchDescr - - let wikilink_md_prefix = '[' - let wikilink_md_suffix = ']' - let wikilink_md_separator = '][' - let rx_wikilink_md_separator = vimwiki#u#escape(wikilink_md_separator) - let mkd_syntax.rx_wikilink_md_prefix = vimwiki#u#escape(wikilink_md_prefix) - let mkd_syntax.rx_wikilink_md_suffix = vimwiki#u#escape(wikilink_md_suffix) - - " [URL][] - let mkd_syntax.WikiLink1Template1 = wikilink_md_prefix . '__LinkUrl__'. - \ wikilink_md_separator. wikilink_md_suffix - " [DESCRIPTION][URL] - let mkd_syntax.WikiLink1Template2 = wikilink_md_prefix. '__LinkDescription__'. - \ wikilink_md_separator. '__LinkUrl__'. wikilink_md_suffix - let mkd_syntax.WikiLinkMatchUrlTemplate .= - \ '\|' . - \ mkd_syntax.rx_wikilink_md_prefix . - \ '.*' . - \ rx_wikilink_md_separator . - \ '\zs__LinkUrl__\ze\%(#.*\)\?' . - \ mkd_syntax.rx_wikilink_md_suffix . - \ '\|' . - \ mkd_syntax.rx_wikilink_md_prefix . - \ '\zs__LinkUrl__\ze\%(#.*\)\?' . - \ rx_wikilink_md_separator . - \ mkd_syntax.rx_wikilink_md_suffix - - let valid_chars = '[^\\\[\]]' - let mkd_syntax.rxWikiLink1Url = valid_chars.'\{-}' - let mkd_syntax.rxWikiLink1Descr = valid_chars.'\{-}' - let mkd_syntax.rxWikiLink1InvalidPrefix = '[\]\[]\@<!' - let mkd_syntax.rxWikiLink1InvalidSuffix = '[\]\[]\@!' - let mkd_syntax.rx_wikilink_md_prefix = mkd_syntax.rxWikiLink1InvalidPrefix. - \ mkd_syntax.rx_wikilink_md_prefix - let mkd_syntax.rx_wikilink_md_suffix = mkd_syntax.rx_wikilink_md_suffix. - \ mkd_syntax.rxWikiLink1InvalidSuffix - - " 1. match [URL][], [DESCRIPTION][URL] - let mkd_syntax.rxWikiLink1 = mkd_syntax.rx_wikilink_md_prefix. - \ mkd_syntax.rxWikiLink1Url. rx_wikilink_md_separator. - \ mkd_syntax.rx_wikilink_md_suffix. - \ '\|'. mkd_syntax.rx_wikilink_md_prefix. - \ mkd_syntax.rxWikiLink1Descr . rx_wikilink_md_separator. - \ mkd_syntax.rxWikiLink1Url . mkd_syntax.rx_wikilink_md_suffix - " 2. match URL within [URL][], [DESCRIPTION][URL] - let mkd_syntax.rxWikiLink1MatchUrl = mkd_syntax.rx_wikilink_md_prefix. - \ '\zs'. mkd_syntax.rxWikiLink1Url. '\ze'. rx_wikilink_md_separator. - \ mkd_syntax.rx_wikilink_md_suffix. - \ '\|'. mkd_syntax.rx_wikilink_md_prefix. - \ mkd_syntax.rxWikiLink1Descr. rx_wikilink_md_separator. - \ '\zs'. mkd_syntax.rxWikiLink1Url. '\ze'. mkd_syntax.rx_wikilink_md_suffix - " 3. match DESCRIPTION within [DESCRIPTION][URL] - let mkd_syntax.rxWikiLink1MatchDescr = mkd_syntax.rx_wikilink_md_prefix. - \ '\zs'. mkd_syntax.rxWikiLink1Descr.'\ze'. rx_wikilink_md_separator. - \ mkd_syntax.rxWikiLink1Url . mkd_syntax.rx_wikilink_md_suffix - - let mkd_syntax.rxWikiLink1Prefix1 = mkd_syntax.rx_wikilink_md_prefix - let mkd_syntax.rxWikiLink1Suffix1 = rx_wikilink_md_separator. - \ mkd_syntax.rxWikiLink1Url . mkd_syntax.rx_wikilink_md_suffix - - " 1. match ANY wikilink - let mkd_syntax.rxWikiLink = mkd_syntax.rxWikiLink0 . '\|' . mkd_syntax.rxWikiLink1 - " 2. match URL within ANY wikilink - let mkd_syntax.rxWikiLinkMatchUrl = mkd_syntax.rxWikiLink0MatchUrl . '\|' . - \ mkd_syntax.rxWikiLink1MatchUrl - " 3. match DESCRIPTION within ANY wikilink - let mkd_syntax.rxWikiLinkMatchDescr = mkd_syntax.rxWikiLink0MatchDescr . '\|' . - \ mkd_syntax.rxWikiLink1MatchDescr - - " 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L)) - let mkd_syntax.rxWeblink0 = mkd_syntax.rxWeblink - " 0a) match URL within URL - let mkd_syntax.rxWeblinkMatchUrl0 = mkd_syntax.rxWeblinkMatchUrl - " 0b) match DESCRIPTION within URL - let mkd_syntax.rxWeblinkMatchDescr0 = mkd_syntax.rxWeblinkMatchDescr - - let mkd_syntax.rxWeblink1Prefix = '[' - let mkd_syntax.rxWeblink1Suffix = ')' - let mkd_syntax.rxWeblink1Separator = '](' - " [DESCRIPTION](URL) - let mkd_syntax.Weblink1Template = mkd_syntax.rxWeblink1Prefix . '__LinkDescription__'. - \ mkd_syntax.rxWeblink1Separator. '__LinkUrl__'. - \ mkd_syntax.rxWeblink1Suffix - - let valid_chars = '[^\\]' - - let mkd_syntax.rxWeblink1Prefix = vimwiki#u#escape(mkd_syntax.rxWeblink1Prefix) - let mkd_syntax.rxWeblink1Suffix = vimwiki#u#escape(mkd_syntax.rxWeblink1Suffix) - let mkd_syntax.rxWeblink1Separator = vimwiki#u#escape(mkd_syntax.rxWeblink1Separator) - let mkd_syntax.rxWeblink1Url = valid_chars.'\{-}' - let mkd_syntax.rxWeblink1Descr = valid_chars.'\{-}' - - " 1. [DESCRIPTION](URL) - " 1a) match [DESCRIPTION](URL) - let mkd_syntax.rxWeblink1 = mkd_syntax.rxWeblink1Prefix. - \ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1Separator. - \ mkd_syntax.rxWeblink1Descr . mkd_syntax.rxWeblink1Suffix - " 1b) match URL within [DESCRIPTION](URL) - let mkd_syntax.rxWeblink1MatchUrl = mkd_syntax.rxWeblink1Prefix. - \ mkd_syntax.rxWeblink1Descr. mkd_syntax.rxWeblink1Separator. - \ '\zs' . mkd_syntax.rxWeblink1Url . '\ze' . mkd_syntax.rxWeblink1Suffix - " 1c) match DESCRIPTION within [DESCRIPTION](URL) - let mkd_syntax.rxWeblink1MatchDescr = mkd_syntax.rxWeblink1Prefix. - \ '\zs'.mkd_syntax.rxWeblink1Descr.'\ze'. mkd_syntax.rxWeblink1Separator. - \ mkd_syntax.rxWeblink1Url. mkd_syntax.rxWeblink1Suffix - - " TODO: image links too !! - let mkd_syntax.rxWeblink1Prefix1 = mkd_syntax.rxWeblink1Prefix - let mkd_syntax.rxWeblink1Suffix1 = mkd_syntax.rxWeblink1Separator. - \ mkd_syntax.rxWeblink1Url . mkd_syntax.rxWeblink1Suffix - - " *a) match ANY weblink - let mkd_syntax.rxWeblink = ''. - \ mkd_syntax.rxWeblink1.'\|'. - \ mkd_syntax.rxWeblink0 - " *b) match URL within ANY weblink - let mkd_syntax.rxWeblinkMatchUrl = ''. - \ mkd_syntax.rxWeblink1MatchUrl.'\|'. - \ mkd_syntax.rxWeblinkMatchUrl0 - " *c) match DESCRIPTION within ANY weblink - let mkd_syntax.rxWeblinkMatchDescr = ''. - \ mkd_syntax.rxWeblink1MatchDescr.'\|'. - \ mkd_syntax.rxWeblinkMatchDescr0 - - let mkd_syntax.rxAnyLink = mkd_syntax.rxWikiLink.'\|'. - \ g:vimwiki_global_vars.rxWikiIncl.'\|'.mkd_syntax.rxWeblink - - let mkd_syntax.rxMkdRef = '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)'. - \ mkd_syntax.rxWeblink0 - let mkd_syntax.rxMkdRefMatchDescr = - \ '\[\zs'.g:vimwiki_global_vars.rxWikiLinkDescr.'\ze]:\%(\s\+\|\n\)'. mkd_syntax.rxWeblink0 - let mkd_syntax.rxMkdRefMatchUrl = - \ '\['.g:vimwiki_global_vars.rxWikiLinkDescr.']:\%(\s\+\|\n\)\zs'. - \ mkd_syntax.rxWeblink0.'\ze' -endfunction - - -function! vimwiki#vars#init() - call s:populate_global_variables() - call s:populate_wikilocal_options() -endfunction - - -function! vimwiki#vars#get_syntaxlocal(key, ...) - if a:0 - let syntax = a:1 - else - let syntax = vimwiki#vars#get_wikilocal('syntax') - endif - if !exists('g:vimwiki_syntax_variables') || !has_key(g:vimwiki_syntax_variables, syntax) - call vimwiki#vars#populate_syntax_vars(syntax) - endif - - return g:vimwiki_syntax_variables[syntax][a:key] -endfunction - - -" Get a variable for the buffer we are currently in or for the given buffer (number or name). -" Populate the variable, if it doesn't exist. -function! vimwiki#vars#get_bufferlocal(key, ...) - let buffer = a:0 ? a:1 : '%' - - let value = getbufvar(buffer, 'vimwiki_'.a:key, '/\/\') - if type(value) != 1 || value !=# '/\/\' - return value - elseif a:key ==# 'wiki_nr' - call setbufvar(buffer, 'vimwiki_wiki_nr', vimwiki#base#find_wiki(expand('%:p'))) - elseif a:key ==# 'subdir' - call setbufvar(buffer, 'vimwiki_subdir', vimwiki#base#current_subdir()) - elseif a:key ==# 'invsubdir' - let subdir = vimwiki#vars#get_bufferlocal('subdir') - call setbufvar(buffer, 'vimwiki_invsubdir', vimwiki#base#invsubdir(subdir)) - elseif a:key ==# 'existing_wikifiles' - call setbufvar(buffer, 'vimwiki_existing_wikifiles', - \ vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 1)) - elseif a:key ==# 'existing_wikidirs' - call setbufvar(buffer, 'vimwiki_existing_wikidirs', - \ vimwiki#base#get_wiki_directories(vimwiki#vars#get_bufferlocal('wiki_nr'))) - elseif a:key ==# 'prev_link' - call setbufvar(buffer, 'vimwiki_prev_link', []) - elseif a:key ==# 'markdown_refs' - call setbufvar(buffer, 'vimwiki_markdown_refs', vimwiki#markdown_base#scan_reflinks()) - else - echoerr 'Vimwiki Error: unknown buffer variable ' . string(a:key) - endif - - return getbufvar(buffer, 'vimwiki_'.a:key) -endfunction - - -function! vimwiki#vars#set_bufferlocal(key, value, ...) - let buffer = a:0 ? a:1 : '%' - call setbufvar(buffer, 'vimwiki_' . a:key, a:value) -endfunction - - -function! vimwiki#vars#get_global(key) - return g:vimwiki_global_vars[a:key] -endfunction - - -" the second argument can be a wiki number. When absent, the wiki of the currently active buffer is -" used -function! vimwiki#vars#get_wikilocal(key, ...) - if a:0 - return g:vimwiki_wikilocal_vars[a:1][a:key] - else - return g:vimwiki_wikilocal_vars[vimwiki#vars#get_bufferlocal('wiki_nr')][a:key] - endif -endfunction - - -function! vimwiki#vars#get_wikilocal_default(key) - return g:vimwiki_wikilocal_vars[-1][a:key] -endfunction - - -function! vimwiki#vars#set_wikilocal(key, value, wiki_nr) - if a:wiki_nr == len(g:vimwiki_wikilocal_vars) - 1 - call insert(g:vimwiki_wikilocal_vars, {}, -1) - endif - let g:vimwiki_wikilocal_vars[a:wiki_nr][a:key] = a:value -endfunction - - -function! vimwiki#vars#add_temporary_wiki(settings) - let new_temp_wiki_settings = copy(g:vimwiki_wikilocal_vars[-1]) - for [key, value] in items(a:settings) - let new_temp_wiki_settings[key] = value - endfor - call insert(g:vimwiki_wikilocal_vars, new_temp_wiki_settings, -1) - call s:validate_settings() -endfunction - - -" number of registered wikis + temporary -function! vimwiki#vars#number_of_wikis() - return len(g:vimwiki_wikilocal_vars) - 1 -endfunction - diff --git a/vim/.vim/plugged/vimwiki/doc/screenshot_1.png b/vim/.vim/plugged/vimwiki/doc/screenshot_1.png Binary files differdeleted file mode 100644 index 8c875c2..0000000 --- a/vim/.vim/plugged/vimwiki/doc/screenshot_1.png +++ /dev/null diff --git a/vim/.vim/plugged/vimwiki/doc/screenshot_2.png b/vim/.vim/plugged/vimwiki/doc/screenshot_2.png Binary files differdeleted file mode 100644 index a4a1fc2..0000000 --- a/vim/.vim/plugged/vimwiki/doc/screenshot_2.png +++ /dev/null diff --git a/vim/.vim/plugged/vimwiki/doc/tags b/vim/.vim/plugged/vimwiki/doc/tags deleted file mode 100644 index 612b3a1..0000000 --- a/vim/.vim/plugged/vimwiki/doc/tags +++ /dev/null @@ -1,214 +0,0 @@ -:VWB vimwiki.txt /*:VWB* -:VWS vimwiki.txt /*:VWS* -:Vimwiki2HTML vimwiki.txt /*:Vimwiki2HTML* -:Vimwiki2HTMLBrowse vimwiki.txt /*:Vimwiki2HTMLBrowse* -:VimwikiAll2HTML vimwiki.txt /*:VimwikiAll2HTML* -:VimwikiBacklinks vimwiki.txt /*:VimwikiBacklinks* -:VimwikiCheckLinks vimwiki.txt /*:VimwikiCheckLinks* -:VimwikiDeleteLink vimwiki.txt /*:VimwikiDeleteLink* -:VimwikiDiaryGenerateLinks vimwiki.txt /*:VimwikiDiaryGenerateLinks* -:VimwikiDiaryIndex vimwiki.txt /*:VimwikiDiaryIndex* -:VimwikiDiaryNextDay vimwiki.txt /*:VimwikiDiaryNextDay* -:VimwikiDiaryPrevDay vimwiki.txt /*:VimwikiDiaryPrevDay* -:VimwikiFollowLink vimwiki.txt /*:VimwikiFollowLink* -:VimwikiGenerateLinks vimwiki.txt /*:VimwikiGenerateLinks* -:VimwikiGenerateTags vimwiki.txt /*:VimwikiGenerateTags* -:VimwikiGoBackLink vimwiki.txt /*:VimwikiGoBackLink* -:VimwikiGoto vimwiki.txt /*:VimwikiGoto* -:VimwikiIndex vimwiki.txt /*:VimwikiIndex* -:VimwikiListChangeLevel vimwiki.txt /*:VimwikiListChangeLevel* -:VimwikiMakeDiaryNote vimwiki.txt /*:VimwikiMakeDiaryNote* -:VimwikiMakeTomorrowDiaryNote vimwiki.txt /*:VimwikiMakeTomorrowDiaryNote* -:VimwikiMakeYesterdayDiaryNote vimwiki.txt /*:VimwikiMakeYesterdayDiaryNote* -:VimwikiNextLink vimwiki.txt /*:VimwikiNextLink* -:VimwikiPrevLink vimwiki.txt /*:VimwikiPrevLink* -:VimwikiRebuildTags vimwiki.txt /*:VimwikiRebuildTags* -:VimwikiRenameLink vimwiki.txt /*:VimwikiRenameLink* -:VimwikiSearch vimwiki.txt /*:VimwikiSearch* -:VimwikiSearchTags vimwiki.txt /*:VimwikiSearchTags* -:VimwikiSplitLink vimwiki.txt /*:VimwikiSplitLink* -:VimwikiTOC vimwiki.txt /*:VimwikiTOC* -:VimwikiTabIndex vimwiki.txt /*:VimwikiTabIndex* -:VimwikiTabMakeDiaryNote vimwiki.txt /*:VimwikiTabMakeDiaryNote* -:VimwikiTable vimwiki.txt /*:VimwikiTable* -:VimwikiTableMoveColumnLeft vimwiki.txt /*:VimwikiTableMoveColumnLeft* -:VimwikiTableMoveColumnRight vimwiki.txt /*:VimwikiTableMoveColumnRight* -:VimwikiTabnewLink vimwiki.txt /*:VimwikiTabnewLink* -:VimwikiToggleListItem vimwiki.txt /*:VimwikiToggleListItem* -:VimwikiToggleRejectedListItem vimwiki.txt /*:VimwikiToggleRejectedListItem* -:VimwikiUISelect vimwiki.txt /*:VimwikiUISelect* -:VimwikiVSplitLink vimwiki.txt /*:VimwikiVSplitLink* -VimwikiLinkConverter vimwiki.txt /*VimwikiLinkConverter* -VimwikiLinkHandler vimwiki.txt /*VimwikiLinkHandler* -VimwikiWikiIncludeHandler vimwiki.txt /*VimwikiWikiIncludeHandler* -g:vimwiki_CJK_length vimwiki.txt /*g:vimwiki_CJK_length* -g:vimwiki_auto_chdir vimwiki.txt /*g:vimwiki_auto_chdir* -g:vimwiki_autowriteall vimwiki.txt /*g:vimwiki_autowriteall* -g:vimwiki_conceallevel vimwiki.txt /*g:vimwiki_conceallevel* -g:vimwiki_diary_months vimwiki.txt /*g:vimwiki_diary_months* -g:vimwiki_dir_link vimwiki.txt /*g:vimwiki_dir_link* -g:vimwiki_ext2syntax vimwiki.txt /*g:vimwiki_ext2syntax* -g:vimwiki_folding vimwiki.txt /*g:vimwiki_folding* -g:vimwiki_global_ext vimwiki.txt /*g:vimwiki_global_ext* -g:vimwiki_hl_cb_checked vimwiki.txt /*g:vimwiki_hl_cb_checked* -g:vimwiki_hl_headers vimwiki.txt /*g:vimwiki_hl_headers* -g:vimwiki_html_header_numbering vimwiki.txt /*g:vimwiki_html_header_numbering* -g:vimwiki_html_header_numbering_sym vimwiki.txt /*g:vimwiki_html_header_numbering_sym* -g:vimwiki_list vimwiki.txt /*g:vimwiki_list* -g:vimwiki_list_ignore_newline vimwiki.txt /*g:vimwiki_list_ignore_newline* -g:vimwiki_listsym_rejected vimwiki.txt /*g:vimwiki_listsym_rejected* -g:vimwiki_listsyms vimwiki.txt /*g:vimwiki_listsyms* -g:vimwiki_map_prefix vimwiki.txt /*g:vimwiki_map_prefix* -g:vimwiki_menu vimwiki.txt /*g:vimwiki_menu* -g:vimwiki_table_auto_fmt vimwiki.txt /*g:vimwiki_table_auto_fmt* -g:vimwiki_table_mappings vimwiki.txt /*g:vimwiki_table_mappings* -g:vimwiki_text_ignore_newline vimwiki.txt /*g:vimwiki_text_ignore_newline* -g:vimwiki_toc_header vimwiki.txt /*g:vimwiki_toc_header* -g:vimwiki_url_maxsave vimwiki.txt /*g:vimwiki_url_maxsave* -g:vimwiki_use_calendar vimwiki.txt /*g:vimwiki_use_calendar* -g:vimwiki_use_mouse vimwiki.txt /*g:vimwiki_use_mouse* -g:vimwiki_user_htmls vimwiki.txt /*g:vimwiki_user_htmls* -g:vimwiki_valid_html_tags vimwiki.txt /*g:vimwiki_valid_html_tags* -g:vimwiki_w32_dir_enc vimwiki.txt /*g:vimwiki_w32_dir_enc* -vimwiki vimwiki.txt /*vimwiki* -vimwiki-anchors vimwiki.txt /*vimwiki-anchors* -vimwiki-build-tags vimwiki.txt /*vimwiki-build-tags* -vimwiki-calendar vimwiki.txt /*vimwiki-calendar* -vimwiki-changelog vimwiki.txt /*vimwiki-changelog* -vimwiki-commands vimwiki.txt /*vimwiki-commands* -vimwiki-contributing vimwiki.txt /*vimwiki-contributing* -vimwiki-date vimwiki.txt /*vimwiki-date* -vimwiki-development vimwiki.txt /*vimwiki-development* -vimwiki-diary vimwiki.txt /*vimwiki-diary* -vimwiki-folding vimwiki.txt /*vimwiki-folding* -vimwiki-follow_link vimwiki.txt /*vimwiki-follow_link* -vimwiki-functions vimwiki.txt /*vimwiki-functions* -vimwiki-global-commands vimwiki.txt /*vimwiki-global-commands* -vimwiki-global-mappings vimwiki.txt /*vimwiki-global-mappings* -vimwiki-global-options vimwiki.txt /*vimwiki-global-options* -vimwiki-help vimwiki.txt /*vimwiki-help* -vimwiki-intro vimwiki.txt /*vimwiki-intro* -vimwiki-license vimwiki.txt /*vimwiki-license* -vimwiki-list-manipulation vimwiki.txt /*vimwiki-list-manipulation* -vimwiki-list-mappings vimwiki.txt /*vimwiki-list-mappings* -vimwiki-lists vimwiki.txt /*vimwiki-lists* -vimwiki-local-commands vimwiki.txt /*vimwiki-local-commands* -vimwiki-local-mappings vimwiki.txt /*vimwiki-local-mappings* -vimwiki-local-options vimwiki.txt /*vimwiki-local-options* -vimwiki-mappings vimwiki.txt /*vimwiki-mappings* -vimwiki-nohtml vimwiki.txt /*vimwiki-nohtml* -vimwiki-option-auto_export vimwiki.txt /*vimwiki-option-auto_export* -vimwiki-option-auto_tags vimwiki.txt /*vimwiki-option-auto_tags* -vimwiki-option-auto_toc vimwiki.txt /*vimwiki-option-auto_toc* -vimwiki-option-automatic_nested_syntaxes vimwiki.txt /*vimwiki-option-automatic_nested_syntaxes* -vimwiki-option-css_name vimwiki.txt /*vimwiki-option-css_name* -vimwiki-option-custom_wiki2html vimwiki.txt /*vimwiki-option-custom_wiki2html* -vimwiki-option-diary_header vimwiki.txt /*vimwiki-option-diary_header* -vimwiki-option-diary_index vimwiki.txt /*vimwiki-option-diary_index* -vimwiki-option-diary_rel_path vimwiki.txt /*vimwiki-option-diary_rel_path* -vimwiki-option-diary_sort vimwiki.txt /*vimwiki-option-diary_sort* -vimwiki-option-ext vimwiki.txt /*vimwiki-option-ext* -vimwiki-option-index vimwiki.txt /*vimwiki-option-index* -vimwiki-option-list_margin vimwiki.txt /*vimwiki-option-list_margin* -vimwiki-option-maxhi vimwiki.txt /*vimwiki-option-maxhi* -vimwiki-option-nested_syntaxes vimwiki.txt /*vimwiki-option-nested_syntaxes* -vimwiki-option-path vimwiki.txt /*vimwiki-option-path* -vimwiki-option-path_html vimwiki.txt /*vimwiki-option-path_html* -vimwiki-option-syntax vimwiki.txt /*vimwiki-option-syntax* -vimwiki-option-template_default vimwiki.txt /*vimwiki-option-template_default* -vimwiki-option-template_ext vimwiki.txt /*vimwiki-option-template_ext* -vimwiki-option-template_path vimwiki.txt /*vimwiki-option-template_path* -vimwiki-options vimwiki.txt /*vimwiki-options* -vimwiki-placeholders vimwiki.txt /*vimwiki-placeholders* -vimwiki-prerequisites vimwiki.txt /*vimwiki-prerequisites* -vimwiki-register-extension vimwiki.txt /*vimwiki-register-extension* -vimwiki-register-wiki vimwiki.txt /*vimwiki-register-wiki* -vimwiki-syntax vimwiki.txt /*vimwiki-syntax* -vimwiki-syntax-blockquotes vimwiki.txt /*vimwiki-syntax-blockquotes* -vimwiki-syntax-comments vimwiki.txt /*vimwiki-syntax-comments* -vimwiki-syntax-headers vimwiki.txt /*vimwiki-syntax-headers* -vimwiki-syntax-hr vimwiki.txt /*vimwiki-syntax-hr* -vimwiki-syntax-links vimwiki.txt /*vimwiki-syntax-links* -vimwiki-syntax-lists vimwiki.txt /*vimwiki-syntax-lists* -vimwiki-syntax-math vimwiki.txt /*vimwiki-syntax-math* -vimwiki-syntax-paragraphs vimwiki.txt /*vimwiki-syntax-paragraphs* -vimwiki-syntax-preformatted vimwiki.txt /*vimwiki-syntax-preformatted* -vimwiki-syntax-tables vimwiki.txt /*vimwiki-syntax-tables* -vimwiki-syntax-tags vimwiki.txt /*vimwiki-syntax-tags* -vimwiki-syntax-typefaces vimwiki.txt /*vimwiki-syntax-typefaces* -vimwiki-table-mappings vimwiki.txt /*vimwiki-table-mappings* -vimwiki-table-of-contents vimwiki.txt /*vimwiki-table-of-contents* -vimwiki-tables vimwiki.txt /*vimwiki-tables* -vimwiki-tagbar vimwiki.txt /*vimwiki-tagbar* -vimwiki-template vimwiki.txt /*vimwiki-template* -vimwiki-temporary-wiki vimwiki.txt /*vimwiki-temporary-wiki* -vimwiki-text-objects vimwiki.txt /*vimwiki-text-objects* -vimwiki-title vimwiki.txt /*vimwiki-title* -vimwiki-toc vimwiki.txt /*vimwiki-toc* -vimwiki-todo-lists vimwiki.txt /*vimwiki-todo-lists* -vimwiki.txt vimwiki.txt /*vimwiki.txt* -vimwiki_+ vimwiki.txt /*vimwiki_+* -vimwiki_- vimwiki.txt /*vimwiki_-* -vimwiki_<A-Left> vimwiki.txt /*vimwiki_<A-Left>* -vimwiki_<A-Right> vimwiki.txt /*vimwiki_<A-Right>* -vimwiki_<Backspace> vimwiki.txt /*vimwiki_<Backspace>* -vimwiki_<C-CR> vimwiki.txt /*vimwiki_<C-CR>* -vimwiki_<C-Down> vimwiki.txt /*vimwiki_<C-Down>* -vimwiki_<C-S-CR> vimwiki.txt /*vimwiki_<C-S-CR>* -vimwiki_<C-Space> vimwiki.txt /*vimwiki_<C-Space>* -vimwiki_<C-Up> vimwiki.txt /*vimwiki_<C-Up>* -vimwiki_<CR> vimwiki.txt /*vimwiki_<CR>* -vimwiki_<D-CR> vimwiki.txt /*vimwiki_<D-CR>* -vimwiki_<Leader>w<Leader>i vimwiki.txt /*vimwiki_<Leader>w<Leader>i* -vimwiki_<Leader>wd vimwiki.txt /*vimwiki_<Leader>wd* -vimwiki_<Leader>wh vimwiki.txt /*vimwiki_<Leader>wh* -vimwiki_<Leader>whh vimwiki.txt /*vimwiki_<Leader>whh* -vimwiki_<Leader>wr vimwiki.txt /*vimwiki_<Leader>wr* -vimwiki_<S-CR> vimwiki.txt /*vimwiki_<S-CR>* -vimwiki_<S-Tab> vimwiki.txt /*vimwiki_<S-Tab>* -vimwiki_<Tab> vimwiki.txt /*vimwiki_<Tab>* -vimwiki_= vimwiki.txt /*vimwiki_=* -vimwiki_[= vimwiki.txt /*vimwiki_[=* -vimwiki_[[ vimwiki.txt /*vimwiki_[[* -vimwiki_[u vimwiki.txt /*vimwiki_[u* -vimwiki_]= vimwiki.txt /*vimwiki_]=* -vimwiki_]] vimwiki.txt /*vimwiki_]]* -vimwiki_]u vimwiki.txt /*vimwiki_]u* -vimwiki_gL# vimwiki.txt /*vimwiki_gL#* -vimwiki_gL- vimwiki.txt /*vimwiki_gL-* -vimwiki_gL1 vimwiki.txt /*vimwiki_gL1* -vimwiki_gL<Space> vimwiki.txt /*vimwiki_gL<Space>* -vimwiki_gLA vimwiki.txt /*vimwiki_gLA* -vimwiki_gLI vimwiki.txt /*vimwiki_gLI* -vimwiki_gLa vimwiki.txt /*vimwiki_gLa* -vimwiki_gLh vimwiki.txt /*vimwiki_gLh* -vimwiki_gLi vimwiki.txt /*vimwiki_gLi* -vimwiki_gLl vimwiki.txt /*vimwiki_gLl* -vimwiki_gLr vimwiki.txt /*vimwiki_gLr* -vimwiki_gLstar vimwiki.txt /*vimwiki_gLstar* -vimwiki_gl# vimwiki.txt /*vimwiki_gl#* -vimwiki_gl- vimwiki.txt /*vimwiki_gl-* -vimwiki_gl1 vimwiki.txt /*vimwiki_gl1* -vimwiki_gl<Space> vimwiki.txt /*vimwiki_gl<Space>* -vimwiki_glA vimwiki.txt /*vimwiki_glA* -vimwiki_glI vimwiki.txt /*vimwiki_glI* -vimwiki_gla vimwiki.txt /*vimwiki_gla* -vimwiki_glh vimwiki.txt /*vimwiki_glh* -vimwiki_gli vimwiki.txt /*vimwiki_gli* -vimwiki_gll vimwiki.txt /*vimwiki_gll* -vimwiki_gln vimwiki.txt /*vimwiki_gln* -vimwiki_glp vimwiki.txt /*vimwiki_glp* -vimwiki_glr vimwiki.txt /*vimwiki_glr* -vimwiki_glstar vimwiki.txt /*vimwiki_glstar* -vimwiki_glx vimwiki.txt /*vimwiki_glx* -vimwiki_gqq vimwiki.txt /*vimwiki_gqq* -vimwiki_gww vimwiki.txt /*vimwiki_gww* -vimwiki_i_<C-D> vimwiki.txt /*vimwiki_i_<C-D>* -vimwiki_i_<C-L>_<C-J> vimwiki.txt /*vimwiki_i_<C-L>_<C-J>* -vimwiki_i_<C-L>_<C-K> vimwiki.txt /*vimwiki_i_<C-L>_<C-K>* -vimwiki_i_<C-L>_<C-M> vimwiki.txt /*vimwiki_i_<C-L>_<C-M>* -vimwiki_i_<C-T> vimwiki.txt /*vimwiki_i_<C-T>* -vimwiki_i_<CR> vimwiki.txt /*vimwiki_i_<CR>* -vimwiki_i_<CR>_table vimwiki.txt /*vimwiki_i_<CR>_table* -vimwiki_i_<S-CR> vimwiki.txt /*vimwiki_i_<S-CR>* -vimwiki_i_<Tab>_table vimwiki.txt /*vimwiki_i_<Tab>_table* diff --git a/vim/.vim/plugged/vimwiki/doc/vimwiki.txt b/vim/.vim/plugged/vimwiki/doc/vimwiki.txt deleted file mode 100644 index 835036e..0000000 --- a/vim/.vim/plugged/vimwiki/doc/vimwiki.txt +++ /dev/null @@ -1,3238 +0,0 @@ -*vimwiki.txt* A Personal Wiki for Vim - - __ __ ___ __ __ _ _ ___ ___ _ ___ ~ - | | | || | | |_| || | _ | || | | | | || | ~ - | |_| || | | || || || || | | |_| || | ~ - | || | | || || | | _|| | ~ - | || | | || || | | |_ | | ~ - | | | | | ||_|| || _ || | | _ || | ~ - |___| |___| |_| |_||__| |__||___| |___| |_||___| ~ - - - Version: 2.3 - -============================================================================== -CONTENTS *vimwiki* - - 1. Intro |vimwiki-intro| - 2. Prerequisites |vimwiki-prerequisites| - 3. Mappings |vimwiki-mappings| - 3.1. Global mappings |vimwiki-global-mappings| - 3.2. Local mappings |vimwiki-local-mappings| - 3.3. Text objects |vimwiki-text-objects| - 4. Commands |vimwiki-commands| - 4.1. Global commands |vimwiki-global-commands| - 4.2. Local commands |vimwiki-local-commands| - 5. Wiki syntax |vimwiki-syntax| - 5.1. Typefaces |vimwiki-syntax-typefaces| - 5.2. Links |vimwiki-syntax-links| - 5.3. Headers |vimwiki-syntax-headers| - 5.4. Paragraphs |vimwiki-syntax-paragraphs| - 5.5. Lists |vimwiki-syntax-lists| - 5.6. Tables |vimwiki-syntax-tables| - 5.7. Preformatted text |vimwiki-syntax-preformatted| - 5.8. Mathematical formulae |vimwiki-syntax-math| - 5.9. Blockquotes |vimwiki-syntax-blockquotes| - 5.10. Comments |vimwiki-syntax-comments| - 5.11. Horizontal line |vimwiki-syntax-hr| - 5.12. Tags |vimwiki-syntax-tags| - 6. Folding/Outline |vimwiki-folding| - 7. Placeholders |vimwiki-placeholders| - 8. Lists |vimwiki-lists| - 9. Tables |vimwiki-tables| - 10. Diary |vimwiki-diary| - 11. Anchors |vimwiki-anchors| - 12. Options |vimwiki-options| - 12.1. Registered Wiki |vimwiki-register-wiki| - 12.2. Temporary Wiki |vimwiki-temporary-wiki| - 12.3. Per-Wiki Options |vimwiki-local-options| - 12.4. Global Options |vimwiki-global-options| - 13. Getting help |vimwiki-help| - 14. Contributing & Bug reports |vimwiki-contributing| - 15. Development |vimwiki-development| - 16. Changelog |vimwiki-changelog| - 17. License |vimwiki-license| - - -============================================================================== -1. Intro *vimwiki-intro* - -Vimwiki is a personal wiki for Vim -- a number of linked text files that have -their own syntax highlighting. - -With Vimwiki you can: - - organize notes and ideas - - manage todo-lists - - write documentation - - maintain a diary - - export everything to HTML - -To do a quick start press <Leader>ww (this is usually \ww) to go to your index -wiki file. By default it is located in ~/vimwiki/index.wiki - -Feed it with the following example: - -= My knowledge base = - * Tasks -- things to be done _yesterday_!!! - * Project Gutenberg -- good books are power. - * Scratchpad -- various temporary stuff. - -Place your cursor on 'Tasks' and press Enter to create a link. Once pressed, -'Tasks' will become '[[Tasks]]' -- a Vimwiki link. Press Enter again to -open it. Edit the file, save it, and then press Backspace to jump back to -your index. - -A Vimwiki link can be constructed from more than one word. Just visually -select the words to be linked and press Enter. Try it with 'Project -Gutenberg'. The result should look something like: - -= My knowledge base = - * [[Tasks]] -- things to be done _yesterday_!!! - * [[Project Gutenberg]] -- good books are power. - * Scratchpad -- various temporary stuff. - -============================================================================== -2. Prerequisites *vimwiki-prerequisites* - -Make sure you have these settings in your vimrc file: > - set nocompatible - filetype plugin on - syntax on - -Without them Vimwiki will not work properly. - - -============================================================================== -3. Mappings *vimwiki-mappings* - -There are global and local mappings in Vimwiki. - ------------------------------------------------------------------------------- -3.1. Global mappings *vimwiki-global-mappings* - -[count]<Leader>ww or <Plug>VimwikiIndex - Open index file of the [count]'s wiki. - - <Leader>ww opens the first wiki from |g:vimwiki_list|. - 1<Leader>ww as above, opens the first wiki from |g:vimwiki_list|. - 2<Leader>ww opens the second wiki from |g:vimwiki_list|. - 3<Leader>ww opens the third wiki from |g:vimwiki_list|. - etc. - To remap: > - :nmap <Leader>w <Plug>VimwikiIndex -< -See also |:VimwikiIndex| - - -[count]<Leader>wt or <Plug>VimwikiTabIndex - Open index file of the [count]'s wiki in a new tab. - - <Leader>wt tabopens the first wiki from |g:vimwiki_list|. - 1<Leader>wt as above tabopens the first wiki from |g:vimwiki_list|. - 2<Leader>wt tabopens the second wiki from |g:vimwiki_list|. - 3<Leader>wt tabopens the third wiki from |g:vimwiki_list|. - etc. - To remap: > - :nmap <Leader>t <Plug>VimwikiTabIndex -< -See also |:VimwikiTabIndex| - - -<Leader>ws or <Plug>VimwikiUISelect - List and select available wikis. - To remap: > - :nmap <Leader>wq <Plug>VimwikiUISelect -< -See also |:VimwikiUISelect| - - -[count]<Leader>wi or <Plug>VimwikiDiaryIndex - Open diary index file of the [count]'s wiki. - - <Leader>wi opens diary index file of the first wiki from - |g:vimwiki_list|. - 1<Leader>wi the same as above. - 2<Leader>wi opens diary index file of the second wiki from - |g:vimwiki_list|. - etc. - To remap: > - :nmap <Leader>i <Plug>VimwikiDiaryIndex - -See also |:VimwikiDiaryIndex| - - -[count]<Leader>w<Leader>w or <Plug>VimwikiMakeDiaryNote - Open diary wiki-file for today of the [count]'s wiki. - - <Leader>w<Leader>w opens diary wiki-file for today in the first wiki - from |g:vimwiki_list|. - 1<Leader>w<Leader>w as above opens diary wiki-file for today in the - first wiki from |g:vimwiki_list|. - 2<Leader>w<Leader>w opens diary wiki-file for today in the second wiki - from |g:vimwiki_list|. - 3<Leader>w<Leader>w opens diary wiki-file for today in the third wiki - from |g:vimwiki_list|. - etc. - To remap: > - :nmap <Leader>d <Plug>VimwikiMakeDiaryNote -< -See also |:VimwikiMakeDiaryNote| - - -[count]<Leader>w<Leader>t or <Plug>VimwikiTabMakeDiaryNote - Open diary wiki-file for today of the [count]'s wiki in a new tab. - - <Leader>w<Leader>t tabopens diary wiki-file for today in the first - wiki from |g:vimwiki_list|. - 1<Leader>w<Leader>t as above tabopens diary wiki-file for today in the - first wiki from |g:vimwiki_list|. - 2<Leader>w<Leader>t tabopens diary wiki-file for today in the second - wiki from |g:vimwiki_list|. - 3<Leader>w<Leader>t tabopens diary wiki-file for today in the third - wiki from |g:vimwiki_list|. - etc. - To remap: > - :nmap <Leader>dt <Plug>VimwikiTabMakeDiaryNote -< -See also |:VimwikiTabMakeDiaryNote| - - -[count]<Leader>w<Leader>y or <Plug>VimwikiMakeYesterdayDiaryNote - Open diary wiki-file for yesterday of the [count]'s wiki. - - <Leader>w<Leader>y opens diary wiki-file for yesterday in the first - wiki from |g:vimwiki_list|. - 1<Leader>w<Leader>y as above opens diary wiki-file for yesterday in - the first wiki from |g:vimwiki_list|. - 2<Leader>w<Leader>y opens diary wiki-file for yesterday in the second - wiki from |g:vimwiki_list|. - 3<Leader>w<Leader>y opens diary wiki-file for yesterday in the third - wiki from |g:vimwiki_list|. - etc. - To remap: > - :nmap <Leader>dy <Plug>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 - -To remap one of these keys, either put it in your .vimrc like this > - :nmap <Leader>wc <Plug>Vimwiki2HTML -or, the better way, put it in a file .vim/ftplugin/vimwiki.vim like this > - :nmap <silent><buffer> <Leader>wc <Plug>Vimwiki2HTML - -The latter has the advantage that the mapping is local to Vimwiki buffers in -every case. - -Also note that some keys work in normal mode as well as in visual mode. If you -remap them using :map, they will also run in operator-pending mode. If you -don't want that, use > - :nmap <Leader>tt <Plug>VimwikiToggleListItem - :vmap <Leader>tt <Plug>VimwikiToggleListItem - - -NORMAL MODE *vimwiki-local-mappings* - *vimwiki_<Leader>wh* -<Leader>wh Convert current wiki page to HTML. - Maps to |:Vimwiki2HTML| - To remap: > - :nmap <Leader>wc <Plug>Vimwiki2HTML -< - *vimwiki_<Leader>whh* -<Leader>whh Convert current wiki page to HTML and open it in the - webbrowser. - Maps to |:Vimwiki2HTMLBrowse| - To remap: > - :nmap <Leader>wcc <Plug>Vimwiki2HTMLBrowse -< - *vimwiki_<Leader>w<Leader>i* -<Leader>w<Leader>i Update diary section (delete old, insert new) - Only works from the diary index. - Maps to |:VimwikiDiaryGenerateLinks| - To remap: > - :nmap <Leader>wcr <Plug>VimwikiDiaryGenerateLinks -< - *vimwiki_<CR>* -<CR> Follow/create wiki link (create target wiki page if - needed). - Maps to |:VimwikiFollowLink|. - To remap: > - :nmap <Leader>wf <Plug>VimwikiFollowLink -< - *vimwiki_<S-CR>* -<S-CR> Split and follow (create target wiki page if needed). - May not work in some terminals. Remapping could help. - Maps to |:VimwikiSplitLink|. - To remap: > - :nmap <Leader>we <Plug>VimwikiSplitLink -< - *vimwiki_<C-CR>* -<C-CR> Vertical split and follow (create target wiki page if - needed). - May not work in some terminals. Remapping could help. - Maps to |:VimwikiVSplitLink|. - To remap: > - :nmap <Leader>wq <Plug>VimwikiVSplitLink -< - *vimwiki_<C-S-CR>* *vimwiki_<D-CR>* -<C-S-CR>, <D-CR> Follow wiki link (create target wiki page if needed), - opening in a new tab. - May not work in some terminals. Remapping could help. - Maps to |:VimwikiTabnewLink|. - To remap: > - :nmap <Leader>wt <Plug>VimwikiTabnewLink -< - *vimwiki_<Backspace>* -<Backspace> Go back to previously visited wiki page. - Maps to |:VimwikiGoBackLink|. - To remap: > - :nmap <Leader>wb <Plug>VimwikiGoBackLink -< - *vimwiki_<Tab>* -<Tab> Find next link in the current page. - Maps to |:VimwikiNextLink|. - To remap: > - :nmap <Leader>wn <Plug>VimwikiNextLink -< - *vimwiki_<S-Tab>* -<S-Tab> Find previous link in the current page. - Maps to |:VimwikiPrevLink|. - To remap: > - :nmap <Leader>wp <Plug>VimwikiPrevLink -< - *vimwiki_<Leader>wd* -<Leader>wd Delete wiki page you are in. - Maps to |:VimwikiDeleteLink|. - To remap: > - :nmap <Leader>dd <Plug>VimwikiDeleteLink -< - *vimwiki_<Leader>wr* -<Leader>wr Rename wiki page you are in. - Maps to |:VimwikiRenameLink|. - To remap: > - :nmap <Leader>rr <Plug>VimwikiRenameLink -< - *vimwiki_=* -= Add header level. Create if needed. - There is nothing to indent with '==' command in - Vimwiki, so it should be ok to use '=' here. - To remap: > - :nmap == <Plug>VimwikiAddHeaderLevel -< - *vimwiki_-* -- Remove header level. - To remap: > - :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_+* -+ Create and/or decorate links. Depending on the - context, this command will: convert words into - wikilinks; convert raw URLs into wikilinks; and add - placeholder description text to wiki- or weblinks that - are missing descriptions. Can be activated in normal - mode with the cursor over a word or link, or in visual - mode with the selected text. - To remap: > - :nmap ++ <Plug>VimwikiNormalizeLink - :vmap ++ <Plug>VimwikiNormalizeLinkVisual -< - *vimwiki_<C-Space>* -<C-Space> Toggle checkbox of a list item on/off. - Maps to |:VimwikiToggleListItem|. - See |vimwiki-todo-lists|. - To remap: > - :map <Leader>tt <Plug>VimwikiToggleListItem -< - *vimwiki_gl<Space>* *vimwiki_gL<Space>* -gl<Space> Remove checkbox from list item. -gL<Space> Remove checkboxes from all sibling list items. - To remap: > - :map <Leader><Space> <Plug>VimwikiRemoveSingleCB - :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* -gll Increase the level of a list item. -gLl Increase the level of a list item and all child items. - To remap: > - :map >> <Plug>VimwikiIncreaseLvlSingleItem - :map >>> <Plug>VimwikiIncreaseLvlWholeItem -< - *vimwiki_glh* *vimwiki_gLh* -glh Decrease the level of a list item. -gLh Decrease the level of a list item and all child items. - To remap: > - :map << <Plug>VimwikiDecreaseLvlSingleItem - :map <<< <Plug>VimwikiDecreaseLvlWholeItem -< - *vimwiki_glr* *vimwiki_gLr* -glr Renumber list items if the cursor is on a numbered - list item. -gLr Renumber list items in all numbered lists in the whole - file. - Also readjust checkboxes. - To remap: > - :nmap <c-r> <Plug>VimwikiRenumberList - :nmap <c-r> <Plug>VimwikiRenumberAllLists -< - *vimwiki_glstar* *vimwiki_gLstar* -gl* Make a list item out of a normal line or change the - symbol of the current item to *. -gL* Change the symbol of the current list to *. - To remap: > - noremap glo :VimwikiChangeSymbolTo *<CR> - noremap glO :VimwikiChangeSymbolInListTo *<CR> -< - *vimwiki_gl#* *vimwiki_gL#* -gl# Make a list item out of a normal line or change the - symbol of the current item to #. -gL# Change the symbol of the current list to #. - To remap: > - noremap glo :VimwikiChangeSymbolTo #<CR> - noremap glO :VimwikiChangeSymbolInListTo #<CR> -< - *vimwiki_gl-* *vimwiki_gL-* -gl- Make a list item out of a normal line or change the - symbol of the current item to -. -gL- Change the symbol of the current list to -. - To remap: > - noremap glo :VimwikiChangeSymbolTo -<CR> - noremap glO :VimwikiChangeSymbolInListTo -<CR> -< - *vimwiki_gl1* *vimwiki_gL1* -gl1 Make a list item out of a normal line or change the - symbol of the current item to 1., the numbering is - adjusted according to the surrounding list items. -gL1 Change the symbol of the current list to 1. 2. 3. ... - To remap: > - noremap glo :VimwikiChangeSymbolTo 1.<CR> - noremap glO :VimwikiChangeSymbolInListTo 1.<CR> -< - *vimwiki_gla* *vimwiki_gLa* -gla Make a list item out of a normal line or change the - symbol of the current item to a), the numbering is - adjusted according to the surrounding list items. -gLa Change the symbol of the current list to a) b) c) ... - To remap: > - noremap glo :VimwikiChangeSymbolTo a)<CR> - noremap glO :VimwikiChangeSymbolInListTo a)<CR> -< - *vimwiki_glA* *vimwiki_gLA* -glA Make a list item out of a normal line or change the - symbol of the current item to A), the numbering is - adjusted according to the surrounding list items. -gLA Change the symbol of the current list to A) B) C) ... - To remap: > - noremap glo :VimwikiChangeSymbolTo A)<CR> - noremap glO :VimwikiChangeSymbolInListTo A)<CR> -< - *vimwiki_gli* *vimwiki_gLi* -gli Make a list item out of a normal line or change the - symbol of the current item to i), the numbering is - adjusted according to the surrounding list items. -gLi Change the symbol of the current list to - i) ii) iii) ... - To remap: > - noremap glo :VimwikiChangeSymbolTo i)<CR> - noremap glO :VimwikiChangeSymbolInListTo i)<CR> -< - *vimwiki_glI* *vimwiki_gLI* -glI Make a list item out of a normal line or change the - symbol of the current item to I), the numbering is - adjusted according to the surrounding list items. -gLI Change the symbol of the current list to - I) II) III) ... - To remap: > - noremap glo :VimwikiChangeSymbolTo 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* -gqq Format table. If you made some changes to a table - or without swapping insert/normal modes this command -gww will reformat it. - - *vimwiki_<A-Left>* -<A-Left> Move current table column to the left. - See |:VimwikiTableMoveColumnLeft| - To remap: > - :nmap <Leader>wtl <Plug>VimwikiTableMoveColumnLeft -< - *vimwiki_<A-Right>* -<A-Right> Move current table column to the right. - See |:VimwikiTableMoveColumnRight| - To remap: > - :nmap <Leader>wtr <Plug>VimwikiTableMoveColumnRight -< - *vimwiki_<C-Up>* -<C-Up> Open the previous day's diary link if available. - See |:VimwikiDiaryPrevDay| - To remap: > - :nmap <Leader>k <Plug>VimwikiDiaryPrevDay -< - *vimwiki_<C-Down>* -<C-Down> Open the next day's diary link if available. - See |:VimwikiDiaryNextDay| - To remap: > - :nmap <Leader>j <Plug>VimwikiDiaryNextDay -< - -Works only if |g:vimwiki_use_mouse| is set to 1. -<2-LeftMouse> Follow wiki link (create target wiki page if needed). - -<S-2-LeftMouse> Split and follow wiki link (create target wiki page if - needed). - -<C-2-LeftMouse> Vertical split and follow wiki link (create target - wiki page if needed). - -<RightMouse><LeftMouse> Go back to previous wiki page. - -Note: <2-LeftMouse> is just left double click. - - - -INSERT MODE *vimwiki-table-mappings* - *vimwiki_i_<CR>_table* -<CR> Go to the table cell beneath the current one, create - a new row if on the last one. - - *vimwiki_i_<Tab>_table* -<Tab> Go to the next table cell, create a new row if on the - last cell. -See |g:vimwiki_table_mappings| to turn them off. - -INSERT MODE *vimwiki-list-mappings* - *vimwiki_i_<CR>* -<CR> In a list item, insert a new bullet or number in the - next line, numbers are incremented. - In an empty list item, delete the item symbol. This is - useful to end a list, simply press <CR> twice. - See |vimwiki-lists| for details and for how to - configure the behavior. - - *vimwiki_i_<S-CR>* -<S-CR> Does not insert a new list item, useful to create - multilined list items. - See |vimwiki-lists| for details and for how to - configure the behavior. - - *vimwiki_i_<C-T>* -<C-T> Increase the level of a list item. - To remap: > - :imap <C-E> <Plug>VimwikiIncreaseLvlSingleItem -< - *vimwiki_i_<C-D>* -<C-D> Decrease the level of a list item. - To remap: > - :imap <C-E> <Plug>VimwikiDecreaseLvlSingleItem -< - *vimwiki_i_<C-L>_<C-J>* -<C-L><C-J> Change the symbol of the current list item to the next - available. From - to 1. to * to I) to a). - To remap: > - :imap <C-A> <Plug>VimwikiListNextSymbol -< - *vimwiki_i_<C-L>_<C-K>* -<C-L><C-K> Change the symbol of the current list item to the prev - available. From - to a) to I) to * to 1. - To remap: > - :imap <C-S> <Plug>VimwikiListPrevSymbol -< - *vimwiki_i_<C-L>_<C-M>* -<C-L><C-M> Create/remove a symbol from a list item. - To remap: > - :imap <C-K> <Plug>VimwikiListToggle -< - ------------------------------------------------------------------------------- -3.3. Text objects *vimwiki-text-objects* - -ah A header including its content up to the next header. -ih The content under a header (like 'ah', but excluding - the header itself and trailing empty lines). - -aH A header including all of its subheaders. When [count] - 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. -i\ An inner cell in a table. -ac A column in a table. -ic An inner column in a table. - -al A list item plus its children. -il A single list item. - - -============================================================================== -4. Commands *vimwiki-commands* - ------------------------------------------------------------------------------- -4.1. Global Commands *vimwiki-global-commands* - -*:VimwikiIndex* - Open index file of the current wiki. - -*:VimwikiTabIndex* - Open index file of the current wiki in a new tab. - -*:VimwikiUISelect* - Open index file of the selected wiki. - -*:VimwikiDiaryIndex* - Open diary index file of the current wiki. - -*:VimwikiMakeDiaryNote* - Open diary wiki-file for today of the current wiki. - -*:VimwikiTabMakeDiaryNote* - Open diary wiki-file for today of the current wiki in a new tab. - -*:VimwikiMakeYesterdayDiaryNote* - 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* - -These commands are only available (and meaningful) when you are currently in a -Vimwiki file. - -*:VimwikiFollowLink* - Follow wiki link (or create target wiki page if needed). - -*:VimwikiGoBackLink* - Go back to the wiki page you came from. - -*:VimwikiSplitLink* - Split and follow wiki link (create target wiki page if needed). - -*:VimwikiVSplitLink* - Vertical split and follow wiki link (create target wiki page if needed). - -*:VimwikiTabnewLink* - Follow wiki link in a new tab (create target wiki page if needed). - -*:VimwikiNextLink* - Find next link on the current page. - -*:VimwikiPrevLink* - Find previous link on the current page. - -*:VimwikiGoto* - Goto link provided by an argument. For example: > - :VimwikiGoto HelloWorld -< opens/creates HelloWorld wiki page. - - Supports |cmdline-completion| for link name. - -*:VimwikiDeleteLink* - Delete the wiki page you are in. - -*:VimwikiRenameLink* - Rename the wiki page you are in. - -*:Vimwiki2HTML* - Convert current wiki page to HTML using Vimwiki's own converter or a - user-supplied script (see |vimwiki-option-custom_wiki2html|). - -*:Vimwiki2HTMLBrowse* - Convert current wiki page to HTML and open it in the webbrowser. - -*:VimwikiAll2HTML* - Convert all wiki pages to HTML. - Default CSS file (style.css) is created if there is no one. - -*:VimwikiToggleListItem* - Toggle checkbox of a list item on/off. - See |vimwiki-todo-lists|. - -*:VimwikiToggleRejectedListItem* - Toggle checkbox of a list item disabled/off. - See |vimwiki-todo-lists|. - -*:VimwikiListChangeLevel* CMD - Change the nesting level, or symbol, for a single-line list item. - CMD may be ">>" or "<<" to change the indentation of the item, or - one of the syntax-specific bullets: "*", "#", "1.", "-". - See |vimwiki-todo-lists|. - -*:VimwikiSearch* /pattern/ -*:VWS* /pattern/ - Search for /pattern/ in all files of current wiki. - To display all matches use |:lopen| command. - To display next match use |:lnext| command. - To display previous match use |:lprevious| command. - - Hint: this feature is simply a wrapper around |:lvimgrep|. For a - description of how the pattern can look like, see |:vimgrep|. For example, - to do a case insensitive search, use > - :VWS /\cpattern/ - -*:VimwikiBacklinks* -*:VWB* - Search for wikilinks to the current wiki page in all files of current - wiki. - To display all matches use |:lopen| command. - To display next match use |:lnext| command. - To display previous match use |:lprevious| command. - - -*:VimwikiTable* - Create a table with 5 cols and 2 rows. - - :VimwikiTable cols rows - Create a table with the given cols and rows - - :VimwikiTable cols - Create a table with the given cols and 2 rows - - -*:VimwikiTableMoveColumnLeft* , *:VimwikiTableMoveColumnRight* - Move current column to the left or to the right: - Example: > - - | head1 | head2 | head3 | head4 | head5 | - |--------|--------|--------|--------|--------| - | value1 | value2 | value3 | value4 | value5 | - - - Cursor is on 'head1'. - :VimwikiTableMoveColumnRight - - | head2 | head1 | head3 | head4 | head5 | - |--------|--------|--------|--------|--------| - | value2 | value1 | value3 | value4 | value5 | - - Cursor is on 'head3'. - :VimwikiTableMoveColumnLeft - - | head2 | head3 | head1 | head4 | head5 | - |--------|--------|--------|--------|--------| - | value2 | value3 | value1 | value4 | value5 | -< - - Commands are mapped to <A-Left> and <A-Right> respectively. - - -*:VimwikiGenerateLinks* - Insert the links of all available wiki files into the current buffer. - -*:VimwikiDiaryGenerateLinks* - Delete old, insert new diary section into diary index file. - -*:VimwikiDiaryNextDay* - Open next day diary link if available. - Mapped to <C-Down>. - -*:VimwikiDiaryPrevDay* - Open previous day diary link if available. - Mapped to <C-Up>. - -*:VimwikiTOC* - Create or update the Table of Contents for the current wiki file. - See |vimwiki-toc|. - -*:VimwikiCheckLinks* - Search through all wiki files and check if the targets of all wiki links - and links to external files actually exist. Check also if all wiki files - are reachable from the index file. The results are shown in the quickfix - window. - -*:VimwikiRebuildTags* - Rebuilds the tags metadata file for all wiki files newer than the metadata - file. - Necessary for all tags related commands: |vimwiki-syntax-tags|. - - :VimwikiRebuildTags! does the same for all files. - -*:VimwikiSearchTags* - Searches over the pages in current wiki and finds all locations of a given - tag. Supports |cmdline-completion|. - -*:VimwikiGenerateTags* tagname1 tagname2 ... - Creates or updates an overview on all tags of the wiki with links to all - their instances. Supports |cmdline-completion|. If no arguments (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) - - -============================================================================== -5. Wiki syntax *vimwiki-syntax* - - -There are a lot of different wikis out there. Most of them have their own -syntax and Vimwiki is not an exception here. - -Vimwiki has evolved its own syntax that closely resembles Google's wiki -markup. This syntax is described in detail below. - -Vimwiki also supports alternative syntaxes, like Markdown and MediaWiki, to -varying degrees; see |vimwiki-option-syntax|. Static elements like headers, -quotations, and lists are customized in syntax/vimwiki_xxx.vim, where xxx -stands for the chosen syntax. - -Interactive elements such as links and Vimwiki commands are supported by -definitions and routines in syntax/vimwiki_xxx_custom.vim and -autoload/vimwiki/xxx_base.vim. Currently, only Markdown includes this level -of support. - -Vimwiki2HTML is currently functional only for the default syntax. - ------------------------------------------------------------------------------- -5.1. Typefaces *vimwiki-syntax-typefaces* - -There are a few typefaces that give you a bit of control over how your text -is decorated: > - - *bold text* - _italic text_ - ~~strikeout text~~ - `code (no syntax) text` - super^script^ - sub,,script,, - - ------------------------------------------------------------------------------- -5.2. Links *vimwiki-syntax-links* - -Wikilinks~ - -Plain link: > - [[This is a link]] -With description: > - [[This is a link source|Description of the link]] - -Wiki files don't need to be in the root directory of your wiki, you can put -them in subdirectories as well: > - [[projects/Important Project 1]] -To jump from that file back to the index file, use this link: > - [[../index]] -or: > - [[/index]] -The latter works because wiki links starting with "/" are considered to be -absolute to the wiki root directory, that is, the link [[/index]] always opens -the file /path/to/your/wiki/index.wiki, no matter in which subdirectory you -are currently in. - -Links to subdirectories inside the wiki directory are also supported. They -end with a "/": > - [[a subdirectory/|Other files]] -Use |g:vimwiki_dir_link| to control the behavior when opening directories. - -Typing wikilinks can be simplified by using Vim's omni completion (see -|compl-omni|) like so: > - [[ind<C-X><C-O> -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 -identify wikilinks whose targets are not found. - -Interwiki~ - -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: > - [[wiki1:This is a link]] -or: > - [[wiki1:This is a link source|Description of the link]] - -The number behind "wiki" is in the range 0..N-1 and identifies the destination -wiki in |g:vimwiki_list|. - -Diary~ - -The "diary:" scheme is used to link to diary entries: > - [[diary:2012-03-05]] - -Anchors~ - -A wikilink, interwiki link or diary link can be followed by a '#' and the name -of an anchor. When opening a link, the cursor jumps to the anchor. > - [[Todo List#Tomorrow|Tasks for tomorrow]] - -To jump inside the current wiki file you can omit the file: > - [[#Tomorrow]] - -See |vimwiki-anchors| for how to set an anchor. - -Raw URLs~ - -Raw URLs are also supported: > - https://github.com/vimwiki/vimwiki.git - mailto:habamax@gmail.com - ftp://vim.org - -External files~ - -The "file:" and "local:" schemes allow you to directly link to arbitrary -resources using absolute or relative paths: > - [[file:/home/somebody/a/b/c/music.mp3]] - [[file:C:/Users/somebody/d/e/f/music.mp3]] - [[file:~/a/b/c/music.mp3]] - [[file:../assets/data.csv|Important Data]] - [[local:C:/Users/somebody/d/e/f/music.mp3]] - [[file:/home/user/documents/|Link to a directory]] - -These links are opened with the system command, i.e. !xdg-open (Linux), !open -(Mac), or !start (Windows). To customize this behavior, see -|VimwikiLinkHandler|. - -In Vim, "file:" and "local:" behave the same, i.e. you can use them with both -relative and absolute links. When converted to HTML, however, "file:" links -will become absolute links, while "local:" links become relative to the HTML -output directory. The latter can be useful if you copy your HTML files to -another computer. -To customize the HTML conversion of links, see |VimwikiLinkConverter|. - -Transclusion (Wiki-Include) Links~ - -Links that use "{{" and "}}" delimiters signify content that is to be -included into the HTML output, rather than referenced via hyperlink. - -Wiki-include URLs may use any of the supported schemes, may be absolute or -relative, and need not end with an extension. - -The primary purpose for wiki-include links is to include images. - -Transclude from a local URL: > - {{file:../../images/vimwiki_logo.png}} -or from a universal URL: > - {{http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png}} - -Transclude image with alternate text: > - {{http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png|Vimwiki}} -in HTML: > - <img src="http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png" - alt="Vimwiki"/> - -Transclude image with alternate text and some style: > - {{http://.../vimwiki_logo.png|cool stuff|style="width:150px;height:120px;"}} -in HTML: > - <img src="http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png" - alt="cool stuff" style="width:150px; height:120px"/> - -Transclude image _without_ alternate text and with a CSS class: > - {{http://.../vimwiki_logo.png||class="center flow blabla"}} -in HTML: > - <img src="http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png" - alt="" class="center flow blabla"/> - -A trial feature allows you to supply your own handler for wiki-include links. -See |VimwikiWikiIncludeHandler|. - -Thumbnail links~ -> -Thumbnail links are constructed like this: > - [[http://someaddr.com/bigpicture.jpg|{{http://someaddr.com/thumbnail.jpg}}]] - -in HTML: > - <a href="http://someaddr.com/ ... /.jpg"> - <img src="http://../thumbnail.jpg /></a> - -Markdown Links~ - -These links are only available for Markdown syntax. See -http://daringfireball.net/projects/markdown/syntax#link. - -Inline link: > - [Looks like this](URL) - -Image link: > -  - -The URL can be anything recognized by Vimwiki as a raw URL. - - -Reference-style links: > - a) [Link Name][Id] - b) [Id][], using the "implicit link name" shortcut - -Reference style links must always include two consecutive pairs of -[-brackets, and field entries can not use "[" or "]". - - -NOTE: (in Vimwiki's current implementation) Reference-style links are a hybrid -of Vimwiki's default "Wikilink" and the tradition reference-style link. - -If the Id is defined elsewhere in the source, as per the Markdown standard: > - [Id]: URL - -then the URL is opened with the system default handler. Otherwise, Vimwiki -treats the reference-style link as a Wikilink, interpreting the Id field as a -wiki page name. - -Highlighting of existing links when |vimwiki-option-maxhi| is activated -identifies links whose Id field is not defined, either as a reference-link or -as a wiki page. - -To scan the page for new or changed definitions for reference-links, simply -re-open the page ":e<CR>". - ------------------------------------------------------------------------------- -5.3. Headers *vimwiki-syntax-headers* - -= Header level 1 =~ -By default all headers are highlighted using |hl-Title| highlight group. - -== Header level 2 ==~ -You can set up different colors for each header level: > - :hi VimwikiHeader1 guifg=#FF0000 - :hi VimwikiHeader2 guifg=#00FF00 - :hi VimwikiHeader3 guifg=#0000FF - :hi VimwikiHeader4 guifg=#FF00FF - :hi VimwikiHeader5 guifg=#00FFFF - :hi VimwikiHeader6 guifg=#FFFF00 -Set up colors for all 6 header levels or none at all. - -=== Header level 3 ===~ -==== Header level 4 ====~ -===== Header level 5 =====~ -====== Header level 6 ======~ - - -You can center your headers in HTML by placing spaces before the first '=': - = Centered Header L1 =~ - - ------------------------------------------------------------------------------- -5.4. Paragraphs *vimwiki-syntax-paragraphs* - -A paragraph is a group of lines starting in column 1 (no indentation). -Paragraphs are separated by a blank line: - -This is first paragraph -with two lines. - -This is a second paragraph with -two lines. - - ------------------------------------------------------------------------------- -5.5. Lists *vimwiki-syntax-lists* - -Unordered lists: > - - Bulleted list item 1 - - Bulleted list item 2 -or: > - * Bulleted list item 1 - * Bulleted list item 2 - - -Ordered lists: > - 1. Numbered list item 1 - 2. Numbered list item 2 - 3. Numbered list item 3 -or: > - 1) Numbered list item 1 - 2) Numbered list item 2 - 3) Numbered list item 3 -or: > - a) Numbered list item 1 - b) Numbered list item 2 - c) Numbered list item 3 -or: > - A) Numbered list item 1 - B) Numbered list item 2 - C) Numbered list item 3 -or: > - i) Numbered list item 1 - ii) Numbered list item 2 - iii) Numbered list item 3 -or: > - I) Numbered list item 1 - II) Numbered list item 2 - III) Numbered list item 3 -or: > - # Bulleted list item 1 - # the # become numbers when converted to HTML - -Note that a space after the list item symbols (-, *, 1. etc.) is essential. - -You can nest and mix the various types: > - - Bulleted list item 1 - - Bulleted list item 2 - a) Numbered list sub item 1 - b) more ... - * and more ... - * ... - c) Numbered list sub item 3 - 1. Numbered list sub sub item 1 - 2. Numbered list sub sub item 2 - d) etc. - - Bulleted list item 3 - -List items can span multiple lines: > - * Item 1 - Item 1 continued line. - Item 1 next continued line. - * Item 2 - - Sub item 1 - Sub item 1 continued line. - Sub item 1 next continued line. - - Sub item 2 - - etc. - Continuation of Item 2 - Next continuation of Item 2 - - -Definition lists: > - Term 1:: Definition 1 - Term 2:: - :: Definition 2 - :: Definition 3 - - ------------------------------------------------------------------------------- -5.6. Tables *vimwiki-syntax-tables* - -Tables are created by entering the content of each cell separated by | -delimiters. You can insert other inline wiki syntax in table cells, including -typeface formatting and links. -For example: > - - | Year | Temperature (low) | Temperature (high) | - |------|-------------------|--------------------| - | 1900 | -10 | 25 | - | 1910 | -15 | 30 | - | 1920 | -10 | 32 | - | 1930 | _N/A_ | _N/A_ | - | 1940 | -2 | 40 | -> - -In HTML the following part > - | Year | Temperature (low) | Temperature (high) | - |------|-------------------|--------------------| -> -is highlighted as a table header. - -If you indent a table then it will be centered in HTML. - -If you put > in a cell, the cell spans the left column. -If you put \/ in a cell, the cell spans the above row. -For example: > - - | a | b | c | d | - | \/ | e | > | f | - | \/ | \/ | > | g | - | h | > | > | > | -> - -See |vimwiki-tables| for more details on how to manage tables. - - ------------------------------------------------------------------------------- -5.7. Preformatted text *vimwiki-syntax-preformatted* - -Use {{{ and }}} to define a block of preformatted text: -{{{ > - Tyger! Tyger! burning bright - In the forests of the night, - What immortal hand or eye - Could frame thy fearful symmetry? - In what distant deeps or skies - Burnt the fire of thine eyes? - On what wings dare he aspire? - What the hand dare sieze the fire? -}}} - - -You can add optional information after the {{{: > -{{{class="brush: python" > - def hello(world): - for x in range(10): - print("Hello {0} number {1}".format(world, x)) -}}} - -Result of HTML export: > - <pre class="brush: python"> - def hello(world): - for x in range(10): - print("Hello {0} number {1}".format(world, x)) - </pre> - -This might be useful for coloring program code with external JS tools -such as Google's syntax highlighter. - -You can setup Vimwiki to highlight code snippets in preformatted text. -See |vimwiki-option-nested_syntaxes| and -|vimwiki-option-automatic_nested_syntaxes|. - - ------------------------------------------------------------------------------- -5.8. Mathematical formulae *vimwiki-syntax-math* - -Mathematical formulae are highlighted, and can be rendered in HTML using the -powerful open source display engine MathJax (http://www.mathjax.org/). - -There are three supported syntaxes, which are inline, block display and -block environment. - -Inline math is for short formulae within text. It is enclosed by single -dollar signs, e.g.: - $ \sum_i a_i^2 = 1 $ - -Block display creates a centered formula with some spacing before and after -it. It must start with a line including only {{$, then an arbitrary number -of mathematical text are allowed, and it must end with a line including only -}}$. -E.g.: - {{$ - \sum_i a_i^2 - = - 1 - }}$ - -Note: no matter how many lines are used in the text file, the HTML will -compress it to one line only. - -Block environment is similar to block display, but is able to use specific -LaTeX environments, such as 'align'. The syntax is the same as for block -display, except for the first line which is {{$%environment%. -E.g.: - {{$%align% - \sum_i a_i^2 &= 1 + 1 \\ - &= 2. - }}$ - -Similar compression rules for the HTML page hold (as MathJax interprets the -LaTeX code). - -Note: the highlighting in Vim is automatic. For the rendering in HTML, you -have two alternative options: - -1. installing MathJax locally (Recommended: 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> - -where <mathjax_folder> is the folder on your HD, as a relative path to the -template folder. For instance, a sensible folder structure could be: - -- wiki - - text - - html - - templates - - mathjax - -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* - -Text which starts with 4 or more spaces is a blockquote. - - This would be a blockquote in Vimwiki. It is not highlighted in Vim but - could be styled by CSS in HTML. Blockquotes are usually used to quote a - long piece of text from another source. - - ------------------------------------------------------------------------------- -5.10. Comments *vimwiki-syntax-comments* - -A line that starts with %% is a comment. -E.g.: > - %% this text would not be in HTML -< - ------------------------------------------------------------------------------- -5.11. Horizontal line *vimwiki-syntax-hr* - -4 or more dashes at the start of the line is a horizontal line (<hr />): > - ---- -< - ------------------------------------------------------------------------------- -5.12. Tags *vimwiki-syntax-tags* - -You can tag a wiki file, a header or an arbitrary place in a wiki file. Then, -you can use Vim's built-in tag search functionality (see |tagsrch.txt|) or -Vimwiki's tag related commands to quickly jump to all occurrences of the tag. - -A tag is a sequence of non-space characters between two colons: > - :tag-example: -< -It is allowed to concatenate multiple tags in one line: > - :tag-one:tag-two: -< -If placed in the first two lines of a file, the whole file is tagged. If -placed under a header, within the 2 lines below it, the header is then tagged -with this tag, and the tag search commands will jump to this specific header. -Otherwise, the tag stands of its own and the search command jumps directly to -it. - -Typing tags can be simplified by using Vim's omni completion (see -|compl-omni|) like so: > - :ind<C-X><C-O> -which opens up a popup menu with all tags defined in the wiki starting with -"ind". - -Tags are also treated as |vimwiki-anchors| (similar to bold text). - - *vimwiki-build-tags* -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, -the tags metadata will be auto-updated on each page save. - - -Tags-related commands and options: - * |:VimwikiRebuildTags| - * |:VimwikiGenerateTags| - * |:VimwikiSearchTags| - * |vimwiki-option-auto_tags| - - -============================================================================== -6. Folding/Outline *vimwiki-folding* - -Vimwiki can fold or outline sections using headers and preformatted blocks. -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': - -= My current task = -* [ ] Do stuff 1 - * [ ] Do substuff 1.1 - * [ ] Do substuff 1.2 - * [ ] Do substuff 1.2.1 - * [ ] Do substuff 1.2.2 - * [ ] Do substuff 1.3 -* [ ] Do stuff 2 -* [ ] Do stuff 3 - -Hit |zM| : -= My current task = -* [ ] Do stuff 1 [6] --------------------------------------~ -* [ ] Do stuff 2 -* [ ] Do stuff 3 - -Hit |zr| : -= My current task = -* [ ] Do stuff 1 - * [ ] Do substuff 1.1 - * [ ] Do substuff 1.2 [3] -------------------------------~ - * [ ] Do substuff 1.3 -* [ ] Do stuff 2 -* [ ] Do stuff 3 - -Hit |zr| one more time : -= My current task = -* [ ] Do stuff 1 - * [ ] Do substuff 1.1 - * [ ] Do substuff 1.2 - * [ ] Do substuff 1.2.1 - * [ ] Do substuff 1.2.2 - * [ ] Do substuff 1.3 -* [ ] Do stuff 2 -* [ ] Do stuff 3 - -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'. -For Markdown and MediaWiki syntax, * or # should be in the first column. - -To turn folding on/off check |g:vimwiki_folding|. - - -============================================================================== -7. Placeholders *vimwiki-placeholders* - ------------------------------------------------------------------------------- -%title Title of the page *vimwiki-title* - -When you htmlize your wiki page, the default title is the filename of the -page. Place > - -%title My books - -into your wiki page if you want another title. - - ------------------------------------------------------------------------------- -%nohtml *vimwiki-nohtml* - -If you do not want a wiki page to be converted to HTML, place: - -%nohtml - -into it. - - ------------------------------------------------------------------------------- -%template *vimwiki-template* - -To apply a concrete HTML template to a wiki page, place: - -%template name - -into it. - -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* - -While writing lists, the keys <CR>, o and O insert new bullets or numbers as -you would expect it. A new bullet/number is inserted if and only if the cursor -is in a list item. To make a list item with more than one line, press <S-CR> -or press <CR> and <C-L><C-M>. -Note that the mapping <S-CR> is not available in all terminals. - -Furthermore, <CR> and <S-CR> behave differently when the cursor is behind an -empty list item. See the table below. - -You can configure the behavior of <CR> and of <S-CR> like this: > - inoremap <CR> <Esc>:VimwikiReturn 1 5<CR> - inoremap <S-CR> <Esc>:VimwikiReturn 2 2<CR> - -The first argument of the command :VimwikiReturn is a number that specifies -when to insert a new bullet/number and when not, depending on whether the -cursor is in a list item or in a normal line: > - - Number │ Before │ After - ====================================== - 1 │ 1. item| │ 1. item - │ │ 2. | - │–––––––––––––––––––––––––––––– ← default for <CR> - │ 1. item │ 1. item - │ continue| │ continue - │ │ | - ====================================== - 2 │ 1. item| │ 1. item - │ │ | - │–––––––––––––––––––––––––––––– ← default for <S-CR> - │ 1. item │ 1. item - │ continue| │ continue - │ │ 2. | - ====================================== - 3 │ 1. item| │ 1. item - │ │ 2. | - │–––––––––––––––––––––––––––––– - │ 1. item │ 1. item - │ continue| │ continue - │ │ 2. | - ====================================== - 4 │ 1. item| │ 1. item - │ │ | - │–––––––––––––––––––––––––––––– - │ 1. item │ 1. item - │ continue| │ continue - │ │ | -< - -The second argument is a number that specifies what should happen when you -press <CR> or <S-CR> behind an empty list item. There are no less than five -possibilities: -> - Number │ Before │ After - ====================================== - 1 │ 1. | │ 1. - │ │ 2. | - ====================================== - 2 │ 1. | │ ← default for <S-CR> - │ │ 1. | - ====================================== - 3 │ 1. | │ | - │ │ - ====================================== - 4 │ 1. | │ - │ │ | - ====================================== - 5 │ 1. | │ 1. | - │ │ - │–––––––––––––––––––––––––––––– ← default for <CR> - │ 1. | │ | - │ │ -< - - - *vimwiki-list-manipulation* -The level of a list item is determined by its indentation (default and -Markdown syntax) or by the number of list symbols (MediaWiki syntax). - -Use gll and glh in normal mode to increase or decrease the level of a list -item. The symbols are adjusted automatically to the list items around it. -Use gLl and gLh to increase or decrease the level of a list item plus all -list items of lower level below it, that is, all child items. - -Use <C-T> and <C-D> to change the level of a list item in insert mode. - -See |vimwiki_gll|, |vimwiki_gLl|, |vimwiki_glh|, |vimwiki_gLh|, -|vimwiki_i_<C-T>|, |vimwiki_i_<C-D>| - - -Use gl followed by the desired symbol to change the symbol of a list item or -create one. Type gL and the symbol to change all items of the current list. -For default syntax, the following types are available: > - - hyphen - * asterisk - # hash - 1. number with period - 1) number with parenthesis - a) lower-case letter with parenthesis - A) upper-case letter with parenthesis - i) lower-case Roman numerals with parenthesis - I) upper-case Roman numerals with parenthesis - -Markdown syntax has the following types: > - - hyphen - * asterisk - + plus - 1. number with period - -MediaWiki syntax only has: > - * asterisk - # hash - -In insert mode, use the keys <C-L><C-J> and <C-L><C-K> to switch between -symbols. For convenience, only the commonly used symbols can be reached -through these keys for default syntax. - -Note that such a list: a) b) c) … only goes up to zz), to avoid confusion with -normal text followed by a parenthesis. -Roman numerals go up to MMMM) and numbers up to 2147483647. or -9223372036854775807. depending if your Vim is 32 or 64 bit. - -Also note that you can, of course, mix different list symbols in one list, but -if you have the strange idea of putting a list with Romanian numerals right -after a list using letters or vice versa, Vimwiki will get confused because -it cannot distinguish which is which (at least if the types are both upper -case or both lower case). - -See |vimwiki_glstar|, |vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl-|, -|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 -|vimwiki_glr| and |vimwiki_gLr|. - - ------------------------------------------------------------------------------- -Todo lists *vimwiki-todo-lists* - -You can have todo lists -- lists of items you can check/uncheck. - -Consider the following example: > - = Toggleable list of todo items = - * [X] Toggle list item on/off. - * [X] Simple toggling between [ ] and [X]. - * [X] All list's subitems should be toggled on/off appropriately. - * [X] Toggle child subitems only if current line is list item - * [X] Parent list item should be toggled depending on it's child items. - * [X] Make numbered list items toggleable too - * [X] Add highlighting to list item boxes - * [X] Add [ ] to the next list item created with o, O and <CR>. - -Pressing <C-Space> on the first list item will toggle it and all of its child -items: > - = Toggleable list of todo items = - * [ ] Toggle list item on/off. - * [ ] Simple toggling between [ ] and [X]. - * [ ] All of a list's subitems should be toggled on/off appropriately. - * [ ] Toggle child subitems only if the current line is a list item. - * [ ] Parent list item should be toggled depending on their child items. - * [X] Make numbered list items toggleable too. - * [X] Add highlighting to list item boxes. - * [X] Add [ ] to the next list item created using o, O or <CR>. - -Pressing <C-Space> on the third list item will toggle it and adjust all of its -parent items: > - = Toggleable list of todo items = - * [.] Toggle list item on/off. - * [ ] Simple toggling between [ ] and [X]. - * [X] All of a list's subitems should be toggled on/off appropriately. - * [ ] Toggle child subitems only if current line is list item. - * [ ] Parent list item should be toggled depending on it's child items. - * [ ] Make numbered list items toggleable too. - * [ ] Add highlighting to list item boxes. - * [ ] Add [ ] to the next list item created using o, O or <CR>. - -Parent items should change when their child items change. If not, use -|vimwiki_glr|. The symbol between [ ] depends on the percentage of toggled -child items (see also |g:vimwiki_listsyms|): > - [ ] -- 0% - [.] -- 1-33% - [o] -- 34-66% - [O] -- 67-99% - [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 -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 -checked. - -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 -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* - -Use the :VimwikiTable command to create a default table with 5 columns and 2 -rows: > - - | | | | | | - |---|---|---|---|---| - | | | | | | -< - -Tables are auto-formattable. Let's add some text into first cell: > - - | First Name | | | | | - |---|---|---|---|---| - | | | | | | -< - -Whenever you press <TAB>, <CR> or leave Insert mode, the table is formatted: > - - | First Name | | | | | - |------------|---|---|---|---| - | | | | | | -< - -You can easily create nice-looking text tables, just press <TAB> and enter new -values: > - - | First Name | Last Name | Age | City | e-mail | - |------------|------------|-----|----------|----------------------| - | Vladislav | Pokrishkin | 31 | Moscow | vlad_pok@smail.com | - | James | Esfandiary | 27 | Istanbul | esfandiary@tmail.com | -< - -To indent table indent the first row. Then format it with 'gqq'. - - -============================================================================== -10. Diary *vimwiki-diary* - -The diary helps you make daily notes. You can easily add information into -Vimwiki that should be sorted out later. Just hit <Leader>w<Leader>w to create -a new note for today with a name based on the current date. - -To generate the diary section with all available links one can use -|:VimwikiDiaryGenerateLinks| or <Leader>w<Leader>i . - -Note: it works only for diary index file. - -Example of diary section: > - = Diary = - - == 2011 == - - === December === - * [[2011-12-09]] - * [[2011-12-08]] - - -See |g:vimwiki_diary_months| if you would like to rename months. - - ------------------------------------------------------------------------------- -Calendar integration *vimwiki-calendar* - -If you have Calendar.vim installed you can use it to create diary notes. -Just open calendar with :Calendar and tap <Enter> on the date. A wiki file -will be created in the default wiki's diary. - -Get it from http://www.vim.org/scripts/script.php?script_id=52 - -See |g:vimwiki_use_calendar| option to turn it off/on. - - -============================================================================== -12. Anchors *vimwiki-anchors* - -Every header, tag, and bold text can be used as an anchor. To jump to it, use -a wikilink of the form > - [[file#anchor]] - -For example, consider the following file "Todo.wiki": > - = My tasks = - :todo-lists: - == Home == - - [ ] bathe my dog - == Work == - - [ ] beg for *pay rise* - == Knitting club == - === Knitting projects === - - [ ] a *funny pig* - - [ ] a *scary dog* - -Then, to jump from your index.wiki directly to your knitting projects, use: > - [[Todo#Knitting projects]] - -Or, to jump to an individual project, use this link: > - [[Todo#funny pig]] - -Or, to jump to a tag, use this link: > - [[Todo#todo-lists]] - -If there are multiple instances of an anchor, you can use the long form which -consists of the complete header hierarchy, separated by '#': > - [[Todo#My tasks#Knitting club#Knitting projects#scary dog]] - -If you don't feel like typing the whole stuff, type just [[Todo# and then -|i_CTRL-X_CTRL-O| to start the omni completion of anchors. - -For jumping inside a single file, you can omit the file in the link: > - [[#pay rise]] - - ------------------------------------------------------------------------------- -Table of Contents *vimwiki-toc* *vimwiki-table-of-contents* - -You can create a "table of contents" at the top of your wiki file. -The commando |:VimwikiTOC| creates the magic header > - = Contents = -in the current file and below it a list of all the headers in this file as -links, so you can directly jump to specific parts of the file. - -For the indentation of the list, the value of |vimwiki-option-list_margin| is -used. - -If you don't want the TOC to sit in the very first line, e.g. because you have -a modeline there, put the magic header in the second or third line and run -:VimwikiTOC to update the TOC. - -If English is not your preferred language, set the option -|g:vimwiki_toc_header| to your favorite translation. - -If you want to keep the TOC up to date automatically, use the option -|vimwiki-option-auto_toc|. - - ------------------------------------------------------------------------------- -Tagbar integration *vimwiki-tagbar* - -As an alternative to the Table of Contents, you can use the Tagbar plugin -(http://majutsushi.github.io/tagbar/) to show the headers of your wiki files -in a side pane. -Download the Python script from -https://raw.githubusercontent.com/vimwiki/utils/master/vwtags.py and follow -the instructions in it. - - -============================================================================== -12. Options *vimwiki-options* - -There are global options and local (per-wiki) options available to tune -Vimwiki. - -Global options are configured via global variables. For a complete list of -them, see |vimwiki-global-options|. - -Local options for multiple independent wikis are stored in a single global -variable |g:vimwiki_list|. The per-wiki options can be registered in advance, -as described in |vimwiki-register-wiki|, or may be registered on the fly as -described in |vimwiki-temporary-wiki|. For a list of per-wiki options, see -|vimwiki-local-options|. - - ------------------------------------------------------------------------------- -12.1 Registered Wiki *g:vimwiki_list* *vimwiki-register-wiki* - -One or more wikis can be registered using the |g:vimwiki_list| variable. - -Each item in |g:vimwiki_list| is a |Dictionary| that holds all customizations -available for a distinct wiki. The options dictionary has the form: > - {'option1': 'value1', 'option2': 'value2', ...} - -Consider the following: > - let g:vimwiki_list = [{'path': '~/my_site/', 'path_html': '~/public_html/'}] - -This defines one wiki located at ~/my_site/. When converted to HTML, the -produced HTML files go to ~/public_html/ . - -Another example: > - let g:vimwiki_list = [{'path': '~/my_site/', 'path_html': '~/public_html/'}, - \ {'path': '~/my_docs/', 'ext': '.mdox'}] - -defines two wikis: the first as before, and the second one located in -~/my_docs/, with files that have the .mdox extension. - -An empty |Dictionary| in g:vimwiki_list is the wiki with default options: > - let g:vimwiki_list = [{}, - \ {'path': '~/my_docs/', 'ext': '.mdox'}] - -For clarity, in your .vimrc file you can define wiki options using separate -|Dictionary| variables and subsequently compose them into |g:vimwiki_list|. > - let wiki_1 = {} - let wiki_1.path = '~/my_docs/' - let wiki_1.html_template = '~/public_html/template.tpl' - let wiki_1.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} - - let wiki_2 = {} - let wiki_2.path = '~/project_docs/' - let wiki_2.index = 'main' - - let g:vimwiki_list = [wiki_1, wiki_2] -< - - ------------------------------------------------------------------------------- -12.2 Temporary Wiki *vimwiki-temporary-wiki* - - -The creation of temporary wikis allows you to create a wiki on the fly. - -If a file with a registered wiki extension (see |vimwiki-register-extension|) -is opened in a directory that: 1) is not listed in |g:vimwiki_list|, and 2) is -not a subdirectory of any such directory, then a temporary wiki is created and -appended to the list of configured wikis in |g:vimwiki_list|. - -In addition to Vimwiki's editing functionality, the temporary wiki enables: 1) -wiki-linking to other files in the same subtree, 2) highlighting of existing -wiki pages when |vimwiki-option-maxhi| is activated, and 3) HTML generation to -|vimwiki-option-path_html|. - -Temporary wikis are configured using default |vimwiki-local-options|, except -for the path, extension, and syntax options. The path and extension are set -using the file's location and extension. The syntax is set to Vimwiki's -default unless another syntax is registered via |vimwiki-register-extension|. - -Use |g:vimwiki_global_ext| to turn off creation of temporary wikis. - -NOTE: Vimwiki assumes that the locations of distinct wikis do not overlap. - - ------------------------------------------------------------------------------- -12.3 Per-Wiki Options *vimwiki-local-options* - - -*vimwiki-option-path* ------------------------------------------------------------------------------- -Key Default value~ -path ~/vimwiki/ - -Description~ -Wiki files location: > - let g:vimwiki_list = [{'path': '~/my_site/'}] -< - -*vimwiki-option-path_html* ------------------------------------------------------------------------------- -Key Default value~ -path_html '' - -Description~ -Location of HTML files converted from wiki files: > - let g:vimwiki_list = [{'path': '~/my_site/', - \ 'path_html': '~/html_site/'}] - -If path_html is an empty string, the location is derived from -|vimwiki-option-path| by adding '_html'; i.e. for: > - let g:vimwiki_list = [{'path': '~/okidoki/'}] - -path_html will be set to '~/okidoki_html/'. - - -*vimwiki-option-auto_export* ------------------------------------------------------------------------------- -Key Default value Values~ -auto_export 0 0, 1 - -Description~ -Set this option to 1 to automatically generate the HTML file when the -corresponding wiki page is saved: > - let g:vimwiki_list = [{'path': '~/my_site/', 'auto_export': 1}] - -This will keep your HTML files up to date. - - -*vimwiki-option-auto_toc* ------------------------------------------------------------------------------- -Key Default value Values~ -auto_toc 0 0, 1 - -Description~ -Set this option to 1 to automatically update the table of contents when the -current wiki page is saved: > - let g:vimwiki_list = [{'path': '~/my_site/', 'auto_toc': 1}] - - -*vimwiki-option-index* ------------------------------------------------------------------------------- -Key Default value~ -index index - -Description~ -Name of wiki index file: > - let g:vimwiki_list = [{'path': '~/my_site/', 'index': 'main'}] - -NOTE: Do not include the extension. - - -*vimwiki-option-ext* ------------------------------------------------------------------------------- -Key Default value~ -ext .wiki - -Description~ -Extension of wiki files: > - let g:vimwiki_list = [{'path': '~/my_site/', - \ 'index': 'main', 'ext': '.document'}] - -< -*vimwiki-option-syntax* ------------------------------------------------------------------------------- -Key Default value Values~ -syntax default default, markdown, or media - -Description~ -Wiki syntax. You can use different markup languages (currently: Vimwiki's -default, Markdown, and MediaWiki), but only Vimwiki's default markup will be -converted to HTML at the moment. - -To use Markdown's wiki markup: > - let g:vimwiki_list = [{'path': '~/my_site/', - \ 'syntax': 'markdown', 'ext': '.md'}] -< - -*vimwiki-option-template_path* ------------------------------------------------------------------------------- -Key Default value~ -template_path ~/vimwiki/templates/ - -Description~ -Setup path for HTML templates: > - let g:vimwiki_list = [{'path': '~/my_site/', - \ 'template_path': '~/public_html/templates/', - \ 'template_default': 'def_template', - \ 'template_ext': '.html'}] - -There could be a bunch of templates: > - def_template.html - index.html - bio.html - person.html -etc. - -Each template could look like: > - <html> - <head> - <link rel="Stylesheet" type="text/css" href="%root_path%style.css" /> - <title>%title%</title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - </head> - <body> - <div class="content"> - %content% - </div> - <p><small>Page created on %date%</small></p> - </body> - </html> - -where - %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: - if you have wikilink [[dir1/dir2/dir3/my page in a subdir]] then - %root_path% is replaced by '../../../'. - - %content% is replaced by a wiki file content. - - -The default template will be applied to all wiki pages unless a page specifies -a template. Consider you have wiki page named 'Maxim.wiki' and you want apply -'person.html' template to it. Just add: > - %template person -to that page. - - -*vimwiki-option-template_default* ------------------------------------------------------------------------------- -Key Default value~ -template_default default - -Description~ -Setup default template name (without extension). - -See |vimwiki-option-template_path| for details. - - -*vimwiki-option-template_ext* ------------------------------------------------------------------------------- -Key Default value~ -template_ext .tpl - -Description~ -Setup template filename extension. - -See |vimwiki-option-template_path| for details. - - -*vimwiki-option-css_name* ------------------------------------------------------------------------------- -Key Default value~ -css_name style.css - -Description~ -Setup CSS file name: > - let g:vimwiki_list = [{'path': '~/my_pages/', - \ 'css_name': 'main.css'}] -< -or even > - let g:vimwiki_list = [{'path': '~/my_pages/', - \ 'css_name': 'css/main.css'}] -< -Vimwiki comes with a default CSS file "style.css". - - -*vimwiki-option-maxhi* ------------------------------------------------------------------------------- -Key Default value Values~ -maxhi 0 0, 1 - -Description~ -If on, wiki links to non-existent wiki files are highlighted. However, it can -be quite slow. If you still want it, set maxhi to 1: > - let g:vimwiki_list = [{'path': '~/my_site/', 'maxhi': 1}] - - -*vimwiki-option-nested_syntaxes* ------------------------------------------------------------------------------- -Key Default value Values~ -nested_syntaxes {} pairs of highlight keyword and Vim filetype - -Description~ -You can configure preformatted text to be highlighted with any syntax -available for Vim. -For example the following setup in your vimrc: > - let wiki = {} - let wiki.path = '~/my_wiki/' - let wiki.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} - let g:vimwiki_list = [wiki] - -would give you Python and C++ highlighting in: > - {{{class="brush: python" - for i in range(1, 5): - print(i) - }}} - - {{{class="brush: c++" - #include "helloworld.h" - int helloworld() - { - printf("hello world"); - } - }}} - -or in: > - {{{c++ - #include "helloworld.h" - int helloworld() - { - printf("hello world"); - } - }}} - - {{{python - for i in range(1, 5): - print(i) - }}} - - -*vimwiki-option-automatic_nested_syntaxes* ------------------------------------------------------------------------------- -Key Default value~ -automatic_nested_syntaxes 1 - -Description~ -If set, the nested syntaxes (|vimwiki-option-nested_syntaxes|) are -automatically derived when opening a buffer. -Just write your preformatted text in your file like this > - {{{xxx - my preformatted text - }}} - -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. - -Since every file is scanned for the markers of preformatted text when it is -opened, it can be slow when you have huge files. In this case, set this option -to 0. - - -*vimwiki-option-diary_rel_path* ------------------------------------------------------------------------------- -Key Default value~ -diary_rel_path diary/ - -Description~ -The path to the diary wiki files, relative to |vimwiki-option-path|. - - -*vimwiki-option-diary_index* ------------------------------------------------------------------------------- -Key Default value~ -diary_index diary - -Description~ -Name of wiki-file that holds all links to dated wiki files. - - -*vimwiki-option-diary_header* ------------------------------------------------------------------------------- -Key Default value~ -diary_header Diary - -Description~ -Name of the header in |vimwiki-option-diary_index| where links to dated -wiki-files are located. - - -*vimwiki-option-diary_sort* ------------------------------------------------------------------------------- -Key Default value Values~ -diary_sort desc desc, asc - -Description~ -Sort links in a diary index page. - - -*vimwiki-option-custom_wiki2html* ------------------------------------------------------------------------------- -Key Default value~ -custom_wiki2html '' - -Description~ -The full path to an user-provided script that converts a wiki page to HTML. -Vimwiki calls the provided |vimwiki-option-custom_wiki2html| script from the -command-line, using |:!| invocation. - -The following arguments, in this order, are passed to the script: - -1. force : [0/1] overwrite an existing file -2. syntax : the syntax chosen for this wiki -3. extension : the file extension for this wiki -4. output_dir : the full path of the output directory -5. input_file : the full path of the wiki page -6. css_file : the full path of the css file for this wiki -7. template_path : the full path to the wiki's templates -8. template_default : the default template name -9. template_ext : the extension of template files -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]] - 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-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. - -For an example and further instructions, refer to the following script: - - $VIMHOME/autoload/vimwiki/customwiki2html.sh - -An alternative converter was developed by Jason6Anderson, and can -be located at https://github.com/vimwiki-backup/vimwiki/issues/384 - -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* ------------------------------------------------------------------------------- -Key Default value~ -list_margin -1 - -Description~ -Width of left-hand margin for lists. When negative, the current 'shiftwidth' -is used. This affects the appearance of the generated links (see -|:VimwikiGenerateLinks|), the Table of contents (|vimwiki-toc|) and the -behavior of the list manipulation commands |:VimwikiListChangeLevel| and the -local mappings |vimwiki_glstar|, |vimwiki_gl#| |vimwiki_gl-|, |vimwiki_gl-|, -|vimwiki_gl1|, |vimwiki_gla|, |vimwiki_glA|, |vimwiki_gli|, |vimwiki_glI| and -|vimwiki_i_<C-L>_<C-M>|. - -Note: if you use Markdown or MediaWiki syntax, you probably would like to set -this option to 0, because every indented line is considered verbatim text. - - -*vimwiki-option-auto_tags* ------------------------------------------------------------------------------- -Key Default value Values~ -auto_tags 0 0, 1 - -Description~ -Set this option to 1 to automatically update the tags metadata when the -current wiki page is saved: > - let g:vimwiki_list = [{'path': '~/my_site/', 'auto_tags': 1}] - - ------------------------------------------------------------------------------- -12.4 Global Options *vimwiki-global-options* - - -Global options are configured using the following pattern: > - - let g:option_name = option_value - - ------------------------------------------------------------------------------- -*g:vimwiki_hl_headers* - -Highlight headers with =Reddish=, ==Greenish==, ===Blueish=== colors. - -Value Description~ -1 Use VimwikiHeader1-VimwikiHeader6 group colors to highlight - different header levels. -0 Use |hl-Title| color for headers. -Default: 0 - - ------------------------------------------------------------------------------- -*g:vimwiki_hl_cb_checked* - -Highlight checked list items with a special color: - - * [X] the whole line can be highlighted with the option set to 1. - * this line is highlighted as well with the option set to 2 - * [ ] this line is never highlighted - -Value Description~ -0 Don't highlight anything. -1 Highlight checked [X] list item with |group-name| "Comment". -2 Highlight checked [X] list item and all its child items. - -Default: 0 - -Note: Option 2 does not work perfectly. Specifically, it might break if the -list item contains preformatted text or if you mix tabs and spaces for -indenting. Also, indented headers can be highlighted erroneously. -Furthermore, if your list is long, Vim's highlight can break. To solve this, -consider putting > - au BufEnter *.wiki :syntax sync fromstart -in your .vimrc - ------------------------------------------------------------------------------- -*g:vimwiki_global_ext* - -Control the creation of |vimwiki-temporary-wiki|s. - -If a file with a registered extension (see |vimwiki-register-extension|) is -opened in a directory that is: 1) not listed in |g:vimwiki_list|, and 2) not a -subdirectory of any such directory, then: - -Value Description~ -1 make temporary wiki and append it to |g:vimwiki_list|. -0 don't make temporary wiki in that dir. - -If your preferred wiki extension is .txt then you can > - let g:vimwiki_global_ext = 0 -to restrict Vimwiki's operation to only those paths listed in g:vimwiki_list. -Other text files wouldn't be treated as wiki pages. - -Default: 1 - - ------------------------------------------------------------------------------- -*g:vimwiki_ext2syntax* *vimwiki-register-extension* - -A many-to-one mapping between file extensions and syntaxes whose purpose is to -register the extensions with Vimwiki. - -E.g.: > - let g:vimwiki_ext2syntax = {'.md': 'markdown', - \ '.mkd': 'markdown', - \ '.wiki': 'media'} - -An extension that is registered with Vimwiki can trigger creation of a -|vimwiki-temporary-wiki| with the associated syntax. File extensions used in -|g:vimwiki_list| are automatically registered with Vimwiki using the default -syntax. - -Default: {} - - ------------------------------------------------------------------------------- -*g:vimwiki_menu* - -Create a menu in the menu bar of GVim, where you can open the available wikis. - -Value Description~ -'' No menu -'Vimwiki' Top level menu "Vimwiki" -'Plugin.Vimwiki' "Vimwiki" submenu of top level menu "Plugin" -etc. - -Default: 'Vimwiki' - - ------------------------------------------------------------------------------- -*g:vimwiki_listsyms* - -String of at least two symbols to show the progression of todo list items. -Default value is ' .oOX'. - -The first char is for 0% done items. -The last is for 100% done items. - -You can set it to some more fancy symbols like this: -> - 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* - -Use local mouse mappings from |vimwiki-local-mappings|. - -Value Description~ -0 Do not use mouse mappings. -1 Use mouse mappings. - -Default: 0 - - ------------------------------------------------------------------------------- -*g:vimwiki_folding* - -Enable/disable Vimwiki's folding (outline) functionality. Folding in Vimwiki -can uses either the 'expr' or the 'syntax' |foldmethod| of Vim. - -Value Description~ -'' Disable folding -'expr' Folding based on expression (folds sections and code blocks) -'syntax' Folding based on syntax (folds sections; slower than 'expr') -'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: '' - -Limitations: - - Opening very large files may be slow when folding is enabled. - - 'list' folding is particularly slow with larger files. - - 'list' is intended to work with lists nicely indented with 'shiftwidth'. - - '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* - -This is HTML related. -Convert newlines to <br />s in multiline list items. - -Value Description~ -0 Newlines in a list item are converted to <br />s. -1 Ignore newlines. - -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* - -Create new or open existing diary wiki-file for the date selected in Calendar. -See |vimwiki-calendar|. - -Value Description~ -0 Do not use calendar. -1 Use calendar. - -Default: 1 - - ------------------------------------------------------------------------------- -*VimwikiLinkHandler* - -A customizable link handler can be defined to override Vimwiki's behavior when -opening links. Each recognized link, whether it is a wikilink, wiki-include -link or a weblink, is first passed to |VimwikiLinkHandler| to see if it can be -handled. The return value 1 indicates success. - -If the link is not handled successfully, the behavior of Vimwiki depends on -the scheme. "wiki:", "diary:" or schemeless links are opened in Vim. "file:" -and "local:" links are opened with a system default handler. - -You can redefine the VimwikiLinkHandler function in your .vimrc to do -something else: > - - function! VimwikiLinkHandler(link) - try - let browser = 'C:\Program Files\Firefox\firefox.exe' - execute '!start "'.browser.'" ' . a:link - return 1 - catch - echo "This can happen for a variety of reasons ..." - endtry - return 0 - endfunction - -A second example handles a new scheme, "vfile:", which behaves similar to -"file:", but the files are always opened with Vim in a new tab: > - - function! VimwikiLinkHandler(link) - " Use Vim to open external files with the 'vfile:' scheme. E.g.: - " 1) [[vfile:~/Code/PythonProject/abc123.py]] - " 2) [[vfile:./|Wiki Home]] - let link = a:link - if link =~# '^vfile:' - let link = link[1:] - else - return 0 - endif - let link_infos = vimwiki#base#resolve_link(link) - if link_infos.filename == '' - echomsg 'Vimwiki Error: Unable to resolve link!' - return 0 - else - exe 'tabnew ' . fnameescape(link_infos.filename) - return 1 - endif - endfunction - ------------------------------------------------------------------------------- -*VimwikiLinkConverter* - -This function can be overridden in your .vimrc to specify what a link looks -like when converted to HTML. The parameters of the function are: - - the link as a string - - the full path to the wiki file where the link is in - - the full path to the output HTML file -It should return the HTML link if successful or an empty string '' otherwise. - -This example changes how relative links to external files using the "local:" -scheme look like in HTML. Per default, they would become links relative to -the HTML output directory. This function converts them to links relative to -the wiki file, i.e. a link [[local:../document.pdf]] becomes -<a href="../document.pdf">. Also, this function will copy document.pdf to the -right place. > - - function! VimwikiLinkConverter(link, source_wiki_file, target_html_file) - if a:link =~# '^local:' - let link_infos = vimwiki#base#resolve_link(a:link) - let html_link = vimwiki#path#relpath( - \ fnamemodify(a:source_wiki_file, ':h'), link_infos.filename) - let relative_link = - \ fnamemodify(a:target_html_file, ':h') . '/' . html_link - call system('cp ' . fnameescape(link_infos.filename) . - \ ' ' . fnameescape(relative_link)) - return html_link - endif - return '' - endfunction - ------------------------------------------------------------------------------- -*VimwikiWikiIncludeHandler* - -Vimwiki includes the content of a wiki-include URL as an image by default. - -A trial feature allows you to supply your own handler for wiki-include links. -The handler should return the empty string when it does not recognize or -cannot otherwise convert the link. A customized handler might look like this: > - - " Convert {{URL|#|ID}} -> URL#ID - function! VimwikiWikiIncludeHandler(value) - let str = a:value - - " complete URL - let url_0 = matchstr(str, g:vimwiki_rxWikiInclMatchUrl) - " URL parts - let link_infos = vimwiki#base#resolve_link(url_0) - let arg1 = matchstr(str, VimwikiWikiInclMatchArg(1)) - let arg2 = matchstr(str, VimwikiWikiInclMatchArg(2)) - - if arg1 =~ '#' - return link_infos.filename.'#'.arg2 - endif - - " Return the empty string when unable to process link - return '' - endfunction -< - ------------------------------------------------------------------------------- -*g:vimwiki_table_mappings* - -Enable/disable table mappings for INSERT mode. - -Value Description~ -0 Disable table mappings. -1 Enable table mappings. - -Default: 1 - - ------------------------------------------------------------------------------- -*g:vimwiki_table_auto_fmt* - -Enable/disable table auto formatting after leaving INSERT mode. - -Value Description~ -0 Disable table auto formatting. -1 Enable table auto formatting. - -Default: 1 - - ------------------------------------------------------------------------------- -*g:vimwiki_w32_dir_enc* - -Convert directory name from current 'encoding' into 'g:vimwiki_w32_dir_enc' -before it is created. - -If you have 'enc=utf-8' and set up > - let g:vimwiki_w32_dir_enc = 'cp1251' -< -then following the next link with <CR>: > - [[привет/мир]] -> -would convert utf-8 'привет' to cp1251 and create directory with that name. - -Default: '' - - ------------------------------------------------------------------------------- -*g:vimwiki_CJK_length* - -Use a special method to calculate the correct length of the strings with -double-wide characters (to align table cells properly). - -Value Description~ -0 Do not use it. -1 Use it. - -Default: 0 - -Note: Vim 7.3 has a new function |strdisplaywidth()|, so for users of an up to -date Vim, this option is obsolete. - - ------------------------------------------------------------------------------- -*g:vimwiki_dir_link* - -This option is about what to do with links to directories, like -[[directory/]], [[papers/]], etc. - -Value Description~ -'' Open 'directory/' using the standard netrw plugin. -'index' Open 'directory/index.wiki', create if needed. -'main' Open 'directory/main.wiki', create if needed. -etc. - -Default: '' (empty string) - - ------------------------------------------------------------------------------- -*g:vimwiki_html_header_numbering* - -Set this option if you want headers to be auto-numbered in HTML. - -E.g.: > - 1 Header1 - 1.1 Header2 - 1.2 Header2 - 1.2.1 Header3 - 1.2.2 Header3 - 1.3 Header2 - 2 Header1 - 3 Header1 -etc. - -Value Description~ -0 Header numbering is off. -1 Header numbering is on. Headers are numbered starting from - header level 1. -2 Header numbering is on. Headers are numbered starting from - header level 2. -etc. - -Example when g:vimwiki_html_header_numbering = 2: > - Header1 - 1 Header2 - 2 Header2 - 2.1 Header3 - 2.1.1 Header4 - 2.1.2 Header4 - 2.2 Header3 - 3 Header2 - 4 Header2 -etc. - -Default: 0 - - ------------------------------------------------------------------------------- -*g:vimwiki_html_header_numbering_sym* - -Ending symbol for |g:vimwiki_html_header_numbering|. - -Value Description~ -'.' Dot will be added after a header's number. -')' Closing bracket will be added after a header's number. -etc. - -With - let g:vimwiki_html_header_numbering_sym = '.' -headers would look like: > - 1. Header1 - 1.1. Header2 - 1.2. Header2 - 1.2.1. Header3 - 1.2.2. Header3 - 1.3. Header2 - 2. Header1 - 3. Header1 - - -Default: '' (empty) - - ------------------------------------------------------------------------------- -*g:vimwiki_valid_html_tags* - -Case-insensitive comma separated list of HTML tags that can be used in -Vimwiki. When converting to HTML, these tags are left as they are, while -every other tag is escaped. - -Default: 'b,i,s,u,sub,sup,kbd,br,hr' - - ------------------------------------------------------------------------------- -*g:vimwiki_user_htmls* - -Comma-separated list of HTML files that have no corresponding wiki files and -should not be deleted after |:VimwikiAll2HTML|. - -Default: '' - -Example: -Consider you have 404.html and search.html in your Vimwiki 'path_html'. -With: > - let g:vimwiki_user_htmls = '404.html,search.html' -they would not be deleted after |:VimwikiAll2HTML|. - - ------------------------------------------------------------------------------- -*g:vimwiki_conceallevel* - -In Vim 7.3 'conceallevel' is local to the current window, thus if you open a -Vimwiki buffer in a new tab or window, it would be set to the default value. - -Vimwiki sets 'conceallevel' to g:vimwiki_conceallevel every time a Vimwiki -buffer is entered. - -With default settings, Vimwiki conceals one-character markers, shortens long -URLs and hides markers and URL for links that have a description. - -Default: 2 - - ------------------------------------------------------------------------------- -*g:vimwiki_autowriteall* - -Automatically save a modified wiki buffer when switching wiki pages. Has the -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~ -0 autowriteall is off -1 autowriteall is on - -Default: 1 - - ------------------------------------------------------------------------------- -*g:vimwiki_url_maxsave* - -Setting the value of |g:vimwiki_url_maxsave| to 0 will prevent any link -shortening: you will see the full URL in all types of links, with no parts -being concealed. Concealing of one-character markers is not affected. - -When positive, the value determines the maximum number of characters that -are retained at the end after concealing the middle part of a long URL. -It could be less: in case one of the characters /,#,? is found near the end, -the URL will be concealed up to the last occurrence of that character. - -Note: - * The conceal feature works only with Vim >= 7.3. - * When using the default |wrap| option of Vim, the effect of concealed links - is not always pleasing, because the visible text on longer lines with - a lot of concealed parts may appear to be strangely broken across several - lines. This is a limitation of Vim's |conceal| feature. - * Many color schemes do not define an unobtrusive color for the Conceal - highlight group - this might be quite noticeable on shortened URLs. - - -Default: 15 - - ------------------------------------------------------------------------------- -*g:vimwiki_diary_months* - -It is a |Dictionary| with the numbers of months and corresponding names. Diary -uses it. - -Redefine it in your .vimrc to get localized months in your diary: -let g:vimwiki_diary_months = { - \ 1: 'Январь', 2: 'Февраль', 3: 'Март', - \ 4: 'Апрель', 5: 'Май', 6: 'Июнь', - \ 7: 'Июль', 8: 'Август', 9: 'Сентябрь', - \ 10: 'Октябрь', 11: 'Ноябрь', 12: 'Декабрь' - \ } - -Default: -let g:vimwiki_diary_months = { - \ 1: 'January', 2: 'February', 3: 'March', - \ 4: 'April', 5: 'May', 6: 'June', - \ 7: 'July', 8: 'August', 9: 'September', - \ 10: 'October', 11: 'November', 12: 'December' - \ } - - ------------------------------------------------------------------------------- -*g:vimwiki_toc_header* - -A string with the magic header that tells Vimwiki where the Table of Contents -(see |vimwiki-toc|) is located in a file. You can change it to the -appropriate word in your mother tongue like this: > - let g:vimwiki_toc_header = 'Inhalt' - -The default is 'Contents'. - - ------------------------------------------------------------------------------- -*g:vimwiki_map_prefix* - -A string which specifies the prefix for all global mappings (and some local -ones). Use it to avoid conflicts with other plugins. Note that it must be -defined before the plugin loads. > - let g:vimwiki_map_prefix = '<Leader>e' - -The default is '<Leader>w'. - - ------------------------------------------------------------------------------- -*g:vimwiki_auto_chdir* - -When set to 1, enables auto-cd feature. Whenever Vimwiki page is opened, -Vimwiki performs an |:lcd| to the Vimwiki folder to where the page belongs. - - -Value Description~ -0 Do not change directory. -1 Change directory to Vimwiki folder on opening page. - -Default: 0 - -============================================================================== -13. Getting help *vimwiki-help* - -For questions, discussions, praise or rants there is a mailing list: -https://groups.google.com/forum/#!forum/vimwiki - -Also, there is the IRC channel #vimwiki on Freenode which can be accessed via -webchat: https://webchat.freenode.net/?channels=#vimwiki - -============================================================================== -14. Contributing & Bug reports *vimwiki-contributing* - -Your help in making Vimwiki better is really appreciated! -Any help, whether it is a spelling correction or a code snippet to patch -- -everything is welcomed. - -Before filing a bug or starting to write a patch, check the latest development -version from https://github.com/vimwiki/vimwiki/tree/dev to see if your -problem is already fixed. - -Issues can be filed at https://github.com/vimwiki/vimwiki/issues/. - -If you want to provide a pull request on GitHub, please start from the dev -branch, not from the master branch. - -============================================================================== -15. Development *vimwiki-development* - -Homepage: http://vimwiki.github.io/ -Github: https://github.com/vimwiki/vimwiki/ -Vim plugins: http://www.vim.org/scripts/script.php?script_id=2226 -Old homepage: http://code.google.com/p/vimwiki/ - -Contributors and their Github usernames in roughly chronological order: - - - Maxim Kim (@habamax) <habamax@gmail.com> as original author - - the people here: http://code.google.com/p/vimwiki/people/list - - Stuart Andrews (@tub78) - - Tomas Pospichal - - Daniel Schemala (@EinfachToll) as current maintainer - - Larry Hynes (@larryhynes) - - Hector Arciga (@harciga) - - Alexey Radkov (@lyokha) - - Aaron Franks (@af) - - Dan Bernier (@danbernier) - - Carl Helmertz (@chelmertz) - - Karl Yngve Lervåg (@lervag) - - Patrick Davey (@patrickdavey) - - Ivan Tishchenko (@t7ko) - - 修昊 (@Svtter) - - Marcelo D Montu (@mMontu) - - John Kaul - - Hongbo Liu (@hiberabyss) - - @Tomsod - - @wangzq - - Jinzhou Zhang (@lotabout) - - 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 - - -============================================================================== -16. Changelog *vimwiki-changelog* - - -Issue numbers starting with '#' are issues from -https://github.com/vimwiki/vimwiki/issues/, all others from -http://code.google.com/p/vimwiki/issues/list. They may be accessible from -https://github.com/vimwiki-backup/vimwiki/issues. - - -2.3 (2016-03-31)~ - -New: - * Add |:VimwikiMakeYesterdayDiaryNote| command - * Issue #128: add option |vimwiki-option-automatic_nested_syntaxes| - * Issue #192: Sort links in the list generated by |:VimwikiGenerateTags| - -Fixed: - * Issue #176: Fix issue when the wiki path contains spaces - * Also look for tags in wiki files in subdirectories - * Locate the .tags file correctly on Windows - * Issue #183: Fix HTML conversion of headers containing links - * Issue #64: create correct Markdown links when pressing CR on a word - * Issue #191: ignore headers inside preformatted text when creating the TOC - * Create the standard CSS file also if only one file is converted to HTML - * Fix #188: |vimwiki_+| on a raw url surrounds it with brackets - * various minor fixes - - -2.2.1 (2015-12-10)~ - -Removed:~ - * Removed the option g:vimwiki_debug, which probably nobody used. If you - want it back, file an issue at Github. - -Fixed:~ - * Issue #175: Don't do random things when the user has remapped the z key - * Don't ask for confirmation when following an URL in MacOS - * Always jump to the first occurrence of a tag in a file - * Don't move the cursor when updating the TOC - * Fix some issues with the TOC when folding is enabled - - -2.2 (2015-11-25)~ - -New:~ - * Support for anchors, see |vimwiki-anchors| - * in this context, add support for TOC, see |vimwiki-toc| - * add omni completion of wiki links (files and anchors) - * new local option |vimwiki-option-auto_toc| - * new global option |g:vimwiki_toc_header| - * Support for tags, see |vimwiki-syntax-tags| - * List editing capabilities, see |vimwiki-lists|: - * support for auto incrementing numbered lists - * more key maps for list manipulation, see |vimwiki-list-manipulation| - * improved automatic adjustment of checkboxes - * text objects for list items, see |vimwiki-text-objects| - * New command |:VimwikiCheckLinks| to check for broken links - * New global option |g:vimwiki_auto_chdir| - * New global option |g:vimwiki_map_prefix| - * Support for wiki links absolute to the wiki root - * Added the |VimwikiLinkConverter| function - * Issue #24: Basic support for remote directories via netrw - * Issue #50: in HTML, tables can now be embedded in lists - * When converting to HTML, show a message with the output directory - * Add auto completion for |:VimwikiGoto| - * Add Chinese Readme file - -Changed:~ - * Wiki files must not contain # anymore, because # is used to separate the - file from an anchor in a link. - * replace the function vimwiki#base#resolve_scheme() by - vimwiki#base#resolve_link() (relevant if you have a custom - |VimwikiLinkHandler| which used this function) - * The semantic of "file:" and "local:" links changed slightly, see - |vimwiki-syntax-links| for what they mean now - * The meaning of a link like [[/some/directory/]] changed. It used to be - a link to the actual directory /some/directory/, now it's relative to - the root of the current wiki. Use [[file:/some/directory/]] for the old - behavior. - -Removed:~ - * the %toc placeholder is now useless, use |vimwiki-toc| instead - * the global option g:vimwiki_auto_checkbox is now useless and removed - -Fixed:~ - * Issue 415: Disable folding if g:vimwiki_folding is set to '' - * Fix slowdown in Vim 7.4 - * Issue #12: Separate diaries from different wikis - * Issue #13: Fix :VimwikiRenameLink on links containing a dot - * Always jump to previous link on <S-Tab>, not to beginning of link - * Issue #27: Fix <CR> on a visual selection sometimes not working - * |VimwikiBackLinks| now recognizes much more valid links - * Issue 424: make external links with #, % work under Linux - * Issue #39: don't htmlize stuff inside pre tags - * Issue #44: faster formatting of large tables - * Issue #52: Recognize markdown links when renaming wiki file - * Issue #54: Disable 'shellslash' on Windows to avoid problems - * Issue #81: Don't get stuck when converting a read-only file - * Issue #66: Better normalizing of links in diary - * Fix the menu in GVim, which was sometimes not shown correctly - * |VimwikiGenerateLinks| now also generates links for subdirectories - * Issue #93: Don't process placeholders inside preformatted text - * Issue #102: Add default values to some options like the doc says - * Issue #144: Fix bug with folds shortening on multibyte characters - * Issue #158: Detect the OS correctly - * |VimwikiGenerateLinks| now replaces a potentially existing old list - * Fix uneven indentation of list items with checkboxes in HTML - * Various small fixes - * Corrected website links in documentation. code.google is dead, long live - Github! - -2.1~ - - * Concealing of links can be turned off - set |g:vimwiki_url_maxsave| to 0. - The option g:vimwiki_url_mingain was removed - * |g:vimwiki_folding| also accepts value 'list'; with 'expr' both sections - and code blocks folded, g:vimwiki_fold_lists option was removed - * Issue 261: Syntax folding is back. |g:vimwiki_folding| values are - changed to '', 'expr', 'syntax'. - * Issue 372: Ignore case in g:vimwiki_valid_html_tags - * Issue 374: Make autowriteall local to vimwiki. It is not 100% local - though. - * Issue 384: Custom_wiki2html script now receives templating arguments - * Issue 393: Custom_wiki2html script path can contain tilde character - * Issue 392: Custom_wiki2html arguments are quoted, e.g names with spaces - * Various small bug fixes. - -2.0.1 'stu'~ - - * Follow (i.e. open target of) markdown reference-style links. - * Bug fixes. - - -2.0 'stu'~ - -This release is partly incompatible with previous. - -Summary ~ - - * Quick page-link creation. - * Redesign of link syntaxes (!) - * No more CamelCase links. Check the ways to convert them - https://groups.google.com/forum/?fromgroups#!topic/vimwiki/NdS9OBG2dys - * No more [[link][desc]] links. - * No more [http://link description] links. - * No more plain image links. Use transclusions. - * No more image links identified by extension. Use transclusions. - * Interwiki links - * More link schemes - * Transclusions - * Normalize link command. See |vimwiki_+|. - * Improved diary organization and generation. See |vimwiki-diary|. - * List manipulation. See |vimwiki-list-manipulation|. - * Markdown support. - * Mathjax support. See |vimwiki-syntax-math|. - * Improved handling of special characters and punctuation in filenames and - urls. - * Back links command: list links referring to the current page. - * Highlighting nonexisted links are off by default. - * Table syntax change. Row separator uses | instead of +. - * Fold multilined list items. - * Custom wiki to HTML converters. See |vimwiki-option-custom_wiki2html|. - * Conceal long weblinks. See g:vimwiki_url_mingain. - * Option to disable table mappings. See |g:vimwiki_table_mappings|. - -For detailed information see issues list on -http://code.google.com/p/vimwiki/issues/list - - -1.2~ - * Issue 70: Table spanning cell support. - * Issue 72: Do not convert again for unchanged file. |:VimwikiAll2HTML| - converts only changed wiki files. - * Issue 117: |:VimwikiDiaryIndex| command that opens diary index wiki page. - * Issue 120: Links in headers are not highlighted in vimwiki but are - highlighted in HTML. - * Issue 138: Added possibility to remap table-column move bindings. See - |:VimwikiTableMoveColumnLeft| and |:VimwikiTableMoveColumnRight| - commands. For remap instructions see |vimwiki_<A-Left>| - and |vimwiki_<A-Right>|. - * Issue 125: Problem with 'o' command given while at the of the file. - * Issue 131: FileType is not set up when GUIEnter autocommand is used in - vimrc. Use 'nested' in 'au GUIEnter * nested VimwikiIndex' - * Issue 132: Link to perl (or any non-wiki) file in vimwiki subdirectory - doesn't work as intended. - * Issue 135: %title and %toc used together cause TOC to appear in an - unexpected place in HTML. - * Issue 139: |:VimwikiTabnewLink| command is added. - * Fix of g:vimwiki_stripsym = '' (i.e. an empty string) -- it removes bad - symbols from filenames. - * Issue 145: With modeline 'set ft=vimwiki' links are not correctly - highlighted when open wiki files. - * Issue 146: Filetype difficulty with ".txt" as a vimwiki extension. - * Issue 148: There are no mailto links. - * Issue 151: Use location list instead of quickfix list for :VimwikiSearch - command result. Use :lopen instead of :copen, :lnext instead of :cnext - etc. - * Issue 152: Add the list of HTML files that would not be deleted after - |:VimwikiAll2HTML|. - * Issue 153: Delete HTML files that has no corresponding wiki ones with - |:VimwikiAll2HTML|. - * Issue 156: Add multiple HTML templates. See - |vimwiki-option-template_path|. Options html_header and html_footer are - no longer exist. - * Issue 173: When virtualedit=all option is enabled the 'o' command behave - strange. - * Issue 178: Problem with alike wikie's paths. - * Issue 182: Browser command does not quote url. - * Issue 183: Spelling error highlighting is not possible with nested - syntaxes. - * Issue 184: Wrong foldlevel in some cases. - * Issue 195: Page renaming issue. - * Issue 196: vim: modeline bug -- syn=vim doesn't work. - * Issue 199: Generated HTML for sublists is invalid. - * Issue 200: Generated HTML for todo lists does not show completion status - the fix relies on CSS, thus your old stylesheets need to be updated!; - may not work in obsolete browsers or font-deficient systems. - * Issue 205: Block code: highlighting differs from processing. Inline code - block {{{ ... }}} is removed. Use `...` instead. - * Issue 208: Default highlight colors are problematic in many - colorschemes. Headers are highlighted as |hl-Title| by default, use - |g:vimwiki_hl_headers| to restore previous default Red, Green, Blue or - custom header colors. Some other changes in highlighting. - * Issue 209: Wild comments slow down html generation. Comments are - changed, use %% to comment out entire line. - * Issue 210: HTML: para enclose header. - * Issue 214: External links containing Chinese characters get trimmed. - * Issue 218: Command to generate HTML file and open it in webbrowser. See - |:Vimwiki2HTMLBrowse|(bind to <leader>whh) - * NEW: Added <Leader>wh mapping to call |:Vimwiki2HTML| - - -... - -39 releases - -... - -0.1~ - * First public version. - -============================================================================== -17. License *vimwiki-license* - -The MIT License -http://www.opensource.org/licenses/mit-license.php - -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. - - - - vim:tw=78:ts=8:ft=help diff --git a/vim/.vim/plugged/vimwiki/ftplugin/vimwiki.vim b/vim/.vim/plugged/vimwiki/ftplugin/vimwiki.vim deleted file mode 100644 index 6b517dc..0000000 --- a/vim/.vim/plugged/vimwiki/ftplugin/vimwiki.vim +++ /dev/null @@ -1,699 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki filetype plugin file -" Home: https://github.com/vimwiki/vimwiki/ - -if exists("b:did_ftplugin") - finish -endif -let b:did_ftplugin = 1 " Don't load another plugin for this buffer - - - -setlocal commentstring=%%%s - -if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel") - let &l:conceallevel = vimwiki#vars#get_global('conceallevel') -endif - -" This is for GOTO FILE: gf -execute 'setlocal suffixesadd='.vimwiki#vars#get_wikilocal('ext') -setlocal isfname-=[,] - -exe "setlocal tags+=" . escape(vimwiki#tags#metadata_file_path(), ' \|"') - - - -function! Complete_wikifiles(findstart, base) - if a:findstart == 1 - let column = col('.')-2 - let line = getline('.')[:column] - let startoflink = match(line, '\[\[\zs[^\\[\]]*$') - if startoflink != -1 - let s:line_context = '[' - return startoflink - endif - if vimwiki#vars#get_wikilocal('syntax') ==? 'markdown' - let startofinlinelink = match(line, '\[.*\](\zs[^)]*$') - if startofinlinelink != -1 - let s:line_context = '[' - return startofinlinelink - endif - endif - let startoftag = match(line, ':\zs[^:[:space:]]*$') - if startoftag != -1 - let s:line_context = ':' - return startoftag - endif - let s:line_context = '' - return -1 - else - " 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 - " solution, because calling col('.') here returns garbage. - if s:line_context == '' - return [] - elseif s:line_context == ':' - " Tags completion - let tags = vimwiki#tags#get_tags() - if a:base != '' - call filter(tags, - \ "v:val[:" . (len(a:base)-1) . "] == '" . substitute(a:base, "'", "''", '') . "'" ) - endif - return tags - elseif a:base !~# '#' - " we look for wiki files - - if a:base =~# '^wiki\d:' - let wikinumber = eval(matchstr(a:base, '^wiki\zs\d')) - if wikinumber >= vimwiki#vars#number_of_wikis() - return [] - endif - let prefix = matchstr(a:base, '^wiki\d:\zs.*') - let scheme = matchstr(a:base, '^wiki\d:\ze') - elseif a:base =~# '^diary:' - let wikinumber = -1 - let prefix = matchstr(a:base, '^diary:\zs.*') - let scheme = matchstr(a:base, '^diary:\ze') - else " current wiki - let wikinumber = vimwiki#vars#get_bufferlocal('wiki_nr') - let prefix = a:base - let scheme = '' - endif - - let links = vimwiki#base#get_wikilinks(wikinumber, 1) - let result = [] - for wikifile in links - if wikifile =~ '^'.vimwiki#u#escape(prefix) - call add(result, scheme . wikifile) - endif - endfor - return result - - else - " we look for anchors in the given wikifile - - let segments = split(a:base, '#', 1) - let given_wikifile = segments[0] == '' ? expand('%:t:r') : segments[0] - let link_infos = vimwiki#base#resolve_link(given_wikifile.'#') - let wikifile = link_infos.filename - let syntax = vimwiki#vars#get_wikilocal('syntax', link_infos.index) - let anchors = vimwiki#base#get_anchors(wikifile, syntax) - - let filtered_anchors = [] - let given_anchor = join(segments[1:], '#') - for anchor in anchors - if anchor =~# '^'.vimwiki#u#escape(given_anchor) - call add(filtered_anchors, segments[0].'#'.anchor) - endif - endfor - return filtered_anchors - - endif - endif -endfunction - -setlocal omnifunc=Complete_wikifiles - - - -" settings necessary for the automatic formatting of lists -setlocal autoindent -setlocal nosmartindent -setlocal nocindent -setlocal comments="" -setlocal formatoptions-=c -setlocal formatoptions-=r -setlocal formatoptions-=o -setlocal formatoptions-=2 -setlocal formatoptions+=n - -let &formatlistpat = vimwiki#vars#get_syntaxlocal('rxListItem') - -if !empty(&langmap) - " Valid only if langmap is a comma separated pairs of chars - let s:l_o = matchstr(&langmap, '\C,\zs.\zeo,') - if s:l_o - exe 'nnoremap <silent> <buffer> '.s:l_o.' :call vimwiki#lst#kbd_o()<CR>a' - endif - - let s:l_O = matchstr(&langmap, '\C,\zs.\zeO,') - if s:l_O - exe 'nnoremap <silent> <buffer> '.s:l_O.' :call vimwiki#lst#kbd_O()<CR>a' - endif -endif - - - -" ------------------------------------------------ -" Folding stuff -" ------------------------------------------------ - -function! VimwikiFoldListLevel(lnum) - return vimwiki#lst#fold_level(a:lnum) -endfunction - - -function! VimwikiFoldLevel(lnum) - let line = getline(a:lnum) - - " Header/section folding... - if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') - return '>'.vimwiki#u#count_first_sym(line) - " Code block folding... - elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreStart') - return 'a1' - elseif line =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') - return 's1' - else - return "=" - endif -endfunction - - -" Constants used by VimwikiFoldText -" use \u2026 and \u21b2 (or \u2424) if enc=utf-8 to save screen space -let s:ellipsis = (&enc ==? 'utf-8') ? "\u2026" : "..." -let s:ell_len = strlen(s:ellipsis) -let s:newline = (&enc ==? 'utf-8') ? "\u21b2 " : " " -let s:tolerance = 5 - - -" unused -function! s:shorten_text_simple(text, len) - let spare_len = a:len - len(a:text) - return (spare_len>=0) ? [a:text,spare_len] : [a:text[0:a:len].s:ellipsis, -1] -endfunction - - -" 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" -" (so that -s:tolerance <= spare <= s:tolerance, "string" ends with s:ellipsis) -function! s:shorten_text(text, len) - " returns [string, spare] - " 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 - " indexes on it, then use original string to break at selected index. - let text_pattern = substitute(a:text, '\m\S', '.', 'g') - let spare_len = a:len - strlen(text_pattern) - if (spare_len + s:tolerance >= 0) - return [a:text, spare_len] - endif - " try to break on a space; assumes a:len-s:ell_len >= s:tolerance - let newlen = a:len - s:ell_len - let idx = strridx(text_pattern, ' ', newlen + s:tolerance) - let break_idx = (idx + s:tolerance >= newlen) ? idx : newlen - return [matchstr(a:text, '\m^.\{'.break_idx.'\}').s:ellipsis, newlen - break_idx] -endfunction - - -function! VimwikiFoldText() - let line = getline(v:foldstart) - let main_text = substitute(line, '^\s*', repeat(' ',indent(v:foldstart)), '') - let fold_len = v:foldend - v:foldstart + 1 - let len_text = ' ['.fold_len.'] ' - if line !~# vimwiki#vars#get_syntaxlocal('rxPreStart') - let [main_text, spare_len] = s:shorten_text(main_text, 50) - return main_text.len_text - else - " fold-text for code blocks: use one or two of the starting lines - let [main_text, spare_len] = s:shorten_text(main_text, 24) - let line1 = substitute(getline(v:foldstart+1), '^\s*', ' ', '') - let [content_text, spare_len] = s:shorten_text(line1, spare_len+20) - if spare_len > s:tolerance && fold_len > 3 - let line2 = substitute(getline(v:foldstart+2), '^\s*', s:newline, '') - let [more_text, spare_len] = s:shorten_text(line2, spare_len+12) - let content_text .= more_text - endif - return main_text.len_text.content_text - endif -endfunction - - - -" ------------------------------------------------ -" Commands -" ------------------------------------------------ - -command! -buffer Vimwiki2HTML - \ if filewritable(expand('%')) | silent noautocmd w | endif - \ <bar> - \ let res = vimwiki#html#Wiki2HTML(expand(vimwiki#vars#get_wikilocal('path_html')), - \ expand('%')) - \ <bar> - \ if res != '' | echo 'Vimwiki: HTML conversion is done, output: ' - \ . expand(vimwiki#vars#get_wikilocal('path_html')) | endif -command! -buffer Vimwiki2HTMLBrowse - \ if filewritable(expand('%')) | silent noautocmd w | endif - \ <bar> - \ call vimwiki#base#system_open_link(vimwiki#html#Wiki2HTML( - \ expand(vimwiki#vars#get_wikilocal('path_html')), - \ expand('%'))) -command! -buffer VimwikiAll2HTML - \ call vimwiki#html#WikiAll2HTML(expand(vimwiki#vars#get_wikilocal('path_html'))) - -command! -buffer VimwikiTOC call vimwiki#base#table_of_contents(1) - -command! -buffer VimwikiNextLink call vimwiki#base#find_next_link() -command! -buffer VimwikiPrevLink call vimwiki#base#find_prev_link() -command! -buffer VimwikiDeleteLink call vimwiki#base#delete_link() -command! -buffer VimwikiRenameLink call vimwiki#base#rename_link() -command! -buffer VimwikiFollowLink call vimwiki#base#follow_link('nosplit', 0, 1) -command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link() -command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('hsplit', 0, 1) -command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit', 0, 1) - -command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link(<f-args>) - -command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tab', 0, 1) - -command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links() - -command! -buffer -nargs=0 VimwikiBacklinks call vimwiki#base#backlinks() -command! -buffer -nargs=0 VWB call vimwiki#base#backlinks() - -exe 'command! -buffer -nargs=* VimwikiSearch lvimgrep <args> '. - \ escape(vimwiki#vars#get_wikilocal('path').'**/*'.vimwiki#vars#get_wikilocal('ext'), ' ') - -exe 'command! -buffer -nargs=* VWS lvimgrep <args> '. - \ escape(vimwiki#vars#get_wikilocal('path').'**/*'.vimwiki#vars#get_wikilocal('ext'), ' ') - -command! -buffer -nargs=+ -complete=custom,vimwiki#base#complete_links_escaped - \ VimwikiGoto call vimwiki#base#goto(<f-args>) - -command! -buffer VimwikiCheckLinks call vimwiki#base#check_links() - -" list commands -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 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 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 VimwikiRemoveCBInList call vimwiki#lst#remove_cb_in_list() -command! -buffer VimwikiRenumberList call vimwiki#lst#adjust_numbered_list() -command! -buffer VimwikiRenumberAllLists call vimwiki#lst#adjust_whole_buffer() -command! -buffer VimwikiListToggle call vimwiki#lst#toggle_list_item() - -" table commands -command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create(<f-args>) -command! -buffer VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq') -command! -buffer VimwikiTableAlignW call vimwiki#tbl#align_or_cmd('gww') -command! -buffer VimwikiTableMoveColumnLeft call vimwiki#tbl#move_column_left() -command! -buffer VimwikiTableMoveColumnRight call vimwiki#tbl#move_column_right() - -" diary commands -command! -buffer VimwikiDiaryNextDay call vimwiki#diary#goto_next_day() -command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day() - -" tags commands -command! -buffer -bang VimwikiRebuildTags call vimwiki#tags#update_tags(1, '<bang>') -command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags - \ VimwikiSearchTags VimwikiSearch /:<args>:/ -command! -buffer -nargs=* -complete=custom,vimwiki#tags#complete_tags - \ VimwikiGenerateTags call vimwiki#tags#generate_tags(<f-args>) - -command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p')) -command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p')) - - -" ------------------------------------------------ -" Keybindings -" ------------------------------------------------ - -if vimwiki#vars#get_global('use_mouse') - nmap <buffer> <S-LeftMouse> <NOP> - nmap <buffer> <C-LeftMouse> <NOP> - 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> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR> - nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR> -endif - - -if !hasmapto('<Plug>Vimwiki2HTML') - exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'h <Plug>Vimwiki2HTML' -endif -nnoremap <script><buffer> <Plug>Vimwiki2HTML :Vimwiki2HTML<CR> - -if !hasmapto('<Plug>Vimwiki2HTMLBrowse') - exe 'nmap <buffer> '.vimwiki#vars#get_global('map_prefix').'hh <Plug>Vimwiki2HTMLBrowse' -endif -nnoremap <script><buffer> <Plug>Vimwiki2HTMLBrowse :Vimwiki2HTMLBrowse<CR> - -if !hasmapto('<Plug>VimwikiFollowLink') - nmap <silent><buffer> <CR> <Plug>VimwikiFollowLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiFollowLink :VimwikiFollowLink<CR> - -if !hasmapto('<Plug>VimwikiSplitLink') - nmap <silent><buffer> <S-CR> <Plug>VimwikiSplitLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiSplitLink :VimwikiSplitLink<CR> - -if !hasmapto('<Plug>VimwikiVSplitLink') - nmap <silent><buffer> <C-CR> <Plug>VimwikiVSplitLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR> - -if !hasmapto('<Plug>VimwikiNormalizeLink') - nmap <silent><buffer> + <Plug>VimwikiNormalizeLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLink :VimwikiNormalizeLink 0<CR> - -if !hasmapto('<Plug>VimwikiNormalizeLinkVisual') - vmap <silent><buffer> + <Plug>VimwikiNormalizeLinkVisual -endif -vnoremap <silent><script><buffer> <Plug>VimwikiNormalizeLinkVisual :<C-U>VimwikiNormalizeLink 1<CR> - -if !hasmapto('<Plug>VimwikiNormalizeLinkVisualCR') - vmap <silent><buffer> <CR> <Plug>VimwikiNormalizeLinkVisualCR -endif -vnoremap <silent><script><buffer> - \ <Plug>VimwikiNormalizeLinkVisualCR :<C-U>VimwikiNormalizeLink 1<CR> - -if !hasmapto('<Plug>VimwikiTabnewLink') - nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink - nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiTabnewLink :VimwikiTabnewLink<CR> - -if !hasmapto('<Plug>VimwikiGoBackLink') - nmap <silent><buffer> <BS> <Plug>VimwikiGoBackLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiGoBackLink :VimwikiGoBackLink<CR> - -if !hasmapto('<Plug>VimwikiNextLink') - nmap <silent><buffer> <TAB> <Plug>VimwikiNextLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiNextLink :VimwikiNextLink<CR> - -if !hasmapto('<Plug>VimwikiPrevLink') - nmap <silent><buffer> <S-TAB> <Plug>VimwikiPrevLink -endif -nnoremap <silent><script><buffer> <Plug>VimwikiPrevLink :VimwikiPrevLink<CR> - -if !hasmapto('<Plug>VimwikiDeleteLink') - exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'d <Plug>VimwikiDeleteLink' -endif -nnoremap <silent><script><buffer> <Plug>VimwikiDeleteLink :VimwikiDeleteLink<CR> - -if !hasmapto('<Plug>VimwikiRenameLink') - exe 'nmap <silent><buffer> '.vimwiki#vars#get_global('map_prefix').'r <Plug>VimwikiRenameLink' -endif -nnoremap <silent><script><buffer> <Plug>VimwikiRenameLink :VimwikiRenameLink<CR> - -if !hasmapto('<Plug>VimwikiDiaryNextDay') - nmap <silent><buffer> <C-Down> <Plug>VimwikiDiaryNextDay -endif -nnoremap <silent><script><buffer> <Plug>VimwikiDiaryNextDay :VimwikiDiaryNextDay<CR> - -if !hasmapto('<Plug>VimwikiDiaryPrevDay') - nmap <silent><buffer> <C-Up> <Plug>VimwikiDiaryPrevDay -endif -nnoremap <silent><script><buffer> <Plug>VimwikiDiaryPrevDay :VimwikiDiaryPrevDay<CR> - -" List mappings -if !hasmapto('<Plug>VimwikiToggleListItem') - nmap <silent><buffer> <C-Space> <Plug>VimwikiToggleListItem - vmap <silent><buffer> <C-Space> <Plug>VimwikiToggleListItem - if has("unix") - nmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem - vmap <silent><buffer> <C-@> <Plug>VimwikiToggleListItem - 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> - \ <Plug>VimwikiToggleRejectedListItem :VimwikiToggleRejectedListItem<CR> -vnoremap <silent><script><buffer> - \ <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') - imap <silent><buffer> <C-D> <Plug>VimwikiDecreaseLvlSingleItem -endif -inoremap <silent><script><buffer> <Plug>VimwikiDecreaseLvlSingleItem - \ <C-O>:VimwikiListChangeLvl decrease 0<CR> - -if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem', 'i') - imap <silent><buffer> <C-T> <Plug>VimwikiIncreaseLvlSingleItem -endif -inoremap <silent><script><buffer> <Plug>VimwikiIncreaseLvlSingleItem - \ <C-O>:VimwikiListChangeLvl increase 0<CR> - -if !hasmapto('<Plug>VimwikiListNextSymbol', 'i') - imap <silent><buffer> <C-L><C-J> <Plug>VimwikiListNextSymbol -endif -inoremap <silent><script><buffer> <Plug>VimwikiListNextSymbol - \ <C-O>:VimwikiListChangeSymbolI next<CR> - -if !hasmapto('<Plug>VimwikiListPrevSymbol', 'i') - imap <silent><buffer> <C-L><C-K> <Plug>VimwikiListPrevSymbol -endif -inoremap <silent><script><buffer> <Plug>VimwikiListPrevSymbol - \ <C-O>:VimwikiListChangeSymbolI prev<CR> - -if !hasmapto('<Plug>VimwikiListToggle', 'i') - imap <silent><buffer> <C-L><C-M> <Plug>VimwikiListToggle -endif -inoremap <silent><script><buffer> <Plug>VimwikiListToggle <Esc>:VimwikiListToggle<CR> - -nnoremap <silent> <buffer> o :<C-U>call vimwiki#lst#kbd_o()<CR> -nnoremap <silent> <buffer> O :<C-U>call vimwiki#lst#kbd_O()<CR> - -if !hasmapto('<Plug>VimwikiRenumberList') - nmap <silent><buffer> glr <Plug>VimwikiRenumberList -endif -nnoremap <silent><script><buffer> <Plug>VimwikiRenumberList :VimwikiRenumberList<CR> - -if !hasmapto('<Plug>VimwikiRenumberAllLists') - nmap <silent><buffer> gLr <Plug>VimwikiRenumberAllLists - nmap <silent><buffer> gLR <Plug>VimwikiRenumberAllLists -endif -nnoremap <silent><script><buffer> <Plug>VimwikiRenumberAllLists :VimwikiRenumberAllLists<CR> - -if !hasmapto('<Plug>VimwikiDecreaseLvlSingleItem') - map <silent><buffer> glh <Plug>VimwikiDecreaseLvlSingleItem -endif -noremap <silent><script><buffer> - \ <Plug>VimwikiDecreaseLvlSingleItem :VimwikiListChangeLvl decrease 0<CR> - -if !hasmapto('<Plug>VimwikiIncreaseLvlSingleItem') - map <silent><buffer> gll <Plug>VimwikiIncreaseLvlSingleItem -endif -noremap <silent><script><buffer> - \ <Plug>VimwikiIncreaseLvlSingleItem :VimwikiListChangeLvl increase 0<CR> - -if !hasmapto('<Plug>VimwikiDecreaseLvlWholeItem') - map <silent><buffer> gLh <Plug>VimwikiDecreaseLvlWholeItem - map <silent><buffer> gLH <Plug>VimwikiDecreaseLvlWholeItem -endif -noremap <silent><script><buffer> - \ <Plug>VimwikiDecreaseLvlWholeItem :VimwikiListChangeLvl decrease 1<CR> - -if !hasmapto('<Plug>VimwikiIncreaseLvlWholeItem') - map <silent><buffer> gLl <Plug>VimwikiIncreaseLvlWholeItem - map <silent><buffer> gLL <Plug>VimwikiIncreaseLvlWholeItem -endif -noremap <silent><script><buffer> - \ <Plug>VimwikiIncreaseLvlWholeItem :VimwikiListChangeLvl increase 1<CR> - -if !hasmapto('<Plug>VimwikiRemoveSingleCB') - map <silent><buffer> gl<Space> <Plug>VimwikiRemoveSingleCB -endif -noremap <silent><script><buffer> <Plug>VimwikiRemoveSingleCB :VimwikiRemoveSingleCB<CR> - -if !hasmapto('<Plug>VimwikiRemoveCBInList') - map <silent><buffer> gL<Space> <Plug>VimwikiRemoveCBInList -endif -noremap <silent><script><buffer> <Plug>VimwikiRemoveCBInList :VimwikiRemoveCBInList<CR> - -for s:char in vimwiki#vars#get_syntaxlocal('bullet_types') - if !hasmapto(':VimwikiChangeSymbolTo '.s:char.'<CR>') - exe 'noremap <silent><buffer> gl'.s:char.' :VimwikiChangeSymbolTo '.s:char.'<CR>' - endif - if !hasmapto(':VimwikiChangeSymbolInListTo '.s:char.'<CR>') - exe 'noremap <silent><buffer> gL'.s:char.' :VimwikiChangeSymbolInListTo '.s:char.'<CR>' - endif -endfor - -for s:typ in vimwiki#vars#get_syntaxlocal('number_types') - if !hasmapto(':VimwikiChangeSymbolTo '.s:typ.'<CR>') - exe 'noremap <silent><buffer> gl'.s:typ[0].' :VimwikiChangeSymbolTo '.s:typ.'<CR>' - endif - if !hasmapto(':VimwikiChangeSymbolInListTo '.s:typ.'<CR>') - exe 'noremap <silent><buffer> gL'.s:typ[0].' :VimwikiChangeSymbolInListTo '.s:typ.'<CR>' - endif -endfor - - -function! s:CR(normal, just_mrkr) - if vimwiki#vars#get_global('table_mappings') - let res = vimwiki#tbl#kbd_cr() - if res != "" - exe "normal! " . res . "\<Right>" - startinsert - return - endif - endif - call vimwiki#lst#kbd_cr(a:normal, a:just_mrkr) -endfunction - -if !hasmapto('VimwikiReturn', 'i') - if maparg('<CR>', 'i') !~? '<Esc>:VimwikiReturn' - inoremap <silent><buffer> <CR> <Esc>:VimwikiReturn 1 5<CR> - endif - if maparg('<S-CR>', 'i') !~? '<Esc>:VimwikiReturn' - inoremap <silent><buffer> <S-CR> <Esc>:VimwikiReturn 2 2<CR> - endif -endif - -"Table mappings - if vimwiki#vars#get_global('table_mappings') - inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab() - inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab() - endif - - - -nnoremap <buffer> gqq :VimwikiTableAlignQ<CR> -nnoremap <buffer> gww :VimwikiTableAlignW<CR> -if !hasmapto('<Plug>VimwikiTableMoveColumnLeft') - nmap <silent><buffer> <A-Left> <Plug>VimwikiTableMoveColumnLeft -endif -nnoremap <silent><script><buffer> <Plug>VimwikiTableMoveColumnLeft :VimwikiTableMoveColumnLeft<CR> -if !hasmapto('<Plug>VimwikiTableMoveColumnRight') - nmap <silent><buffer> <A-Right> <Plug>VimwikiTableMoveColumnRight -endif -nnoremap <silent><script><buffer> - \ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR> - - - -" ------------------------------------------------ -" Text objects -" ------------------------------------------------ - -onoremap <silent><buffer> ah :<C-U>call vimwiki#base#TO_header(0, 0, v:count1)<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> -vnoremap <silent><buffer> a\ :<C-U>call vimwiki#base#TO_table_cell(0, 1)<CR> - -onoremap <silent><buffer> i\ :<C-U>call vimwiki#base#TO_table_cell(1, 0)<CR> -vnoremap <silent><buffer> i\ :<C-U>call vimwiki#base#TO_table_cell(1, 1)<CR> - -onoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 0)<CR> -vnoremap <silent><buffer> ac :<C-U>call vimwiki#base#TO_table_col(0, 1)<CR> - -onoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 0)<CR> -vnoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR> - -onoremap <silent><buffer> al :<C-U>call vimwiki#lst#TO_list_item(0, 0)<CR> -vnoremap <silent><buffer> al :<C-U>call vimwiki#lst#TO_list_item(0, 1)<CR> - -onoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 0)<CR> -vnoremap <silent><buffer> il :<C-U>call vimwiki#lst#TO_list_item(1, 1)<CR> - -if !hasmapto('<Plug>VimwikiAddHeaderLevel') - nmap <silent><buffer> = <Plug>VimwikiAddHeaderLevel -endif -nnoremap <silent><buffer> <Plug>VimwikiAddHeaderLevel :<C-U>call vimwiki#base#AddHeaderLevel()<CR> - -if !hasmapto('<Plug>VimwikiRemoveHeaderLevel') - nmap <silent><buffer> - <Plug>VimwikiRemoveHeaderLevel -endif -nnoremap <silent><buffer> <Plug>VimwikiRemoveHeaderLevel : - \<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> - - - -if vimwiki#vars#get_wikilocal('auto_export') - " Automatically generate HTML on page write. - augroup vimwiki - au BufWritePost <buffer> - \ call vimwiki#html#Wiki2HTML(expand(vimwiki#vars#get_wikilocal('path_html')), - \ expand('%')) - augroup END -endif - -if vimwiki#vars#get_wikilocal('auto_toc') - " Automatically update the TOC *before* the file is written - augroup vimwiki - au BufWritePre <buffer> call vimwiki#base#table_of_contents(0) - augroup END -endif - -if vimwiki#vars#get_wikilocal('auto_tags') - " Automatically update tags metadata on page write. - augroup vimwiki - au BufWritePost <buffer> call vimwiki#tags#update_tags(0, '') - augroup END -endif - diff --git a/vim/.vim/plugged/vimwiki/plugin/vimwiki.vim b/vim/.vim/plugged/vimwiki/plugin/vimwiki.vim deleted file mode 100644 index 4e0ee91..0000000 --- a/vim/.vim/plugged/vimwiki/plugin/vimwiki.vim +++ /dev/null @@ -1,396 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki plugin file -" Home: https://github.com/vimwiki/vimwiki/ -" GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki - - -if exists("g:loaded_vimwiki") || &cp - finish -endif -let g:loaded_vimwiki = 1 - -" Set to version number for release, otherwise -1 for dev-branch -let s:plugin_vers = -1 - -" Get the directory the script is installed in -let s:plugin_dir = expand('<sfile>:p:h:h') - -let s:old_cpo = &cpo -set cpo&vim - - -if exists('g:vimwiki_autowriteall') - let s:vimwiki_autowriteall_saved = g:vimwiki_autowriteall -else - let s:vimwiki_autowriteall_saved = 1 -endif - - -" this is called when the cursor leaves the buffer -function! s:setup_buffer_leave() - " 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) - if vimwiki#vars#get_bufferlocal('wiki_nr') == -1 - return - endif - - let &autowriteall = s:vimwiki_autowriteall_saved - - if vimwiki#vars#get_global('menu') != "" - exe 'nmenu disable '.vimwiki#vars#get_global('menu').'.Table' - endif -endfunction - - -" create a new temporary wiki for the current buffer -function! s:create_temporary_wiki() - let path = expand('%:p:h') - let ext = '.'.expand('%:e') - - let syntax_mapping = vimwiki#vars#get_global('ext2syntax') - if has_key(syntax_mapping, ext) - let syntax = syntax_mapping[ext] - else - let syntax = vimwiki#vars#get_wikilocal_default('syntax') - endif - - let new_temp_wiki_settings = {'path': path, - \ 'ext': ext, - \ 'syntax': syntax, - \ } - - call vimwiki#vars#add_temporary_wiki(new_temp_wiki_settings) - - " Update the wiki number of the current buffer, because it may have changed when adding this - " temporary wiki. - call vimwiki#vars#set_bufferlocal('wiki_nr', vimwiki#base#find_wiki(expand('%:p'))) -endfunction - - -" This function is called when Vim opens a new buffer with a known wiki -" 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') - if wiki_nr == -1 " it's not in a known wiki directory - if vimwiki#vars#get_global('global_ext') - call s:create_temporary_wiki() - else - " the user does not want a temporary wiki, so do nothing - return - endif - endif - - if vimwiki#vars#get_wikilocal('maxhi') - call vimwiki#vars#set_bufferlocal('existing_wikifiles', vimwiki#base#get_wikilinks(wiki_nr, 1)) - call vimwiki#vars#set_bufferlocal('existing_wikidirs', - \ vimwiki#base#get_wiki_directories(wiki_nr)) - endif - - " 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 -function! s:setup_buffer_enter() - " 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) - if vimwiki#vars#get_bufferlocal('wiki_nr') == -1 - return - endif - - if &filetype != 'vimwiki' - setfiletype vimwiki - endif - - call s:set_global_options() - - call s:set_windowlocal_options() -endfunction - - -function! s:setup_cleared_syntax() - " highlight groups that get cleared - " on colorscheme change because they are not linked to Vim-predefined groups - hi def VimwikiBold term=bold cterm=bold gui=bold - hi def VimwikiItalic term=italic cterm=italic gui=italic - hi def VimwikiBoldItalic term=bold cterm=bold gui=bold,italic - hi def VimwikiUnderline gui=underline - if vimwiki#vars#get_global('hl_headers') == 1 - 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' - endfor - endif -endfunction - - -function! s:vimwiki_get_known_extensions() - " Getting all extensions that different wikis could have - let extensions = {} - for idx in range(vimwiki#vars#number_of_wikis()) - let ext = vimwiki#vars#get_wikilocal('ext', idx) - let extensions[ext] = 1 - endfor - " append extensions from g:vimwiki_ext2syntax - for ext in keys(vimwiki#vars#get_global('ext2syntax')) - let extensions[ext] = 1 - endfor - return keys(extensions) -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#vars#get_wikilocal('path') - endif -endfunction - - -function! s:get_version() - if s:plugin_vers != -1 - echo "Stable version: " . s:plugin_vers - else - let a:plugin_rev = system("git --git-dir " . s:plugin_dir . "/.git rev-parse --short HEAD") - let a:plugin_branch = system("git --git-dir " . s:plugin_dir . "/.git rev-parse --abbrev-ref HEAD") - let a:plugin_date = system("git --git-dir " . s:plugin_dir . "/.git show -s --format=%ci") - if v:shell_error == 0 - echo "Branch: " . a:plugin_branch - echo "Revision: " . a:plugin_rev - echo "Date: " . a:plugin_date - else - echo "Unknown version" - endif - endif -endfunction - - - -" Initialization of Vimwiki starts here. Make sure everything below does not -" cause autoload/vimwiki/base.vim to be loaded - -call vimwiki#vars#init() - - -" Define callback functions which the user can redefine -if !exists("*VimwikiLinkHandler") - function VimwikiLinkHandler(url) - return 0 - endfunction -endif - -if !exists("*VimwikiLinkConverter") - function VimwikiLinkConverter(url, source, target) - " Return the empty string when unable to process link - return '' - endfunction -endif - -if !exists("*VimwikiWikiIncludeHandler") - function! VimwikiWikiIncludeHandler(value) - return '' - endfunction -endif - - - -" Define autocommands for all known wiki extensions - -let s:known_extensions = s:vimwiki_get_known_extensions() - -if index(s:known_extensions, '.wiki') > -1 - augroup filetypedetect - " clear FlexWiki's stuff - au! * *.wiki - augroup end -endif - -augroup vimwiki - autocmd! - for s:ext in s:known_extensions - 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 ColorScheme *'.s:ext.' call s:setup_cleared_syntax()' - " Format tables when exit from insert mode. Do not use textwidth to - " autowrap tables. - if vimwiki#vars#get_global('table_auto_fmt') - exe 'autocmd InsertLeave *'.s:ext.' call vimwiki#tbl#format(line("."))' - exe 'autocmd InsertEnter *'.s:ext.' call vimwiki#tbl#reset_tw(line("."))' - 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 -augroup END - - - -command! VimwikiUISelect call vimwiki#base#ui_select() -" why not using <count> instead of v:count1? -" See https://github.com/vimwiki-backup/vimwiki/issues/324 -command! -count=1 VimwikiIndex - \ call vimwiki#base#goto_index(v:count1) -command! -count=1 VimwikiTabIndex - \ call vimwiki#base#goto_index(v:count1, 1) - -command! -count=1 VimwikiDiaryIndex - \ call vimwiki#diary#goto_diary_index(v:count1) -command! -count=1 VimwikiMakeDiaryNote - \ call vimwiki#diary#make_note(v:count) -command! -count=1 VimwikiTabMakeDiaryNote - \ call vimwiki#diary#make_note(v:count, 1) -command! -count=1 VimwikiMakeYesterdayDiaryNote - \ call vimwiki#diary#make_note(v:count, 0, - \ vimwiki#diary#diary_date_link(localtime() - 60*60*24)) -command! -count=1 VimwikiMakeTomorrowDiaryNote - \ call vimwiki#diary#make_note(v:count, 0, - \ vimwiki#diary#diary_date_link(localtime() + 60*60*24)) - -command! VimwikiDiaryGenerateLinks - \ call vimwiki#diary#generate_diary_section() - -command! VimwikiShowVersion call s:get_version() - - - -let s:map_prefix = vimwiki#vars#get_global('map_prefix') - -if !hasmapto('<Plug>VimwikiIndex') - exe 'nmap <silent><unique> '.s:map_prefix.'w <Plug>VimwikiIndex' -endif -nnoremap <unique><script> <Plug>VimwikiIndex :VimwikiIndex<CR> - -if !hasmapto('<Plug>VimwikiTabIndex') - exe 'nmap <silent><unique> '.s:map_prefix.'t <Plug>VimwikiTabIndex' -endif -nnoremap <unique><script> <Plug>VimwikiTabIndex :VimwikiTabIndex<CR> - -if !hasmapto('<Plug>VimwikiUISelect') - exe 'nmap <silent><unique> '.s:map_prefix.'s <Plug>VimwikiUISelect' -endif -nnoremap <unique><script> <Plug>VimwikiUISelect :VimwikiUISelect<CR> - -if !hasmapto('<Plug>VimwikiDiaryIndex') - exe 'nmap <silent><unique> '.s:map_prefix.'i <Plug>VimwikiDiaryIndex' -endif -nnoremap <unique><script> <Plug>VimwikiDiaryIndex :VimwikiDiaryIndex<CR> - -if !hasmapto('<Plug>VimwikiDiaryGenerateLinks') - exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>i <Plug>VimwikiDiaryGenerateLinks' -endif -nnoremap <unique><script> <Plug>VimwikiDiaryGenerateLinks :VimwikiDiaryGenerateLinks<CR> - -if !hasmapto('<Plug>VimwikiMakeDiaryNote') - exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>w <Plug>VimwikiMakeDiaryNote' -endif -nnoremap <unique><script> <Plug>VimwikiMakeDiaryNote :VimwikiMakeDiaryNote<CR> - -if !hasmapto('<Plug>VimwikiTabMakeDiaryNote') - exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>t <Plug>VimwikiTabMakeDiaryNote' -endif -nnoremap <unique><script> <Plug>VimwikiTabMakeDiaryNote - \ :VimwikiTabMakeDiaryNote<CR> - -if !hasmapto('<Plug>VimwikiMakeYesterdayDiaryNote') - exe 'nmap <silent><unique> '.s:map_prefix.'<Leader>y <Plug>VimwikiMakeYesterdayDiaryNote' -endif -nnoremap <unique><script> <Plug>VimwikiMakeYesterdayDiaryNote - \ :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> - - - - -function! s:build_menu(topmenu) - for idx in range(vimwiki#vars#number_of_wikis()) - let norm_path = fnamemodify(vimwiki#vars#get_wikilocal('path', idx), ':h:t') - let norm_path = escape(norm_path, '\ \.') - execute 'menu '.a:topmenu.'.Open\ index.'.norm_path. - \ ' :call vimwiki#base#goto_index('.(idx+1).')<CR>' - execute 'menu '.a:topmenu.'.Open/Create\ diary\ note.'.norm_path. - \ ' :call vimwiki#diary#make_note('.(idx+1).')<CR>' - endfor -endfunction - -function! s:build_table_menu(topmenu) - exe 'menu '.a:topmenu.'.-Sep- :' - exe 'menu '.a:topmenu.'.Table.Create\ (enter\ cols\ rows) :VimwikiTable ' - 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\ right<tab><A-Right> :VimwikiTableMoveColumnRight<CR>' - exe 'nmenu disable '.a:topmenu.'.Table' -endfunction - - -if !empty(vimwiki#vars#get_global('menu')) - call s:build_menu(vimwiki#vars#get_global('menu')) - call s:build_table_menu(vimwiki#vars#get_global('menu')) -endif - - -" Hook for calendar.vim -if vimwiki#vars#get_global('use_calendar') - let g:calendar_action = 'vimwiki#diary#calendar_action' - let g:calendar_sign = 'vimwiki#diary#calendar_sign' -endif - - -let &cpo = s:old_cpo diff --git a/vim/.vim/plugged/vimwiki/syntax/vimwiki.vim b/vim/.vim/plugged/vimwiki/syntax/vimwiki.vim deleted file mode 100644 index 512aad9..0000000 --- a/vim/.vim/plugged/vimwiki/syntax/vimwiki.vim +++ /dev/null @@ -1,487 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki syntax file -" Home: https://github.com/vimwiki/vimwiki/ - - -" Quit if syntax file is already loaded -if v:version < 600 - syntax clear -elseif exists("b:current_syntax") - finish -endif - - -let s:current_syntax = vimwiki#vars#get_wikilocal('syntax') - - -call vimwiki#vars#populate_syntax_vars(s:current_syntax) - - -" LINKS: highlighting is complicated due to "nonexistent" links feature -function! s:add_target_syntax_ON(target, type) - let prefix0 = 'syntax match '.a:type.' `' - let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char' - let prefix1 = 'syntax match '.a:type.'T `' - let suffix1 = '` display contained' - execute prefix0. a:target. suffix0 - execute prefix1. a:target. suffix1 -endfunction - - -function! s:add_target_syntax_OFF(target) - let prefix0 = 'syntax match VimwikiNoExistsLink `' - let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,VimwikiLinkChar' - let prefix1 = 'syntax match VimwikiNoExistsLinkT `' - let suffix1 = '` display contained' - execute prefix0. a:target. suffix0 - execute prefix1. a:target. suffix1 -endfunction - - -function! s:highlight_existing_links() - " Wikilink - " Conditional highlighting that depends on the existence of a wiki file or - " directory is only available for *schemeless* wiki links - " Links are set up upon BufEnter (see plugin/...) - let safe_links = '\%('.vimwiki#base#file_pattern( - \ vimwiki#vars#get_bufferlocal('existing_wikifiles')) . '\%(#[^|]*\)\?\|#[^|]*\)' - " Wikilink Dirs set up upon BufEnter (see plugin/...) - let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs')) - - " match [[URL]] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')), - \ safe_links, vimwiki#vars#get_global('rxWikiLinkDescr'), '') - call s:add_target_syntax_ON(target, 'VimwikiLink') - " match [[URL|DESCRIPTION]] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), - \ safe_links, vimwiki#vars#get_global('rxWikiLinkDescr'), '') - call s:add_target_syntax_ON(target, 'VimwikiLink') - - " match {{URL}} - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate1')), - \ safe_links, vimwiki#vars#get_global('rxWikiInclArgs'), '') - call s:add_target_syntax_ON(target, 'VimwikiLink') - " match {{URL|...}} - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate2')), - \ safe_links, vimwiki#vars#get_global('rxWikiInclArgs'), '') - call s:add_target_syntax_ON(target, 'VimwikiLink') - " match [[DIRURL]] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')), - \ safe_dirs, vimwiki#vars#get_global('rxWikiLinkDescr'), '') - call s:add_target_syntax_ON(target, 'VimwikiLink') - " match [[DIRURL|DESCRIPTION]] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), - \ safe_dirs, vimwiki#vars#get_global('rxWikiLinkDescr'), '') - call s:add_target_syntax_ON(target, 'VimwikiLink') -endfunction - - -" use max highlighting - could be quite slow if there are too many wikifiles -if vimwiki#vars#get_wikilocal('maxhi') - " WikiLink - call s:add_target_syntax_OFF(vimwiki#vars#get_syntaxlocal('rxWikiLink')) - " WikiIncl - call s:add_target_syntax_OFF(vimwiki#vars#get_global('rxWikiIncl')) - - " Subsequently, links verified on vimwiki's path are highlighted as existing - call s:highlight_existing_links() -else - " Wikilink - call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWikiLink'), 'VimwikiLink') - " WikiIncl - call s:add_target_syntax_ON(vimwiki#vars#get_global('rxWikiIncl'), 'VimwikiLink') -endif - - -" Weblink -call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink'), 'VimwikiLink') - - -" WikiLink -" All remaining schemes are highlighted automatically -let s:rxSchemes = '\%('. - \ vimwiki#vars#get_global('schemes') . '\|'. - \ vimwiki#vars#get_global('web_schemes1'). - \ '\):' - -" a) match [[nonwiki-scheme-URL]] -let s:target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate1')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), - \ vimwiki#vars#get_global('rxWikiLinkDescr'), '') -call s:add_target_syntax_ON(s:target, 'VimwikiLink') -" b) match [[nonwiki-scheme-URL|DESCRIPTION]] -let s:target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiLinkTemplate2')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiLinkUrl'), - \ vimwiki#vars#get_global('rxWikiLinkDescr'), '') -call s:add_target_syntax_ON(s:target, 'VimwikiLink') - -" a) match {{nonwiki-scheme-URL}} -let s:target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate1')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), - \ vimwiki#vars#get_global('rxWikiInclArgs'), '') -call s:add_target_syntax_ON(s:target, 'VimwikiLink') -" b) match {{nonwiki-scheme-URL}[{...}]} -let s:target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_global('WikiInclTemplate2')), - \ s:rxSchemes.vimwiki#vars#get_global('rxWikiInclUrl'), - \ vimwiki#vars#get_global('rxWikiInclArgs'), '') -call s:add_target_syntax_ON(s:target, 'VimwikiLink') - - - -" Header levels, 1-6 -for s:i in range(1,6) - execute 'syntax match VimwikiHeader'.s:i - \ . ' /'.vimwiki#vars#get_syntaxlocal('rxH'.s:i, s:current_syntax). - \ '/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,'. - \ '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 - - - -" possibly concealed chars -let s:conceal = exists("+conceallevel") ? ' conceal' : '' - -execute 'syn match VimwikiEqInChar contained /'. - \ vimwiki#vars#get_syntaxlocal('char_eqin').'/'.s:conceal -execute 'syn match VimwikiBoldChar contained /'. - \ vimwiki#vars#get_syntaxlocal('char_bold').'/'.s:conceal -execute 'syn match VimwikiItalicChar contained /'. - \ vimwiki#vars#get_syntaxlocal('char_italic').'/'.s:conceal -execute 'syn match VimwikiBoldItalicChar contained /'. - \ vimwiki#vars#get_syntaxlocal('char_bolditalic').'/'.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 - - - - - -let s:options = ' contained transparent contains=NONE' - -" 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 -if exists("+conceallevel") && vimwiki#vars#get_global('url_maxsave') > 0 - let s:options .= s:conceal - execute 'syn match VimwikiLinkRest `\%(///\=[^/ \t]\+/\)\zs\S\+\ze' - \.'\%([/#?]\w\|\S\{'.vimwiki#vars#get_global('url_maxsave').'}\)`'.' cchar=~'.s:options -endif - -" VimwikiLinkChar is for syntax markers (and also URL when a description -" is present) and may be concealed - -" conceal wikilinks -execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rx_wikilink_prefix').'/'.s:options -execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rx_wikilink_suffix').'/'.s:options -execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rx_wikilink_prefix1').'/'.s:options -execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rx_wikilink_suffix1').'/'.s:options - -" conceal wikiincls -execute 'syn match VimwikiLinkChar /'.vimwiki#vars#get_global('rxWikiInclPrefix').'/'.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('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').'/' - - -execute 'syntax match VimwikiTodo /'. vimwiki#vars#get_global('rxTodo') .'/' - - - -" Tables -syntax match VimwikiTableRow /^\s*|.\+|\s*$/ - \ transparent contains=VimwikiCellSeparator, - \ VimwikiLinkT, - \ VimwikiNoExistsLinkT, - \ VimwikiTodo, - \ VimwikiBoldT, - \ VimwikiItalicT, - \ VimwikiBoldItalicT, - \ VimwikiItalicBoldT, - \ VimwikiDelTextT, - \ VimwikiSuperScriptT, - \ VimwikiSubScriptT, - \ VimwikiCodeT, - \ VimwikiEqInT, - \ @Spell -syntax match VimwikiCellSeparator - \ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained - - -" Lists -execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListItemWithoutCB').'/' -execute 'syntax match VimwikiList /'.vimwiki#vars#get_syntaxlocal('rxListDefine').'/' -execute 'syntax match VimwikiListTodo /'.vimwiki#vars#get_syntaxlocal('rxListItem').'/' - -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')[-1] - \ . vimwiki#vars#get_global('listsym_rejected') - \ . ']\]\s.*$/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell' -elseif vimwiki#vars#get_global('hl_cb_checked') == 2 - execute 'syntax match VimwikiCheckBoxDone /' - \ . vimwiki#vars#get_syntaxlocal('rxListItemAndChildren') - \ .'/ contains=VimwikiNoExistsLink,VimwikiLink,@Spell' -endif - - -execute 'syntax match VimwikiEqIn /'.vimwiki#vars#get_syntaxlocal('rxEqIn'). - \ '/ 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 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 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 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 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 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 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 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' - - -" <hr> horizontal rule -execute 'syntax match VimwikiHR /'.vimwiki#vars#get_syntaxlocal('rxHR').'/' - -execute 'syntax region VimwikiPre start=/'.vimwiki#vars#get_syntaxlocal('rxPreStart'). - \ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxPreEnd').'/ contains=@Spell' - -execute 'syntax region VimwikiMath start=/'.vimwiki#vars#get_syntaxlocal('rxMathStart'). - \ '/ end=/'.vimwiki#vars#get_syntaxlocal('rxMathEnd').'/ contains=@Spell' - - -" placeholders -syntax match VimwikiPlaceholder /^\s*%nohtml\s*$/ -syntax match VimwikiPlaceholder - \ /^\s*%title\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite -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 -if vimwiki#vars#get_global('valid_html_tags') != '' - let s:html_tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|') - exe 'syntax match VimwikiHTMLtag #\c</\?\%('.s:html_tags.'\)\%(\s\{-1}\S\{-}\)\{-}\s*/\?>#' - execute 'syntax match VimwikiBold #\c<b>.\{-}</b># contains=VimwikiHTMLTag' - execute 'syntax match VimwikiItalic #\c<i>.\{-}</i># contains=VimwikiHTMLTag' - execute 'syntax match VimwikiUnderline #\c<u>.\{-}</u># contains=VimwikiHTMLTag' - - execute 'syntax match VimwikiComment /'.vimwiki#vars#get_syntaxlocal('rxComment'). - \ '/ contains=@Spell,VimwikiTodo' -endif - -" tags -execute 'syntax match VimwikiTag /'.vimwiki#vars#get_syntaxlocal('rxTags').'/' - - - -" header groups highlighting -if vimwiki#vars#get_global('hl_headers') == 0 - " Strangely in default colorscheme Title group is not set to bold for cterm... - if !exists("g:colors_name") - hi Title cterm=bold - endif - for s:i in range(1,6) - execute 'hi def link VimwikiHeader'.s:i.' Title' - endfor -else - 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('hcolor_ctermfg_'.&bg)[s:i-1].' term=bold cterm=bold' - endfor -endif - - - -hi def link VimwikiMarkers Normal - -hi def link VimwikiEqIn Number -hi def link VimwikiEqInT VimwikiEqIn - -hi def VimwikiBold term=bold cterm=bold gui=bold -hi def link VimwikiBoldT VimwikiBold - -hi def VimwikiItalic term=italic cterm=italic gui=italic -hi def link VimwikiItalicT VimwikiItalic - -hi def VimwikiBoldItalic term=bold cterm=bold gui=bold,italic -hi def link VimwikiItalicBold VimwikiBoldItalic -hi def link VimwikiBoldItalicT VimwikiBoldItalic -hi def link VimwikiItalicBoldT VimwikiBoldItalic - -hi def VimwikiUnderline gui=underline - -hi def link VimwikiCode PreProc -hi def link VimwikiCodeT VimwikiCode - -hi def link VimwikiPre PreProc -hi def link VimwikiPreT VimwikiPre - -hi def link VimwikiMath Number -hi def link VimwikiMathT VimwikiMath - -hi def link VimwikiNoExistsLink SpellBad -hi def link VimwikiNoExistsLinkT VimwikiNoExistsLink - -hi def link VimwikiLink Underlined -hi def link VimwikiLinkT VimwikiLink - -hi def link VimwikiList Identifier -hi def link VimwikiListTodo VimwikiList -hi def link VimwikiCheckBoxDone Comment -hi def link VimwikiHR Identifier -hi def link VimwikiTag Keyword - -hi def link VimwikiDelText Constant -hi def link VimwikiDelTextT VimwikiDelText - -hi def link VimwikiSuperScript Number -hi def link VimwikiSuperScriptT VimwikiSuperScript - -hi def link VimwikiSubScript Number -hi def link VimwikiSubScriptT VimwikiSubScript - -hi def link VimwikiTodo Todo -hi def link VimwikiComment Comment - -hi def link VimwikiPlaceholder SpecialKey -hi def link VimwikiPlaceholderParam String -hi def link VimwikiHTMLtag SpecialKey - -hi def link VimwikiEqInChar VimwikiMarkers -hi def link VimwikiCellSeparator VimwikiMarkers -hi def link VimwikiBoldChar VimwikiMarkers -hi def link VimwikiItalicChar VimwikiMarkers -hi def link VimwikiBoldItalicChar VimwikiMarkers -hi def link VimwikiItalicBoldChar VimwikiMarkers -hi def link VimwikiDelTextChar VimwikiMarkers -hi def link VimwikiSuperScriptChar VimwikiMarkers -hi def link VimwikiSubScriptChar VimwikiMarkers -hi def link VimwikiCodeChar VimwikiMarkers -hi def link VimwikiHeaderChar VimwikiMarkers - -hi def link VimwikiEqInCharT VimwikiMarkers -hi def link VimwikiBoldCharT VimwikiMarkers -hi def link VimwikiItalicCharT VimwikiMarkers -hi def link VimwikiBoldItalicCharT VimwikiMarkers -hi def link VimwikiItalicBoldCharT VimwikiMarkers -hi def link VimwikiDelTextCharT VimwikiMarkers -hi def link VimwikiSuperScriptCharT VimwikiMarkers -hi def link VimwikiSubScriptCharT VimwikiMarkers -hi def link VimwikiCodeCharT VimwikiMarkers -hi def link VimwikiHeaderCharT VimwikiMarkers -hi def link VimwikiLinkCharT VimwikiLinkT -hi def link VimwikiNoExistsLinkCharT VimwikiNoExistsLinkT - - -" Load syntax-specific functionality -call vimwiki#u#reload_regexes_custom() - - -" FIXME it now does not make sense to pretend there is a single syntax "vimwiki" -let b:current_syntax="vimwiki" - - -" EMBEDDED syntax setup -let s:nested = vimwiki#vars#get_wikilocal('nested_syntaxes') -if vimwiki#vars#get_wikilocal('automatic_nested_syntaxes') - let s:nested = extend(s:nested, vimwiki#base#detect_nested_syntax(), "keep") -endif -if !empty(s:nested) - for [s:hl_syntax, s:vim_syntax] in items(s:nested) - call vimwiki#base#nested_syntax(s:vim_syntax, - \ vimwiki#vars#get_syntaxlocal('rxPreStart').'\%(.*[[:blank:][:punct:]]\)\?'. - \ s:hl_syntax.'\%([[:blank:][:punct:]].*\)\?', - \ vimwiki#vars#get_syntaxlocal('rxPreEnd'), 'VimwikiPre') - endfor -endif - - -" LaTeX -call vimwiki#base#nested_syntax('tex', - \ vimwiki#vars#get_syntaxlocal('rxMathStart').'\%(.*[[:blank:][:punct:]]\)\?'. - \ '\%([[:blank:][:punct:]].*\)\?', - \ vimwiki#vars#get_syntaxlocal('rxMathEnd'), 'VimwikiMath') - - -syntax spell toplevel - diff --git a/vim/.vim/plugged/vimwiki/syntax/vimwiki_default.vim b/vim/.vim/plugged/vimwiki/syntax/vimwiki_default.vim deleted file mode 100644 index 1fcbdec..0000000 --- a/vim/.vim/plugged/vimwiki/syntax/vimwiki_default.vim +++ /dev/null @@ -1,110 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki syntax file -" Description: Defines default syntax -" Home: https://github.com/vimwiki/vimwiki/ - - -" s:default_syntax is kind of a reference to the dict in -" g:vimwiki_syntax_variables['default']. It is used here simply as an -" abbreviation for the latter. -let s:default_syntax = g:vimwiki_syntax_variables['default'] - - - -" text: $ equation_inline $ -let s:default_syntax.rxEqIn = '\$[^$`]\+\$' -let s:default_syntax.char_eqin = '\$' - -" text: *strong* -" let s:default_syntax.rxBold = '\*[^*]\+\*' -let s:default_syntax.rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'\*'. - \'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'. - \'\*'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:default_syntax.char_bold = '*' - -" text: _emphasis_ -" let s:default_syntax.rxItalic = '_[^_]\+_' -let s:default_syntax.rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'_'. - \'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'. - \'_'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:default_syntax.char_italic = '_' - -" text: *_bold italic_* or _*italic bold*_ -let s:default_syntax.rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'\*_'. - \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'. - \'_\*'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:default_syntax.char_bolditalic = '\*_' - -let s:default_syntax.rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'_\*'. - \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'. - \'\*_'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:default_syntax.char_italicbold = '_\*' - -" text: `code` -let s:default_syntax.rxCode = '`[^`]\+`' -let s:default_syntax.char_code = '`' - -" text: ~~deleted text~~ -let s:default_syntax.rxDelText = '\~\~[^~`]\+\~\~' -let s:default_syntax.char_deltext = '\~\~' - -" text: ^superscript^ -let s:default_syntax.rxSuperScript = '\^[^^`]\+\^' -let s:default_syntax.char_superscript = '^' - -" text: ,,subscript,, -let s:default_syntax.rxSubScript = ',,[^,`]\+,,' -let s:default_syntax.char_subscript = ',,' - -" generic headers -let s:default_syntax.rxH = '=' -let s:default_syntax.symH = 1 - - - -" <hr>, horizontal rule -let s:default_syntax.rxHR = '^-----*$' - -" Tables. Each line starts and ends with '|'; each cell is separated by '|' -let s:default_syntax.rxTableSep = '|' - -" Lists -let s:default_syntax.bullet_types = ['-', '*', '#'] -" 1 means the bullets can be repeatet to indicate the level, like * ** *** -" 0 means the bullets stand on their own and the level is indicated by the indentation -let s:default_syntax.recurring_bullets = 0 -let s:default_syntax.number_types = ['1)', '1.', 'i)', 'I)', 'a)', 'A)'] -"this should contain at least one element -"it is used for i_<C-L><C-J> among other things -let s:default_syntax.list_markers = ['-', '1.', '*', 'I)', 'a)'] -let s:default_syntax.rxListDefine = '::\(\s\|$\)' - -" Preformatted text -let s:default_syntax.rxPreStart = '{{{' -let s:default_syntax.rxPreEnd = '}}}' - -" Math block -let s:default_syntax.rxMathStart = '{{\$' -let s:default_syntax.rxMathEnd = '}}\$' - -let s:default_syntax.rxComment = '^\s*%%.*$' -let s:default_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:''[:space:]]\+:\)\+\%(\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.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs\%([^*`[:space:]][^*`]*'. - \ '[^*`[: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.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' -let s:default_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'. - \ '\([^:[:space:]]\+:\)*\(\s\|$\)' diff --git a/vim/.vim/plugged/vimwiki/syntax/vimwiki_markdown.vim b/vim/.vim/plugged/vimwiki/syntax/vimwiki_markdown.vim deleted file mode 100644 index 5962699..0000000 --- a/vim/.vim/plugged/vimwiki/syntax/vimwiki_markdown.vim +++ /dev/null @@ -1,104 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki syntax file -" Description: Defines markdown syntax -" Home: https://github.com/vimwiki/vimwiki/ - - -" see the comments in vimwiki_default.vim for some info about this file - - -let s:markdown_syntax = g:vimwiki_syntax_variables['markdown'] - -" text: $ equation_inline $ -let s:markdown_syntax.rxEqIn = '\$[^$`]\+\$' -let s:markdown_syntax.char_eqin = '\$' - -" text: *strong* -" let s:markdown_syntax.rxBold = '\*[^*]\+\*' -let s:markdown_syntax.rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'\*'. - \'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'. - \'\*'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:markdown_syntax.char_bold = '*' - -" text: _emphasis_ -" let s:markdown_syntax.rxItalic = '_[^_]\+_' -let s:markdown_syntax.rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'_'. - \'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'. - \'_'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:markdown_syntax.char_italic = '_' - -" text: *_bold italic_* or _*italic bold*_ -let s:markdown_syntax.rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'\*_'. - \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'. - \'_\*'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:markdown_syntax.char_bolditalic = '\*_' - -let s:markdown_syntax.rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='. - \'_\*'. - \'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'. - \'\*_'. - \'\%([[:punct:]]\|\s\|$\)\@=' -let s:markdown_syntax.char_italicbold = '_\*' - -" text: `code` -let s:markdown_syntax.rxCode = '`[^`]\+`' -let s:markdown_syntax.char_code = '`' - -" text: ~~deleted text~~ -let s:markdown_syntax.rxDelText = '\~\~[^~`]\+\~\~' -let s:markdown_syntax.char_deltext = '\~\~' - -" text: ^superscript^ -let s:markdown_syntax.rxSuperScript = '\^[^^`]\+\^' -let s:markdown_syntax.char_superscript = '^' - -" text: ,,subscript,, -let s:markdown_syntax.rxSubScript = ',,[^,`]\+,,' -let s:markdown_syntax.char_subscript = ',,' - -" generic headers -let s:markdown_syntax.rxH = '#' -let s:markdown_syntax.symH = 0 - - - -" <hr>, horizontal rule -let s:markdown_syntax.rxHR = '^-----*$' - -" Tables. Each line starts and ends with '|'; each cell is separated by '|' -let s:markdown_syntax.rxTableSep = '|' - -" Lists -let s:markdown_syntax.bullet_types = ['-', '*', '+'] -let s:markdown_syntax.recurring_bullets = 0 -let s:markdown_syntax.number_types = ['1.'] -let s:markdown_syntax.list_markers = ['-', '*', '+', '1.'] -let s:markdown_syntax.rxListDefine = '::\%(\s\|$\)' - -" Preformatted text -let s:markdown_syntax.rxPreStart = '```' -let s:markdown_syntax.rxPreEnd = '```' - -" Math block -let s:markdown_syntax.rxMathStart = '\$\$' -let s:markdown_syntax.rxMathEnd = '\$\$' - -let s:markdown_syntax.rxComment = '^\s*%%.*$\|<!--[^>]*-->' -let s:markdown_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:[:space:]]\+:\)\+\%(\s\|$\)\@=' - -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.bold_search = '\%(^\|\s\|[[:punct:]]\)\@<=\*\zs'. - \ '\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)\ze\*\%([[:punct:]]\|\s\|$\)\@=' -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_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'. - \ '\([^:[:space:]]\+:\)*\(\s\|$\)' diff --git a/vim/.vim/plugged/vimwiki/syntax/vimwiki_markdown_custom.vim b/vim/.vim/plugged/vimwiki/syntax/vimwiki_markdown_custom.vim deleted file mode 100644 index 46f3ce1..0000000 --- a/vim/.vim/plugged/vimwiki/syntax/vimwiki_markdown_custom.vim +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -function! s:add_target_syntax_ON(target, type) - let prefix0 = 'syntax match '.a:type.' `' - let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char' - let prefix1 = 'syntax match '.a:type.'T `' - let suffix1 = '` display contained' - execute prefix0. a:target. suffix0 - execute prefix1. a:target. suffix1 -endfunction - - -function! s:add_target_syntax_OFF(target, type) - let prefix0 = 'syntax match VimwikiNoExistsLink `' - let suffix0 = '` display contains=@NoSpell,VimwikiLinkRest,'.a:type.'Char' - let prefix1 = 'syntax match VimwikiNoExistsLinkT `' - let suffix1 = '` display contained' - execute prefix0. a:target. suffix0 - execute prefix1. a:target. suffix1 -endfunction - - -function! s:wrap_wikilink1_rx(target) - return vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidPrefix') . a:target. - \ vimwiki#vars#get_syntaxlocal('rxWikiLink1InvalidSuffix') -endfunction - - -function! s:existing_mkd_refs() - return keys(vimwiki#markdown_base#scan_reflinks()) -endfunction - - -function! s:highlight_existing_links() - " Wikilink1 - " Conditional highlighting that depends on the existence of a wiki file or - " directory is only available for *schemeless* wiki links - " Links are set up upon BufEnter (see plugin/...) - let safe_links = '\%('. - \ vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikifiles')) . - \ '\%(#[^|]*\)\?\|#[^|]*\)' - " Wikilink1 Dirs set up upon BufEnter (see plugin/...) - let safe_dirs = vimwiki#base#file_pattern(vimwiki#vars#get_bufferlocal('existing_wikidirs')) - " Ref links are cached - let safe_reflinks = vimwiki#base#file_pattern(s:existing_mkd_refs()) - - - " match [URL][] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')), - \ safe_links, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') - call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') - " match [DESCRIPTION][URL] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), - \ safe_links, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') - call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') - - " match [DIRURL][] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')), - \ safe_dirs, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') - call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') - " match [DESCRIPTION][DIRURL] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), - \ safe_dirs, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') - call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') - - " match [MKDREF][] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')), - \ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') - call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') - " match [DESCRIPTION][MKDREF] - let target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), - \ safe_reflinks, vimwiki#vars#get_syntaxlocal('rxWikiLink1Descr'), '') - call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1') -endfunction - - -" use max highlighting - could be quite slow if there are too many wikifiles -if vimwiki#vars#get_wikilocal('maxhi') - " WikiLink - call s:add_target_syntax_OFF(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1') - - " Subsequently, links verified on vimwiki's path are highlighted as existing - call s:highlight_existing_links() -else - " Wikilink - call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), 'VimwikiWikiLink1') -endif - - -" Weblink -call s:add_target_syntax_ON(vimwiki#vars#get_syntaxlocal('rxWeblink1'), 'VimwikiWeblink1') - - -" WikiLink -" All remaining schemes are highlighted automatically -let s:rxSchemes = '\%('. - \ vimwiki#vars#get_global('schemes') . '\|'. - \ vimwiki#vars#get_global('web_schemes1'). - \ '\):' - -" a) match [nonwiki-scheme-URL] -let s:target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template1')), - \ 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') -" b) match [DESCRIPTION][nonwiki-scheme-URL] -let s:target = vimwiki#base#apply_template( - \ vimwiki#u#escape(vimwiki#vars#get_syntaxlocal('WikiLink1Template2')), - \ 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') - - - -" Header levels, 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' -endfor - - - -" concealed chars -if exists("+conceallevel") - syntax conceal on -endif - -syntax spell toplevel - -" VimwikiWikiLink1Char is for syntax markers (and also URL when a description -" is present) and may be concealed -let s:options = ' contained transparent contains=NONE' -" conceal wikilink1 -execute 'syn match VimwikiWikiLink1Char /'. - \ vimwiki#vars#get_syntaxlocal('rx_wikilink_md_prefix').'/'.s:options -execute 'syn match VimwikiWikiLink1Char /'. - \ 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 -execute 'syn match VimwikiWeblink1Char "'. - \ vimwiki#vars#get_syntaxlocal('rxWeblink1Prefix1').'"'.s:options -execute 'syn match VimwikiWeblink1Char "'. - \ vimwiki#vars#get_syntaxlocal('rxWeblink1Suffix1').'"'.s:options - -if exists("+conceallevel") - syntax conceal off -endif - - - -" Tables -syntax match VimwikiTableRow /^\s*|.\+|\s*$/ - \ transparent contains=VimwikiCellSeparator, - \ VimwikiLinkT, - \ VimwikiWeblink1T, - \ VimwikiWikiLink1T, - \ VimwikiNoExistsLinkT, - \ VimwikiTodo, - \ VimwikiBoldT, - \ VimwikiItalicT, - \ VimwikiBoldItalicT, - \ VimwikiItalicBoldT, - \ VimwikiDelTextT, - \ VimwikiSuperScriptT, - \ VimwikiSubScriptT, - \ VimwikiCodeT, - \ VimwikiEqInT, - \ @Spell - - - -" syntax group highlighting -hi def link VimwikiWeblink1 VimwikiLink -hi def link VimwikiWeblink1T VimwikiLink - -hi def link VimwikiWikiLink1 VimwikiLink -hi def link VimwikiWikiLink1T VimwikiLink - diff --git a/vim/.vim/plugged/vimwiki/syntax/vimwiki_media.vim b/vim/.vim/plugged/vimwiki/syntax/vimwiki_media.vim deleted file mode 100644 index 6287c7c..0000000 --- a/vim/.vim/plugged/vimwiki/syntax/vimwiki_media.vim +++ /dev/null @@ -1,85 +0,0 @@ -" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 -" Vimwiki syntax file -" Description: Defines mediaWiki syntax -" Home: https://github.com/vimwiki/vimwiki/ - - -" see the comments in vimwiki_default.vim for some info about this file - - -let s:media_syntax = g:vimwiki_syntax_variables['media'] - -" text: $ equation_inline $ -let s:media_syntax.rxEqIn = '\$[^$`]\+\$' -let s:media_syntax.char_eqin = '\$' - -" text: '''strong''' -let s:media_syntax.rxBold = "'''[^']\\+'''" -let s:media_syntax.char_bold = "'''" - -" text: ''emphasis'' -let s:media_syntax.rxItalic = "''[^']\\+''" -let s:media_syntax.char_italic = "''" - -" text: '''''strong italic''''' -let s:media_syntax.rxBoldItalic = "'''''[^']\\+'''''" -let s:media_syntax.rxItalicBold = s:media_syntax.rxBoldItalic -let s:media_syntax.char_bolditalic = "'''''" -let s:media_syntax.char_italicbold = s:media_syntax.char_bolditalic - -" text: `code` -let s:media_syntax.rxCode = '`[^`]\+`' -let s:media_syntax.char_code = '`' - -" text: ~~deleted text~~ -let s:media_syntax.rxDelText = '\~\~[^~]\+\~\~' -let s:media_syntax.char_deltext = '\~\~' - -" text: ^superscript^ -let s:media_syntax.rxSuperScript = '\^[^^]\+\^' -let s:media_syntax.char_superscript = '^' - -" text: ,,subscript,, -let s:media_syntax.rxSubScript = ',,[^,]\+,,' -let s:media_syntax.char_subscript = ',,' - -" generic headers -let s:media_syntax.rxH = '=' -let s:media_syntax.symH = 1 - - - -" <hr>, horizontal rule -let s:media_syntax.rxHR = '^-----*$' - -" Tables. Each line starts and ends with '|'; each cell is separated by '|' -let s:media_syntax.rxTableSep = '|' - -" Lists -let s:media_syntax.bullet_types = ['*', '#'] -let s:media_syntax.recurring_bullets = 1 -let s:media_syntax.number_types = [] -let s:media_syntax.list_markers = ['*', '#'] -let s:media_syntax.rxListDefine = '^\%(;\|:\)\s' - -" Preformatted text -let s:media_syntax.rxPreStart = '<pre>' -let s:media_syntax.rxPreEnd = '<\/pre>' - -" Math block -let s:media_syntax.rxMathStart = '{{\$' -let s:media_syntax.rxMathEnd = '}}\$' - -let s:media_syntax.rxComment = '^\s*%%.*$' -let s:media_syntax.rxTags = '\%(^\|\s\)\@<=:\%([^:[:space:]]\+:\)\+\%(\s\|$\)\@=' - -let s:media_syntax.header_search = '^\s*\(=\{1,6}\)\([^=].*[^=]\)\1\s*$' -let s:media_syntax.header_match = '^\s*\(=\{1,6}\)=\@!\s*__Header__\s*\1=\@!\s*$' -let s:media_syntax.bold_search = "'''\\zs[^']\\+\\ze'''" -let s:media_syntax.bold_match = '''''''__Text__''''''' -" ^- 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 -let s:media_syntax.wikilink = '\[\[\zs[^\\\]|]\+\ze\%(|[^\\\]]\+\)\?\]\]' -let s:media_syntax.tag_search = '\(^\|\s\)\zs:\([^:''[:space:]]\+:\)\+\ze\(\s\|$\)' -let s:media_syntax.tag_match = '\(^\|\s\):\([^:''[:space:]]\+:\)*__Tag__:'. - \ '\([^:[:space:]]\+:\)*\(\s\|$\)' |
