diff options
Diffstat (limited to 'vim/.vim/plugged/vimwiki/plugin')
| -rw-r--r-- | vim/.vim/plugged/vimwiki/plugin/vimwiki.vim | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/vim/.vim/plugged/vimwiki/plugin/vimwiki.vim b/vim/.vim/plugged/vimwiki/plugin/vimwiki.vim new file mode 100644 index 0000000..4e0ee91 --- /dev/null +++ b/vim/.vim/plugged/vimwiki/plugin/vimwiki.vim @@ -0,0 +1,396 @@ +" 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 |
