" 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 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 !empty(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 current_file = vimwiki#path#current_file() let path = vimwiki#path#directory_of_file(current_file) let ext = '.'.vimwiki#path#extension(current_file) 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 !empty(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() if !&diff " if Vim is currently in diff mode, don't interfere with its folding 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 endif if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel") let &conceallevel = vimwiki#vars#get_global('conceallevel') endif if vimwiki#vars#get_global('auto_chdir') exe 'lcd' vimwiki#path#to_string(vimwiki#vars#get_wikilocal('path')) endif endfunction " Initialization of Vimwiki starts here. Make sure everything below does not " 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! autocmd ColorScheme * call s:setup_cleared_syntax() 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()' " 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 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() let s:map_prefix = vimwiki#vars#get_global('map_prefix') if !hasmapto('VimwikiIndex') exe 'nmap '.s:map_prefix.'w VimwikiIndex' endif nnoremap