diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index ee21672..39ae7ff 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -8,6 +8,13 @@ if exists("g:loaded_vimwiki_auto") || &cp endif let g:loaded_vimwiki_auto = 1 +" s:safesubstitute +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 " }}} + " s:vimwiki_get_known_syntaxes function! s:vimwiki_get_known_syntaxes() " {{{ " Getting all syntaxes that different wikis could have @@ -312,7 +319,8 @@ function! vimwiki#base#generate_links() "{{{ let abs_filepath = vimwiki#path#abs_path_of_link(link) if !s:is_diary_file(abs_filepath) call add(lines, bullet. - \ substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', '\='."'".link."'", '')) + \ s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), + \ '__LinkUrl__', link, '')) endif endfor @@ -525,15 +533,15 @@ function! s:jump_to_anchor(anchor) "{{{ for segment in segments - let anchor_header = substitute( + let anchor_header = s:safesubstitute( \ vimwiki#vars#get_syntaxlocal('header_match'), - \ '__Header__', "\\='".segment."'", '') - let anchor_bold = substitute( + \ '__Header__', segment, '') + let anchor_bold = s:safesubstitute( \ vimwiki#vars#get_syntaxlocal('bold_match'), - \ '__Text__', "\\='".segment."'", '') - let anchor_tag = substitute( + \ '__Text__', segment, '') + let anchor_tag = s:safesubstitute( \ vimwiki#vars#get_syntaxlocal('tag_match'), - \ '__Tag__', "\\='".segment."'", '') + \ '__Tag__', segment, '') if !search(anchor_tag, 'Wc') \ && !search(anchor_header, 'Wc') @@ -690,7 +698,7 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ " then " [[test*file]]... " you'll have E77: Too many file names - let fname = escape(a:filename, '% *|#') + let fname = escape(a:filename, '% *|#`') let dir = fnamemodify(a:filename, ":p:h") let ok = vimwiki#path#mkdir(dir, 1) @@ -1032,8 +1040,8 @@ function! vimwiki#base#update_listing_in_buffer(strings, start_header, " write new listing let new_header = whitespaces_in_first_line - \ . substitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), - \ '__Header__', '\='."'".a:start_header."'", '') + \ . 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) @@ -1182,7 +1190,13 @@ function! vimwiki#base#goto_index(wnum, ...) "{{{ endif if a:0 - let cmd = 'tabedit' + 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 @@ -1682,9 +1696,9 @@ function! vimwiki#base#table_of_contents(create) for [lvl, link, desc] in headers let esc_link = substitute(link, "'", "''", 'g') let esc_desc = substitute(desc, "'", "''", 'g') - let link = substitute(vimwiki#vars#get_global('WikiLinkTemplate2'), '__LinkUrl__', - \ '\='."'".'#'.esc_link."'", '') - let link = substitute(link, '__LinkDescription__', '\='."'".esc_desc."'", '') + let link = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate2'), '__LinkUrl__', + \ '#'.esc_link, '') + let link = s:safesubstitute(link, '__LinkDescription__', esc_desc, '') call add(lines, startindent.repeat(indentstring, lvl-1).bullet.link) endfor @@ -1705,13 +1719,13 @@ endfunction function! vimwiki#base#apply_template(template, rxUrl, rxDesc, rxStyle) "{{{ let lnk = a:template if a:rxUrl != "" - let lnk = substitute(lnk, '__LinkUrl__', '\='."'".a:rxUrl."'", 'g') + let lnk = s:safesubstitute(lnk, '__LinkUrl__', a:rxUrl, 'g') endif if a:rxDesc != "" - let lnk = substitute(lnk, '__LinkDescription__', '\='."'".a:rxDesc."'", 'g') + let lnk = s:safesubstitute(lnk, '__LinkDescription__', a:rxDesc, 'g') endif if a:rxStyle != "" - let lnk = substitute(lnk, '__LinkStyle__', '\='."'".a:rxStyle."'", 'g') + let lnk = s:safesubstitute(lnk, '__LinkStyle__', a:rxStyle, 'g') endif return lnk endfunction " }}} @@ -1750,8 +1764,8 @@ function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) " {{{ if descr == "" let descr = s:clean_url(url) endif - let lnk = substitute(template, '__LinkDescription__', '\="'.descr.'"', '') - let lnk = substitute(lnk, '__LinkUrl__', '\="'.url.'"', '') + let lnk = s:safesubstitute(template, '__LinkDescription__', descr, '') + let lnk = s:safesubstitute(lnk, '__LinkUrl__', url, '') return lnk endfunction " }}} @@ -1759,7 +1773,7 @@ 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 = substitute(lnk, '__LinkStyle__', '\="'.style.'"', '') + let lnk = s:safesubstitute(lnk, '__LinkStyle__', style, '') return lnk endfunction " }}} @@ -1851,8 +1865,8 @@ function! s:normalize_link_syntax_v() " {{{ if s:is_diary_file(expand("%:p")) let sub = s:normalize_link_in_diary(@") else - let sub = substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), - \ '__LinkUrl__', '\=' . "'" . @" . "'", '') + let sub = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), + \ '__LinkUrl__', @", '') endif " Put substitution in register " and change text diff --git a/autoload/vimwiki/diary.vim b/autoload/vimwiki/diary.vim index 4b18c5e..e02e94b 100644 --- a/autoload/vimwiki/diary.vim +++ b/autoload/vimwiki/diary.vim @@ -174,10 +174,15 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{ call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx)) - if a:0 && a:1 == 1 - let cmd = 'tabedit' - else - let cmd = 'edit' + let cmd = 'edit' + if a:0 + if a:1 == 1 + let cmd = 'tabedit' + elseif a:1 == 2 + let cmd = 'split' + elseif a:1 == 3 + let cmd = 'vsplit' + endif endif if a:0>1 let link = 'diary:'.a:2 diff --git a/autoload/vimwiki/markdown_base.vim b/autoload/vimwiki/markdown_base.vim index f55be2d..fa14b62 100644 --- a/autoload/vimwiki/markdown_base.vim +++ b/autoload/vimwiki/markdown_base.vim @@ -6,6 +6,13 @@ " MISC helper functions {{{ +" s:safesubstitute +function! s:safesubstitute(text, search, replace, mode) "{{{ + " Substitute regexp but do not interpret replace + let escaped = escape(a:replace, '\&') + return substitute(a:text, a:search, escaped, a:mode) +endfunction " }}} + " vimwiki#markdown_base#scan_reflinks function! vimwiki#markdown_base#scan_reflinks() " {{{ let mkd_refs = {} @@ -117,8 +124,9 @@ function! s:normalize_link_syntax_v() " {{{ try norm! gvy let visual_selection = @" - let link = substitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), '__LinkUrl__', '\='."'".visual_selection."'", '') - let link = substitute(link, '__LinkDescription__', '\='."'".visual_selection."'", '') + let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), + \ '__LinkUrl__', visual_selection, '') + let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '') call setreg('"', link, 'v')