diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim
index ca45020..36fb9f5 100644
--- a/autoload/vimwiki/vars.vim
+++ b/autoload/vimwiki/vars.vim
@@ -1,12 +1,31 @@
" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99
" Vimwiki autoload plugin file
-" Desc: stuff concerning Vimwiki's state
" 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!
+" ------------------------------------------------------------------------------------------------
+
-" copy the user's settings from variables of the form g:vimwiki_ into g:vimwiki_global_vars
-" (or set a default value)
function! s:populate_global_variables()
+
let g:vimwiki_global_vars = {
\ 'CJK_length': 0,
\ 'auto_chdir': 0,
@@ -42,37 +61,39 @@ function! s:populate_global_variables()
\ 'w32_dir_enc': '',
\ }
+ " copy the user's settings from variables of the form g:vimwiki_ 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
+ " non-configurable global variables:
- " Scheme regexes should be defined even if syntax file is not loaded yet cause users should be
+ " Scheme regexes must be defined even if syntax file is not loaded yet cause users should be
" able to ww without opening any vimwiki file first
- let g:vimwiki_global_vars['schemes'] = 'wiki\d\+,diary,local'
- let g:vimwiki_global_vars['web_schemes1'] = 'http,https,file,ftp,gopher,telnet,nntp,ldap,rsync'.
+ let g:vimwiki_global_vars.schemes = 'wiki\d\+,diary,local'
+ let g:vimwiki_global_vars.web_schemes1 = 'http,https,file,ftp,gopher,telnet,nntp,ldap,rsync'.
\ ',imap,pop,irc,ircs,cvs,svn,svn+ssh,git,ssh,fish,sftp'
let web_schemes2 = 'mailto,news,xmpp,sip,sips,doi,urn,tel'
let rx_schemes = '\%('.
- \ join(split(g:vimwiki_global_vars['schemes'], '\s*,\s*'), '\|').'\|'.
- \ join(split(g:vimwiki_global_vars['web_schemes1'], '\s*,\s*'), '\|').'\|'.
+ \ join(split(g:vimwiki_global_vars.schemes, '\s*,\s*'), '\|').'\|'.
+ \ join(split(g:vimwiki_global_vars.web_schemes1, '\s*,\s*'), '\|').'\|'.
\ join(split(web_schemes2, '\s*,\s*'), '\|').
\ '\)'
- let g:vimwiki_global_vars['rxSchemeUrl'] = rx_schemes.':.*'
- let g:vimwiki_global_vars['rxSchemeUrlMatchScheme'] = '\zs'.rx_schemes.'\ze:.*'
- let g:vimwiki_global_vars['rxSchemeUrlMatchUrl'] = rx_schemes.':\zs.*\ze'
+ let g:vimwiki_global_vars.rxSchemeUrl = rx_schemes.':.*'
+ let g:vimwiki_global_vars.rxSchemeUrlMatchScheme = '\zs'.rx_schemes.'\ze:.*'
+ let g:vimwiki_global_vars.rxSchemeUrlMatchUrl = rx_schemes.':\zs.*\ze'
" match URL for common protocols; see http://en.wikipedia.org/wiki/URI_scheme
" http://tools.ietf.org/html/rfc3986
let rxWebProtocols =
\ '\%('.
\ '\%('.
- \ '\%('.join(split(g:vimwiki_global_vars['web_schemes1'], '\s*,\s*'), '\|').'\):'.
+ \ '\%('.join(split(g:vimwiki_global_vars.web_schemes1, '\s*,\s*'), '\|').'\):'.
\ '\%(//\)'.
\ '\)'.
\ '\|'.
@@ -105,20 +126,20 @@ function! s:populate_global_variables()
" non-Ascii characters
let g:vimwiki_global_vars.rxWord = '[^[:blank:]!"$%&''()*+,:;<=>?\[\]\\^`{}]\+'
- let g:vimwiki_global_vars.rx_wikilink_prefix1 = g:vimwiki_global_vars.rx_wikilink_prefix . g:vimwiki_global_vars.rxWikiLinkUrl .
- \ g:vimwiki_global_vars.rx_wikilink_separator
+ 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
+ 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__'.
- \ '__LinkDescription__'.
- \ g:vimwiki_global_vars.rxWikiInclSuffix
+ 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.'\{-}'
@@ -145,26 +166,17 @@ function! s:populate_global_variables()
" 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']
+ 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: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 "}}}
-
-
-" g:vimwiki_wikilocal_vars is a list of dictionaries. One dict for every registered wiki. The last
-" dictionary contains default values (used for temporary wikis)
function! s:populate_wikilocal_options()
let default_values = {
\ 'auto_export': 0,
@@ -246,6 +258,17 @@ function! s:validate_settings()
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 = {}
@@ -264,33 +287,53 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
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*$'
+ 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*$'
+ 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.'].*$'
+ 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$'
+ 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].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*$'
+ 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].rx_bullet_chars =
+ \ '['.join(g:vimwiki_syntax_variables[a:syntax].bullet_types, '').']\+'
- let g:vimwiki_syntax_variables[a:syntax].multiple_bullet_chars = g:vimwiki_syntax_variables[a:syntax].recurring_bullets ? g:vimwiki_syntax_variables[a:syntax].bullet_types : []
+ let g:vimwiki_syntax_variables[a:syntax].multiple_bullet_chars =
+ \ g:vimwiki_syntax_variables[a:syntax].recurring_bullets
+ \ ? g:vimwiki_syntax_variables[a:syntax].bullet_types : []
let g:vimwiki_syntax_variables[a:syntax].number_kinds = []
let g:vimwiki_syntax_variables[a:syntax].number_divisors = ''
@@ -304,9 +347,11 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
"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)'
- \ ) , '\|')
+ 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 = '$^'
@@ -319,7 +364,8 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
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]].
+ 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
@@ -327,21 +373,34 @@ function! vimwiki#vars#populate_syntax_vars(syntax)
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')
- 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').']\)\]\s\)\?'
+ let g:vimwiki_syntax_variables[a:syntax].listsyms_list =
+ \ split(vimwiki#vars#get_global('listsyms'), '\zs')
+ 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').']\)\]\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[4].'\]\s.*\%(\n\%(\1\%('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\).*\|^$\|\s.*\)\)*'
+ let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren =
+ \ '^\('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\)\s\+\['
+ \ . g:vimwiki_syntax_variables[a:syntax].listsyms_list[4].'\]\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[4].'\]\s.*\%(\n\%(\1\s.*\|^$\)\)*'
+ let g:vimwiki_syntax_variables[a:syntax].rxListItemAndChildren =
+ \ '^\(\s*\)\%('.g:vimwiki_syntax_variables[a:syntax].rxListBullet.'\|'
+ \ . g:vimwiki_syntax_variables[a:syntax].rxListNumber.'\)\s\+\['
+ \ . g:vimwiki_syntax_variables[a:syntax].listsyms_list[4].'\]\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 = '[\["(|]\@
or, the better way, put it in a file .vim/ftplugin/vimwiki.vim like this >
:nmap wc Vimwiki2HTML
-The latter has the advantage that the mapping is local to viwiki buffers in
+The latter has the advantage that the mapping is local to Vimwiki buffers in
every case.
Also note that some keys work in normal mode as well as in visual mode. If you
@@ -814,7 +814,7 @@ which opens up a popup menu with all the wiki files starting with "ind".
When |vimwiki-option-maxhi| equals 1, a distinct highlighting style is used to
identify wikilinks whose targets are not found.
-Interwiki:~
+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: >
@@ -825,15 +825,11 @@ or: >
The number behind "wiki" is in the range 0..N-1 and identifies the destination
wiki in |g:vimwiki_list|.
-Diary:~
+Diary~
-The "diary:" scheme is used to concisely link to diary entries: >
+The "diary:" scheme is used to link to diary entries: >
[[diary:2012-03-05]]
-This scheme precludes explicit inclusion of |vimwiki-option-diary_rel_path|,
-and is most useful on subwiki pages to avoid links such as: >
- [[../../diary/2012-03-05]]
-
Anchors~
A wikilink, interwiki link or diary link can be followed by a '#' and the name
diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim
index b75ea1f..f924ba3 100644
--- a/ftplugin/vimwiki.vim
+++ b/ftplugin/vimwiki.vim
@@ -238,7 +238,8 @@ command! -buffer Vimwiki2HTML
\ let res = vimwiki#html#Wiki2HTML(expand(vimwiki#vars#get_wikilocal('path_html')),
\ expand('%'))
\
- \ if res != '' | echo 'Vimwiki: HTML conversion is done, output: ' . expand(vimwiki#vars#get_wikilocal('path_html')) | endif
+ \ 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
\
@@ -281,11 +282,15 @@ command! -buffer VimwikiCheckLinks call vimwiki#base#check_links()
" list commands
command! -buffer -nargs=+ VimwikiReturn call CR()
-command! -buffer -range -nargs=1 VimwikiChangeSymbolTo call vimwiki#lst#change_marker(, , , 'n')
-command! -buffer -range -nargs=1 VimwikiListChangeSymbolI call vimwiki#lst#change_marker(, , , 'i')
-command! -buffer -nargs=1 VimwikiChangeSymbolInListTo call vimwiki#lst#change_marker_in_list()
+command! -buffer -range -nargs=1 VimwikiChangeSymbolTo
+ \ call vimwiki#lst#change_marker(, , , 'n')
+command! -buffer -range -nargs=1 VimwikiListChangeSymbolI
+ \ call vimwiki#lst#change_marker(, , , 'i')
+command! -buffer -nargs=1 VimwikiChangeSymbolInListTo
+ \ call vimwiki#lst#change_marker_in_list()
command! -buffer -range VimwikiToggleListItem call vimwiki#lst#toggle_cb(, )
-command! -buffer -range -nargs=+ VimwikiListChangeLvl call vimwiki#lst#change_level(, , )
+command! -buffer -range -nargs=+ VimwikiListChangeLvl
+ \ call vimwiki#lst#change_level(, , )
command! -buffer -range VimwikiRemoveSingleCB call vimwiki#lst#remove_cb(, )
command! -buffer VimwikiRemoveCBInList call vimwiki#lst#remove_cb_in_list()
command! -buffer VimwikiRenumberList call vimwiki#lst#adjust_numbered_list()
diff --git a/plugin/vimwiki.vim b/plugin/vimwiki.vim
index 8f7fa87..6c2987b 100644
--- a/plugin/vimwiki.vim
+++ b/plugin/vimwiki.vim
@@ -49,7 +49,9 @@ function! s:create_temporary_wiki()
endfunction
-" this is called when Vim opens a new buffer with a known wiki extension
+" This function is called when Vim opens a new buffer with a known wiki
+" 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
@@ -82,52 +84,16 @@ function! s:setup_buffer_enter() "{{{
return
endif
- " 'autowriteall' is a global Vim option, so in order to change it only for
- " Vimwiki buffers, we need to set it here (when the cursor enters the buffer)
- " and reset it when the cursor leaves the buffer
- let s:vimwiki_autowriteall_saved = &autowriteall
- let &autowriteall = vimwiki#vars#get_global('autowriteall')
-
if &filetype == ''
setfiletype vimwiki
endif
- " The settings foldmethod, foldexpr and foldtext are local to window. Thus in
- " a new tab with the same buffer folding is reset to vim defaults. So we
- " insist vimwiki folding here.
- let foldmethod = vimwiki#vars#get_global('folding')
- if foldmethod ==? 'expr'
- setlocal foldmethod=expr
- setlocal foldexpr=VimwikiFoldLevel(v:lnum)
- setlocal foldtext=VimwikiFoldText()
- elseif foldmethod ==? 'list' || foldmethod ==? 'lists'
- setlocal foldmethod=expr
- setlocal foldexpr=VimwikiFoldListLevel(v:lnum)
- setlocal foldtext=VimwikiFoldText()
- elseif foldmethod ==? 'syntax'
- setlocal foldmethod=syntax
- setlocal foldtext=VimwikiFoldText()
- else
- setlocal foldmethod=manual
- normal! zE
- endif
+ call s:set_global_options()
- " And conceal level too.
- if vimwiki#vars#get_global('conceallevel') && exists("+conceallevel")
- let &conceallevel = vimwiki#vars#get_global('conceallevel')
- endif
-
- " lcd as well
- if vimwiki#vars#get_global('auto_chdir')
- exe 'lcd' vimwiki#vars#get_wikilocal('path')
- endif
-
- " Set up menu
- if vimwiki#vars#get_global('menu') !=# ''
- exe 'nmenu enable '.vimwiki#vars#get_global('menu').'.Table'
- endif
+ 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
@@ -136,7 +102,10 @@ function! s:setup_cleared_syntax() "{{{ highlight groups that get cleared
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'
+ 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 "}}}
@@ -156,6 +125,50 @@ function! s:vimwiki_get_known_extensions() " {{{
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()
+ 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
+
" }}}
@@ -201,8 +214,8 @@ endif
augroup vimwiki
autocmd!
for s:ext in s:known_extensions
- exe 'autocmd BufEnter *'.s:ext.' call s:setup_buffer_enter()'
exe 'autocmd BufNewFile,BufRead *'.s:ext.' call s:setup_new_wiki_buffer()'
+ exe 'autocmd 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