mirror of
https://github.com/gryf/.vim.git
synced 2025-12-17 19:40:29 +01:00
Update of plugins (vimwiki, ctrlp, syntastic, tagbar, gundo and mark),
added draft syntax file for kickassembler
This commit is contained in:
1
.vimrc
1
.vimrc
@@ -91,6 +91,7 @@ autocmd BufWritePre *.xml :call <SID>StripTrailingWhitespaces()
|
|||||||
"set correct filetype for tmux
|
"set correct filetype for tmux
|
||||||
autocmd BufRead *.tmux.conf set filetype=tmux
|
autocmd BufRead *.tmux.conf set filetype=tmux
|
||||||
autocmd BufRead *.mako set filetype=mako
|
autocmd BufRead *.mako set filetype=mako
|
||||||
|
autocmd BufRead *.ass set filetype=kickass
|
||||||
" }}}
|
" }}}
|
||||||
"TERMINAL: options for terminal emulators {{{
|
"TERMINAL: options for terminal emulators {{{
|
||||||
if $TERM == 'rxvt-unicode-256color' || $TERM == 'xterm'
|
if $TERM == 'rxvt-unicode-256color' || $TERM == 'xterm'
|
||||||
|
|||||||
@@ -4,23 +4,22 @@ ScriptID SourceID Filename
|
|||||||
2572 10433 ack.vim
|
2572 10433 ack.vim
|
||||||
102 16171 DirDiff.vim
|
102 16171 DirDiff.vim
|
||||||
311 7645 grep.vim
|
311 7645 grep.vim
|
||||||
3304 17406 gundo.vim
|
3304 18081 gundo.vim
|
||||||
2727 11120 jsbeautify.vim
|
2727 11120 jsbeautify.vim
|
||||||
2289 8922 loremipsum
|
2289 8922 loremipsum
|
||||||
2666 17666 Mark
|
2666 17810 Mark
|
||||||
1218 14455 nerdcommenter
|
1218 14455 nerdcommenter
|
||||||
2262 8944 occur.vim
|
2262 8944 occur.vim
|
||||||
2136 8206 repeat.vim
|
2136 8206 repeat.vim
|
||||||
152 3342 showmarks.vim
|
152 3342 showmarks.vim
|
||||||
2540 11006 snipMate.vim
|
2540 11006 snipMate.vim
|
||||||
1697 12566 surround.vim
|
1697 12566 surround.vim
|
||||||
3465 17112 Tagbar
|
3465 18143 Tagbar
|
||||||
90 17031 vcscommand.vim
|
90 17031 vcscommand.vim
|
||||||
2226 15854 vimwiki.vim
|
2226 18100 vimwiki.vim
|
||||||
1334 6377 vst.vim
|
1334 6377 vst.vim
|
||||||
2321 9055 zoom.vim
|
2321 9055 zoom.vim
|
||||||
52 14880 calendar.vim
|
52 14880 calendar.vim
|
||||||
3736 17669 ctrlp.vim
|
|
||||||
### ftplugin
|
### ftplugin
|
||||||
3818 16921 MatchTag
|
3818 16921 MatchTag
|
||||||
910 14691 pydoc.vim
|
910 14691 pydoc.vim
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
140
bundle/git_ctrlp/autoload/ctrlp/bookmarkdir.vim
Normal file
140
bundle/git_ctrlp/autoload/ctrlp/bookmarkdir.vim
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
" =============================================================================
|
||||||
|
" File: autoload/ctrlp/bookmarkdir.vim
|
||||||
|
" Description: Bookmarked directories extension
|
||||||
|
" Author: Kien Nguyen <github.com/kien>
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" Init {{{1
|
||||||
|
if exists('g:loaded_ctrlp_bookmarkdir') && g:loaded_ctrlp_bookmarkdir
|
||||||
|
fini
|
||||||
|
en
|
||||||
|
let g:loaded_ctrlp_bookmarkdir = 1
|
||||||
|
|
||||||
|
cal add(g:ctrlp_ext_vars, {
|
||||||
|
\ 'init': 'ctrlp#bookmarkdir#init()',
|
||||||
|
\ 'accept': 'ctrlp#bookmarkdir#accept',
|
||||||
|
\ 'lname': 'bookmarked dirs',
|
||||||
|
\ 'sname': 'bkd',
|
||||||
|
\ 'type': 'tabs',
|
||||||
|
\ 'opmul': 1,
|
||||||
|
\ 'nolim': 1,
|
||||||
|
\ 'wipe': 'ctrlp#bookmarkdir#remove',
|
||||||
|
\ })
|
||||||
|
|
||||||
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
|
" Utilities {{{1
|
||||||
|
fu! s:getinput(str, ...)
|
||||||
|
echoh Identifier
|
||||||
|
cal inputsave()
|
||||||
|
let input = call('input', a:0 ? [a:str] + a:000 : [a:str])
|
||||||
|
cal inputrestore()
|
||||||
|
echoh None
|
||||||
|
retu input
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:cachefile()
|
||||||
|
if !exists('s:cadir') || !exists('s:cafile')
|
||||||
|
let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'bkd'
|
||||||
|
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
|
||||||
|
en
|
||||||
|
retu s:cafile
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:writecache(lines)
|
||||||
|
cal ctrlp#utils#writecache(a:lines, s:cadir, s:cafile)
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:getbookmarks()
|
||||||
|
retu ctrlp#utils#readfile(s:cachefile())
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:savebookmark(name, cwd)
|
||||||
|
let cwds = exists('+ssl') ? [tr(a:cwd, '\', '/'), tr(a:cwd, '/', '\')] : [a:cwd]
|
||||||
|
let entries = filter(s:getbookmarks(), 'index(cwds, s:parts(v:val)[1]) < 0')
|
||||||
|
cal s:writecache(insert(entries, a:name.' '.a:cwd))
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:setentries()
|
||||||
|
let time = getftime(s:cachefile())
|
||||||
|
if !( exists('s:bookmarks') && time == s:bookmarks[0] )
|
||||||
|
let s:bookmarks = [time, s:getbookmarks()]
|
||||||
|
en
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:parts(str)
|
||||||
|
let mlist = matchlist(a:str, '\v([^\t]+)\t(.*)$')
|
||||||
|
retu mlist != [] ? mlist[1:2] : ['', '']
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:process(entries, type)
|
||||||
|
retu map(a:entries, 's:modify(v:val, a:type)')
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:modify(entry, type)
|
||||||
|
let [name, dir] = s:parts(a:entry)
|
||||||
|
let dir = fnamemodify(dir, a:type)
|
||||||
|
retu name.' '.( dir == '' ? '.' : dir )
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:msg(name, cwd)
|
||||||
|
redr
|
||||||
|
echoh Identifier | echon 'Bookmarked ' | echoh Constant
|
||||||
|
echon a:name.' ' | echoh Directory | echon a:cwd
|
||||||
|
echoh None
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:syntax()
|
||||||
|
if !ctrlp#nosy()
|
||||||
|
cal ctrlp#hicheck('CtrlPBookmark', 'Identifier')
|
||||||
|
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
|
||||||
|
sy match CtrlPBookmark '^> [^\t]\+' contains=CtrlPLinePre
|
||||||
|
sy match CtrlPTabExtra '\zs\t.*\ze$'
|
||||||
|
en
|
||||||
|
endf
|
||||||
|
" Public {{{1
|
||||||
|
fu! ctrlp#bookmarkdir#init()
|
||||||
|
cal s:setentries()
|
||||||
|
cal s:syntax()
|
||||||
|
retu s:process(copy(s:bookmarks[1]), ':.')
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! ctrlp#bookmarkdir#accept(mode, str)
|
||||||
|
let parts = s:parts(s:modify(a:str, ':p'))
|
||||||
|
cal call('s:savebookmark', parts)
|
||||||
|
if a:mode =~ 't\|v\|h'
|
||||||
|
cal ctrlp#exit()
|
||||||
|
en
|
||||||
|
cal ctrlp#setdir(parts[1], a:mode =~ 't\|h' ? 'chd!' : 'lc!')
|
||||||
|
if a:mode == 'e'
|
||||||
|
cal ctrlp#switchtype(0)
|
||||||
|
cal ctrlp#recordhist()
|
||||||
|
cal ctrlp#prtclear()
|
||||||
|
en
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! ctrlp#bookmarkdir#add(dir)
|
||||||
|
let str = 'Directory to bookmark: '
|
||||||
|
let cwd = a:dir != '' ? a:dir : s:getinput(str, getcwd(), 'dir')
|
||||||
|
if cwd == '' | retu | en
|
||||||
|
let cwd = fnamemodify(cwd, ':p')
|
||||||
|
let name = s:getinput('Bookmark as: ', cwd)
|
||||||
|
if name == '' | retu | en
|
||||||
|
let name = tr(name, ' ', ' ')
|
||||||
|
cal s:savebookmark(name, cwd)
|
||||||
|
cal s:msg(name, cwd)
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! ctrlp#bookmarkdir#remove(entries)
|
||||||
|
cal s:process(a:entries, ':p')
|
||||||
|
cal s:writecache(a:entries == [] ? [] :
|
||||||
|
\ filter(s:getbookmarks(), 'index(a:entries, v:val) < 0'))
|
||||||
|
cal s:setentries()
|
||||||
|
retu s:process(copy(s:bookmarks[1]), ':.')
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! ctrlp#bookmarkdir#id()
|
||||||
|
retu s:id
|
||||||
|
endf
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
||||||
@@ -13,7 +13,7 @@ if exists('g:loaded_ctrlp_buftag') && g:loaded_ctrlp_buftag
|
|||||||
en
|
en
|
||||||
let g:loaded_ctrlp_buftag = 1
|
let g:loaded_ctrlp_buftag = 1
|
||||||
|
|
||||||
let s:buftag_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#buffertag#init(s:crfile)',
|
\ 'init': 'ctrlp#buffertag#init(s:crfile)',
|
||||||
\ 'accept': 'ctrlp#buffertag#accept',
|
\ 'accept': 'ctrlp#buffertag#accept',
|
||||||
\ 'lname': 'buffer tags',
|
\ 'lname': 'buffer tags',
|
||||||
@@ -21,27 +21,17 @@ let s:buftag_var = {
|
|||||||
\ 'exit': 'ctrlp#buffertag#exit()',
|
\ 'exit': 'ctrlp#buffertag#exit()',
|
||||||
\ 'type': 'tabs',
|
\ 'type': 'tabs',
|
||||||
\ 'opts': 'ctrlp#buffertag#opts()',
|
\ 'opts': 'ctrlp#buffertag#opts()',
|
||||||
\ }
|
\ })
|
||||||
|
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:buftag_var) : [s:buftag_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
|
|
||||||
fu! ctrlp#buffertag#opts()
|
let [s:pref, s:opts] = ['g:ctrlp_buftag_', {
|
||||||
let opts = {
|
\ 'systemenc': ['s:enc', &enc],
|
||||||
\ 'g:ctrlp_buftag_systemenc': ['s:enc', &enc],
|
\ 'ctags_bin': ['s:bin', ''],
|
||||||
\ 'g:ctrlp_buftag_ctags_bin': ['s:bin', ''],
|
\ 'types': ['s:usr_types', {}],
|
||||||
\ 'g:ctrlp_buftag_types': ['s:usr_types', ''],
|
\ }]
|
||||||
\ }
|
|
||||||
for [ke, va] in items(opts)
|
|
||||||
exe 'let' va[0] '=' string(exists(ke) ? eval(ke) : va[1])
|
|
||||||
endfo
|
|
||||||
endf
|
|
||||||
cal ctrlp#buffertag#opts()
|
|
||||||
|
|
||||||
fu! s:bins()
|
let s:bins = [
|
||||||
let bins = [
|
|
||||||
\ 'ctags-exuberant',
|
\ 'ctags-exuberant',
|
||||||
\ 'exuberant-ctags',
|
\ 'exuberant-ctags',
|
||||||
\ 'exctags',
|
\ 'exctags',
|
||||||
@@ -51,18 +41,7 @@ fu! s:bins()
|
|||||||
\ 'ctags.exe',
|
\ 'ctags.exe',
|
||||||
\ 'tags',
|
\ 'tags',
|
||||||
\ ]
|
\ ]
|
||||||
if empty(s:bin)
|
|
||||||
for bin in bins | if executable(bin)
|
|
||||||
let s:bin = bin
|
|
||||||
brea
|
|
||||||
en | endfo
|
|
||||||
el
|
|
||||||
let s:bin = expand(s:bin, 1)
|
|
||||||
en
|
|
||||||
endf
|
|
||||||
cal s:bins()
|
|
||||||
|
|
||||||
" s:types {{{2
|
|
||||||
let s:types = {
|
let s:types = {
|
||||||
\ 'asm' : '%sasm%sasm%sdlmt',
|
\ 'asm' : '%sasm%sasm%sdlmt',
|
||||||
\ 'aspperl': '%sasp%sasp%sfsv',
|
\ 'aspperl': '%sasp%sasp%sfsv',
|
||||||
@@ -109,9 +88,22 @@ if executable('jsctags')
|
|||||||
cal extend(s:types, { 'javascript': { 'args': '-f -', 'bin': 'jsctags' } })
|
cal extend(s:types, { 'javascript': { 'args': '-f -', 'bin': 'jsctags' } })
|
||||||
en
|
en
|
||||||
|
|
||||||
if type(s:usr_types) == 4
|
fu! ctrlp#buffertag#opts()
|
||||||
|
for [ke, va] in items(s:opts)
|
||||||
|
let {va[0]} = exists(s:pref.ke) ? {s:pref.ke} : va[1]
|
||||||
|
endfo
|
||||||
|
" Ctags bin
|
||||||
|
if empty(s:bin)
|
||||||
|
for bin in s:bins | if executable(bin)
|
||||||
|
let s:bin = bin
|
||||||
|
brea
|
||||||
|
en | endfo
|
||||||
|
el
|
||||||
|
let s:bin = expand(s:bin, 1)
|
||||||
|
en
|
||||||
|
" Types
|
||||||
cal extend(s:types, s:usr_types)
|
cal extend(s:types, s:usr_types)
|
||||||
en
|
endf
|
||||||
" Utilities {{{1
|
" Utilities {{{1
|
||||||
fu! s:validfile(fname, ftype)
|
fu! s:validfile(fname, ftype)
|
||||||
if ( !empty(a:fname) || !empty(a:ftype) ) && filereadable(a:fname)
|
if ( !empty(a:fname) || !empty(a:ftype) ) && filereadable(a:fname)
|
||||||
@@ -193,24 +185,20 @@ endf
|
|||||||
fu! s:parseline(line)
|
fu! s:parseline(line)
|
||||||
let eval = '\v^([^\t]+)\t(.+)\t\/\^(.+)\$\/\;\"\t(.+)\tline(no)?\:(\d+)'
|
let eval = '\v^([^\t]+)\t(.+)\t\/\^(.+)\$\/\;\"\t(.+)\tline(no)?\:(\d+)'
|
||||||
let vals = matchlist(a:line, eval)
|
let vals = matchlist(a:line, eval)
|
||||||
if empty(vals) | retu '' | en
|
if vals == [] | retu '' | en
|
||||||
let [bufnr, bufname] = [bufnr('^'.vals[2].'$'), fnamemodify(vals[2], ':p:t')]
|
let [bufnr, bufname] = [bufnr('^'.vals[2].'$'), fnamemodify(vals[2], ':p:t')]
|
||||||
retu vals[1].' '.vals[4].'|'.bufnr.':'.bufname.'|'.vals[6].'| '.vals[3]
|
retu vals[1].' '.vals[4].'|'.bufnr.':'.bufname.'|'.vals[6].'| '.vals[3]
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:syntax()
|
fu! s:syntax()
|
||||||
if !hlexists('CtrlPTagKind')
|
if !ctrlp#nosy()
|
||||||
hi link CtrlPTagKind Title
|
cal ctrlp#hicheck('CtrlPTagKind', 'Title')
|
||||||
en
|
cal ctrlp#hicheck('CtrlPBufName', 'Directory')
|
||||||
if !hlexists('CtrlPBufName')
|
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
|
||||||
hi link CtrlPBufName Directory
|
|
||||||
en
|
|
||||||
if !hlexists('CtrlPTabExtra')
|
|
||||||
hi link CtrlPTabExtra Comment
|
|
||||||
en
|
|
||||||
sy match CtrlPTagKind '\zs[^\t|]\+\ze|\d\+:[^|]\+|\d\+|'
|
sy match CtrlPTagKind '\zs[^\t|]\+\ze|\d\+:[^|]\+|\d\+|'
|
||||||
sy match CtrlPBufName '|\d\+:\zs[^|]\+\ze|\d\+|'
|
sy match CtrlPBufName '|\d\+:\zs[^|]\+\ze|\d\+|'
|
||||||
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName,CtrlPTagKind
|
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName,CtrlPTagKind
|
||||||
|
en
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
fu! ctrlp#buffertag#init(fname)
|
fu! ctrlp#buffertag#init(fname)
|
||||||
@@ -223,14 +211,13 @@ fu! ctrlp#buffertag#init(fname)
|
|||||||
let tftype = get(split(getbufvar(bname, '&ft'), '\.'), 0, '')
|
let tftype = get(split(getbufvar(bname, '&ft'), '\.'), 0, '')
|
||||||
cal extend(lines, s:process(bname, tftype))
|
cal extend(lines, s:process(bname, tftype))
|
||||||
endfo
|
endfo
|
||||||
if has('syntax') && exists('g:syntax_on')
|
|
||||||
cal s:syntax()
|
cal s:syntax()
|
||||||
en
|
|
||||||
retu lines
|
retu lines
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#buffertag#accept(mode, str)
|
fu! ctrlp#buffertag#accept(mode, str)
|
||||||
let vals = matchlist(a:str, '\v^[^\t]+\t+[^\t|]+\|(\d+)\:[^\t|]+\|(\d+)\|')
|
let vals = matchlist(a:str, '\v^[^\t]+\t+[^\t|]+\|(\d+)\:[^\t|]+\|(\d+)\|')
|
||||||
|
if vals == [] | retu | en
|
||||||
let [bufnm, linenr] = [fnamemodify(bufname(str2nr(vals[1])), ':p'), vals[2]]
|
let [bufnm, linenr] = [fnamemodify(bufname(str2nr(vals[1])), ':p'), vals[2]]
|
||||||
cal ctrlp#acceptfile(a:mode, bufnm, linenr)
|
cal ctrlp#acceptfile(a:mode, bufnm, linenr)
|
||||||
endf
|
endf
|
||||||
|
|||||||
@@ -10,18 +10,16 @@ if exists('g:loaded_ctrlp_changes') && g:loaded_ctrlp_changes
|
|||||||
en
|
en
|
||||||
let g:loaded_ctrlp_changes = 1
|
let g:loaded_ctrlp_changes = 1
|
||||||
|
|
||||||
let s:changes_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#changes#init(s:bufnr, s:crfile)',
|
\ 'init': 'ctrlp#changes#init(s:bufnr, s:crbufnr)',
|
||||||
\ 'accept': 'ctrlp#changes#accept',
|
\ 'accept': 'ctrlp#changes#accept',
|
||||||
\ 'lname': 'changes',
|
\ 'lname': 'changes',
|
||||||
\ 'sname': 'chs',
|
\ 'sname': 'chs',
|
||||||
\ 'exit': 'ctrlp#changes#exit()',
|
\ 'exit': 'ctrlp#changes#exit()',
|
||||||
\ 'type': 'tabe',
|
\ 'type': 'tabe',
|
||||||
\ 'sort': 0,
|
\ 'sort': 0,
|
||||||
\ }
|
\ 'nolim': 1,
|
||||||
|
\ })
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:changes_var) : [s:changes_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
" Utilities {{{1
|
" Utilities {{{1
|
||||||
@@ -46,41 +44,34 @@ fu! s:process(clines, ...)
|
|||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:syntax()
|
fu! s:syntax()
|
||||||
if !hlexists('CtrlPBufName')
|
if !ctrlp#nosy()
|
||||||
hi link CtrlPBufName Directory
|
cal ctrlp#hicheck('CtrlPBufName', 'Directory')
|
||||||
en
|
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
|
||||||
if !hlexists('CtrlPTabExtra')
|
|
||||||
hi link CtrlPTabExtra Comment
|
|
||||||
en
|
|
||||||
sy match CtrlPBufName '\t|\d\+:\zs[^|]\+\ze|\d\+:\d\+|$'
|
sy match CtrlPBufName '\t|\d\+:\zs[^|]\+\ze|\d\+:\d\+|$'
|
||||||
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName
|
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName
|
||||||
|
en
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
fu! ctrlp#changes#init(original_bufnr, fname)
|
fu! ctrlp#changes#init(original_bufnr, bufnr)
|
||||||
let fname = exists('s:bufname') ? s:bufname : a:fname
|
let bufnr = exists('s:bufnr') ? s:bufnr : a:bufnr
|
||||||
let bufs = exists('s:clmode') && s:clmode
|
let bufs = exists('s:clmode') && s:clmode ? ctrlp#buffers('id') : [bufnr]
|
||||||
\ ? filter(ctrlp#buffers(), 'filereadable(v:val)') : [fname]
|
cal filter(bufs, 'v:val > 0')
|
||||||
let [swb, &swb] = [&swb, '']
|
let [swb, &swb] = [&swb, '']
|
||||||
let lines = []
|
let lines = []
|
||||||
for each in bufs
|
for each in bufs
|
||||||
let [bname, fnamet] = [fnamemodify(each, ':p'), fnamemodify(each, ':t')]
|
let fnamet = fnamemodify(bufname(each), ':t')
|
||||||
let bufnr = bufnr('^'.bname.'$')
|
cal extend(lines, s:process(s:changelist(each), each, fnamet))
|
||||||
if bufnr > 0
|
|
||||||
cal extend(lines, s:process(s:changelist(bufnr), bufnr, fnamet))
|
|
||||||
en
|
|
||||||
endfo
|
endfo
|
||||||
sil! exe 'noa hid b' a:original_bufnr
|
sil! exe 'noa hid b' a:original_bufnr
|
||||||
let &swb = swb
|
let &swb = swb
|
||||||
let g:ctrlp_nolimit = 1
|
|
||||||
if has('syntax') && exists('g:syntax_on')
|
|
||||||
cal ctrlp#syntax()
|
cal ctrlp#syntax()
|
||||||
cal s:syntax()
|
cal s:syntax()
|
||||||
en
|
|
||||||
retu lines
|
retu lines
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#changes#accept(mode, str)
|
fu! ctrlp#changes#accept(mode, str)
|
||||||
let info = matchlist(a:str, '\t|\(\d\+\):[^|]\+|\(\d\+\):\(\d\+\)|$')
|
let info = matchlist(a:str, '\t|\(\d\+\):[^|]\+|\(\d\+\):\(\d\+\)|$')
|
||||||
|
if info == [] | retu | en
|
||||||
let bufnr = str2nr(get(info, 1))
|
let bufnr = str2nr(get(info, 1))
|
||||||
if bufnr
|
if bufnr
|
||||||
cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'))
|
cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'))
|
||||||
@@ -92,13 +83,13 @@ endf
|
|||||||
fu! ctrlp#changes#cmd(mode, ...)
|
fu! ctrlp#changes#cmd(mode, ...)
|
||||||
let s:clmode = a:mode
|
let s:clmode = a:mode
|
||||||
if a:0 && !empty(a:1)
|
if a:0 && !empty(a:1)
|
||||||
let s:bufname = fnamemodify(a:1, ':p')
|
let s:bufnr = bufnr('^'.fnamemodify(a:1, ':p').'$')
|
||||||
en
|
en
|
||||||
retu s:id
|
retu s:id
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#changes#exit()
|
fu! ctrlp#changes#exit()
|
||||||
unl! s:clmode s:bufname
|
unl! s:clmode s:bufnr
|
||||||
endf
|
endf
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
|||||||
@@ -17,16 +17,14 @@ let s:ars = [
|
|||||||
\ 's:glob',
|
\ 's:glob',
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
let s:dir_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#dir#init('.join(s:ars, ', ').')',
|
\ 'init': 'ctrlp#dir#init('.join(s:ars, ', ').')',
|
||||||
\ 'accept': 'ctrlp#dir#accept',
|
\ 'accept': 'ctrlp#dir#accept',
|
||||||
\ 'lname': 'dirs',
|
\ 'lname': 'dirs',
|
||||||
\ 'sname': 'dir',
|
\ 'sname': 'dir',
|
||||||
\ 'type': 'path',
|
\ 'type': 'path',
|
||||||
\ }
|
\ 'specinput': 1,
|
||||||
|
\ })
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:dir_var) : [s:dir_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
" Utilities {{{1
|
" Utilities {{{1
|
||||||
@@ -34,9 +32,9 @@ fu! s:globdirs(dirs, depth)
|
|||||||
let entries = split(globpath(a:dirs, s:glob), "\n")
|
let entries = split(globpath(a:dirs, s:glob), "\n")
|
||||||
let [dirs, depth] = [ctrlp#dirnfile(entries)[0], a:depth + 1]
|
let [dirs, depth] = [ctrlp#dirnfile(entries)[0], a:depth + 1]
|
||||||
cal extend(g:ctrlp_alldirs, dirs)
|
cal extend(g:ctrlp_alldirs, dirs)
|
||||||
if !empty(dirs) && !s:max(len(g:ctrlp_alldirs), s:maxfiles)
|
let nr = len(g:ctrlp_alldirs)
|
||||||
\ && depth <= s:maxdepth
|
if !empty(dirs) && !s:max(nr, s:maxfiles) && depth <= s:maxdepth
|
||||||
sil! cal ctrlp#progress(len(g:ctrlp_alldirs))
|
sil! cal ctrlp#progress(nr)
|
||||||
cal s:globdirs(join(dirs, ','), depth)
|
cal s:globdirs(join(dirs, ','), depth)
|
||||||
en
|
en
|
||||||
endf
|
endf
|
||||||
@@ -48,25 +46,24 @@ endf
|
|||||||
fu! ctrlp#dir#init(...)
|
fu! ctrlp#dir#init(...)
|
||||||
let s:cwd = getcwd()
|
let s:cwd = getcwd()
|
||||||
for each in range(len(s:ars))
|
for each in range(len(s:ars))
|
||||||
exe 'let' s:ars[each] '=' string(eval('a:'.(each + 1)))
|
let {s:ars[each]} = a:{each + 1}
|
||||||
endfo
|
endfo
|
||||||
let cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().s:dir_var['sname']
|
let cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'dir'
|
||||||
let cafile = cadir.ctrlp#utils#lash().ctrlp#utils#cachefile(s:dir_var['sname'])
|
let cafile = cadir.ctrlp#utils#lash().ctrlp#utils#cachefile('dir')
|
||||||
if g:ctrlp_newdir || !filereadable(cafile)
|
if g:ctrlp_newdir || !filereadable(cafile)
|
||||||
let g:ctrlp_alldirs = []
|
let [s:initcwd, g:ctrlp_alldirs] = [s:cwd, []]
|
||||||
cal s:globdirs(s:cwd, 0)
|
cal s:globdirs(s:cwd, 0)
|
||||||
cal ctrlp#rmbasedir(g:ctrlp_alldirs)
|
cal ctrlp#rmbasedir(g:ctrlp_alldirs)
|
||||||
let read_cache = 0
|
|
||||||
if len(g:ctrlp_alldirs) <= s:compare_lim
|
if len(g:ctrlp_alldirs) <= s:compare_lim
|
||||||
cal sort(g:ctrlp_alldirs, 'ctrlp#complen')
|
cal sort(g:ctrlp_alldirs, 'ctrlp#complen')
|
||||||
en
|
en
|
||||||
el
|
|
||||||
let g:ctrlp_alldirs = ctrlp#utils#readfile(cafile)
|
|
||||||
let read_cache = 1
|
|
||||||
en
|
|
||||||
if !read_cache
|
|
||||||
cal ctrlp#utils#writecache(g:ctrlp_alldirs, cadir, cafile)
|
cal ctrlp#utils#writecache(g:ctrlp_alldirs, cadir, cafile)
|
||||||
let g:ctrlp_newdir = 0
|
let g:ctrlp_newdir = 0
|
||||||
|
el
|
||||||
|
if !( exists('s:initcwd') && s:initcwd == s:cwd )
|
||||||
|
let s:initcwd = s:cwd
|
||||||
|
let g:ctrlp_alldirs = ctrlp#utils#readfile(cafile)
|
||||||
|
en
|
||||||
en
|
en
|
||||||
retu g:ctrlp_alldirs
|
retu g:ctrlp_alldirs
|
||||||
endf
|
endf
|
||||||
|
|||||||
@@ -10,52 +10,45 @@ if exists('g:loaded_ctrlp_line') && g:loaded_ctrlp_line
|
|||||||
en
|
en
|
||||||
let g:loaded_ctrlp_line = 1
|
let g:loaded_ctrlp_line = 1
|
||||||
|
|
||||||
let s:line_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#line#init()',
|
\ 'init': 'ctrlp#line#init()',
|
||||||
\ 'accept': 'ctrlp#line#accept',
|
\ 'accept': 'ctrlp#line#accept',
|
||||||
\ 'lname': 'lines',
|
\ 'lname': 'lines',
|
||||||
\ 'sname': 'lns',
|
\ 'sname': 'lns',
|
||||||
\ 'type': 'tabe',
|
\ 'type': 'tabe',
|
||||||
\ }
|
\ })
|
||||||
|
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:line_var) : [s:line_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
" Utilities {{{1
|
" Utilities {{{1
|
||||||
fu! s:syntax()
|
fu! s:syntax()
|
||||||
if !hlexists('CtrlPBufName')
|
if !ctrlp#nosy()
|
||||||
hi link CtrlPBufName Directory
|
cal ctrlp#hicheck('CtrlPBufName', 'Directory')
|
||||||
en
|
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
|
||||||
if !hlexists('CtrlPTabExtra')
|
|
||||||
hi link CtrlPTabExtra Comment
|
|
||||||
en
|
|
||||||
sy match CtrlPBufName '\t|\zs[^|]\+\ze|\d\+:\d\+|$'
|
sy match CtrlPBufName '\t|\zs[^|]\+\ze|\d\+:\d\+|$'
|
||||||
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName
|
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName
|
||||||
|
en
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
fu! ctrlp#line#init()
|
fu! ctrlp#line#init()
|
||||||
let [bufs, lines] = [filter(ctrlp#buffers(), 'filereadable(v:val)'), []]
|
let [bufs, lines] = [ctrlp#buffers('id'), []]
|
||||||
for each in bufs
|
for bufnr in bufs
|
||||||
let [fnamet, from_file] = [fnamemodify(each, ':t'), readfile(each)]
|
let [lfb, bufn] = [getbufline(bufnr, 1, '$'), bufname(bufnr)]
|
||||||
let bname = fnamemodify(each, ':p')
|
let lfb = lfb == [] ? ctrlp#utils#readfile(fnamemodify(bufn, ':p')) : lfb
|
||||||
cal map(from_file, 'tr(v:val, '' '', '' '')')
|
cal map(lfb, 'tr(v:val, '' '', '' '')')
|
||||||
let [id, len_ff, bufnr] = [1, len(from_file), bufnr('^'.bname.'$')]
|
let [linenr, len_lfb, buft] = [1, len(lfb), fnamemodify(bufn, ':t')]
|
||||||
wh id <= len_ff
|
wh linenr <= len_lfb
|
||||||
let from_file[id-1] .= ' |'.fnamet.'|'.bufnr.':'.id.'|'
|
let lfb[linenr - 1] .= ' |'.buft.'|'.bufnr.':'.linenr.'|'
|
||||||
let id += 1
|
let linenr += 1
|
||||||
endw
|
endw
|
||||||
cal filter(from_file, 'v:val !~ ''^\s*\t|[^|]\+|\d\+:\d\+|$''')
|
cal extend(lines, filter(lfb, 'v:val !~ ''^\s*\t|[^|]\+|\d\+:\d\+|$'''))
|
||||||
cal extend(lines, from_file)
|
|
||||||
endfo
|
endfo
|
||||||
if has('syntax') && exists('g:syntax_on')
|
|
||||||
cal s:syntax()
|
cal s:syntax()
|
||||||
en
|
|
||||||
retu lines
|
retu lines
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#line#accept(mode, str)
|
fu! ctrlp#line#accept(mode, str)
|
||||||
let info = matchlist(a:str, '\t|[^|]\+|\(\d\+\):\(\d\+\)|$')
|
let info = matchlist(a:str, '\t|[^|]\+|\(\d\+\):\(\d\+\)|$')
|
||||||
|
if info == [] | retu | en
|
||||||
let [bufnr, linenr] = [str2nr(get(info, 1)), get(info, 2)]
|
let [bufnr, linenr] = [str2nr(get(info, 1)), get(info, 2)]
|
||||||
if bufnr > 0
|
if bufnr > 0
|
||||||
cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'), linenr)
|
cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'), linenr)
|
||||||
|
|||||||
83
bundle/git_ctrlp/autoload/ctrlp/mixed.vim
Normal file
83
bundle/git_ctrlp/autoload/ctrlp/mixed.vim
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
" =============================================================================
|
||||||
|
" File: autoload/ctrlp/mixed.vim
|
||||||
|
" Description: Mixing Files + MRU + Buffers
|
||||||
|
" Author: Kien Nguyen <github.com/kien>
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" Init {{{1
|
||||||
|
if exists('g:loaded_ctrlp_mixed') && g:loaded_ctrlp_mixed
|
||||||
|
fini
|
||||||
|
en
|
||||||
|
let [g:loaded_ctrlp_mixed, g:ctrlp_newmix] = [1, 0]
|
||||||
|
|
||||||
|
cal add(g:ctrlp_ext_vars, {
|
||||||
|
\ 'init': 'ctrlp#mixed#init(s:compare_lim)',
|
||||||
|
\ 'accept': 'ctrlp#acceptfile',
|
||||||
|
\ 'lname': 'fil + mru + buf',
|
||||||
|
\ 'sname': 'mix',
|
||||||
|
\ 'type': 'path',
|
||||||
|
\ 'opmul': 1,
|
||||||
|
\ 'specinput': 1,
|
||||||
|
\ })
|
||||||
|
|
||||||
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
|
" Utilities {{{1
|
||||||
|
fu! s:newcache(cwd)
|
||||||
|
if g:ctrlp_newmix || !has_key(g:ctrlp_allmixes, 'data') | retu 1 | en
|
||||||
|
retu g:ctrlp_allmixes['cwd'] != a:cwd
|
||||||
|
\ || g:ctrlp_allmixes['filtime'] < getftime(ctrlp#utils#cachefile())
|
||||||
|
\ || g:ctrlp_allmixes['mrutime'] < getftime(ctrlp#mrufiles#cachefile())
|
||||||
|
\ || g:ctrlp_allmixes['bufs'] < len(ctrlp#mrufiles#bufs())
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:getnewmix(cwd, clim)
|
||||||
|
if g:ctrlp_newmix
|
||||||
|
cal ctrlp#mrufiles#refresh('raw')
|
||||||
|
let g:ctrlp_newcache = 1
|
||||||
|
en
|
||||||
|
let g:ctrlp_lines = copy(ctrlp#files())
|
||||||
|
cal ctrlp#progress('Mixing...')
|
||||||
|
let mrufs = copy(ctrlp#mrufiles#list('raw'))
|
||||||
|
if exists('+ssl') && &ssl
|
||||||
|
cal map(mrufs, 'tr(v:val, "\\", "/")')
|
||||||
|
en
|
||||||
|
let bufs = map(ctrlp#buffers('id'), 'fnamemodify(bufname(v:val), ":p")')
|
||||||
|
let mrufs = bufs + filter(mrufs, 'index(bufs, v:val) < 0')
|
||||||
|
if len(mrufs) > len(g:ctrlp_lines)
|
||||||
|
cal filter(mrufs, 'stridx(v:val, a:cwd)')
|
||||||
|
el
|
||||||
|
let cwd_mrufs = filter(copy(mrufs), '!stridx(v:val, a:cwd)')
|
||||||
|
let cwd_mrufs = ctrlp#rmbasedir(cwd_mrufs)
|
||||||
|
for each in cwd_mrufs
|
||||||
|
let id = index(g:ctrlp_lines, each)
|
||||||
|
if id >= 0 | cal remove(g:ctrlp_lines, id) | en
|
||||||
|
endfo
|
||||||
|
en
|
||||||
|
cal map(mrufs, 'fnamemodify(v:val, ":.")')
|
||||||
|
let g:ctrlp_lines = len(mrufs) > len(g:ctrlp_lines)
|
||||||
|
\ ? g:ctrlp_lines + mrufs : mrufs + g:ctrlp_lines
|
||||||
|
if len(g:ctrlp_lines) <= a:clim
|
||||||
|
cal sort(g:ctrlp_lines, 'ctrlp#complen')
|
||||||
|
en
|
||||||
|
let g:ctrlp_allmixes = { 'filtime': getftime(ctrlp#utils#cachefile()),
|
||||||
|
\ 'mrutime': getftime(ctrlp#mrufiles#cachefile()), 'cwd': a:cwd,
|
||||||
|
\ 'bufs': len(ctrlp#mrufiles#bufs()), 'data': g:ctrlp_lines }
|
||||||
|
endf
|
||||||
|
" Public {{{1
|
||||||
|
fu! ctrlp#mixed#init(clim)
|
||||||
|
let cwd = getcwd()
|
||||||
|
if s:newcache(cwd)
|
||||||
|
cal s:getnewmix(cwd, a:clim)
|
||||||
|
el
|
||||||
|
let g:ctrlp_lines = g:ctrlp_allmixes['data']
|
||||||
|
en
|
||||||
|
let g:ctrlp_newmix = 0
|
||||||
|
retu g:ctrlp_lines
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! ctrlp#mixed#id()
|
||||||
|
retu s:id
|
||||||
|
endf
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
|
||||||
@@ -5,120 +5,114 @@
|
|||||||
" =============================================================================
|
" =============================================================================
|
||||||
|
|
||||||
" Static variables {{{1
|
" Static variables {{{1
|
||||||
|
let [s:mrbs, s:mrufs] = [[], []]
|
||||||
|
|
||||||
fu! ctrlp#mrufiles#opts()
|
fu! ctrlp#mrufiles#opts()
|
||||||
let opts = {
|
let [pref, opts] = ['g:ctrlp_mruf_', {
|
||||||
\ 'g:ctrlp_mruf_max': ['s:max', 250],
|
\ 'max': ['s:max', 250],
|
||||||
\ 'g:ctrlp_mruf_include': ['s:in', ''],
|
\ 'include': ['s:in', ''],
|
||||||
\ 'g:ctrlp_mruf_exclude': ['s:ex', ''],
|
\ 'exclude': ['s:ex', ''],
|
||||||
\ 'g:ctrlp_mruf_case_sensitive': ['s:csen', 1],
|
\ 'case_sensitive': ['s:cseno', 1],
|
||||||
\ 'g:ctrlp_mruf_relative': ['s:re', 0],
|
\ 'relative': ['s:re', 0],
|
||||||
\ 'g:ctrlp_mruf_last_entered': ['s:mre', 0],
|
\ }]
|
||||||
\ }
|
|
||||||
for [ke, va] in items(opts)
|
for [ke, va] in items(opts)
|
||||||
exe 'let' va[0] '=' string(exists(ke) ? eval(ke) : va[1])
|
let [{va[0]}, {pref.ke}] = [pref.ke, exists(pref.ke) ? {pref.ke} : va[1]]
|
||||||
endfo
|
endfo
|
||||||
let [s:csen, s:mrbs] = [s:csen ? '#' : '?', []]
|
|
||||||
if exists('s:locked')
|
|
||||||
cal ctrlp#mrufiles#init()
|
|
||||||
en
|
|
||||||
endf
|
endf
|
||||||
cal ctrlp#mrufiles#opts()
|
cal ctrlp#mrufiles#opts()
|
||||||
" Utilities {{{1
|
" Utilities {{{1
|
||||||
fu! s:excl(fn)
|
fu! s:excl(fn)
|
||||||
retu !empty(s:ex) && a:fn =~# s:ex
|
retu !empty({s:ex}) && a:fn =~# {s:ex}
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:readcache()
|
fu! s:mergelists()
|
||||||
if !exists('s:cadir') || !exists('s:cafile')
|
let diskmrufs = ctrlp#utils#readfile(ctrlp#mrufiles#cachefile())
|
||||||
let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'mru'
|
cal filter(diskmrufs, 'index(s:mrufs, v:val) < 0')
|
||||||
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
|
let mrufs = s:mrufs + diskmrufs
|
||||||
en
|
retu s:chop(mrufs)
|
||||||
retu ctrlp#utils#readfile(s:cafile)
|
endf
|
||||||
|
|
||||||
|
fu! s:chop(mrufs)
|
||||||
|
if len(a:mrufs) > {s:max} | cal remove(a:mrufs, {s:max}, -1) | en
|
||||||
|
retu a:mrufs
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:reformat(mrufs)
|
fu! s:reformat(mrufs)
|
||||||
if s:re
|
if {s:re}
|
||||||
let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd()
|
let cwd = exists('+ssl') ? tr(getcwd(), '/', '\') : getcwd()
|
||||||
cal filter(a:mrufs, '!stridx(v:val, cwd)')
|
cal filter(a:mrufs, '!stridx(v:val, cwd)')
|
||||||
en
|
en
|
||||||
retu map(a:mrufs, 'fnamemodify(v:val, '':.'')')
|
retu map(a:mrufs, 'fnamemodify(v:val, ":.")')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:record(bufnr, ...)
|
fu! s:record(bufnr)
|
||||||
if s:locked | retu | en
|
if s:locked | retu | en
|
||||||
let bufnr = a:bufnr + 0
|
let bufnr = a:bufnr + 0
|
||||||
if bufnr <= 0 | retu | en
|
if bufnr <= 0 | retu | en
|
||||||
let fn = fnamemodify(bufname(bufnr), ':p')
|
let bufname = bufname(bufnr)
|
||||||
|
if empty(bufname) | retu | en
|
||||||
|
let fn = fnamemodify(bufname, ':p')
|
||||||
let fn = exists('+ssl') ? tr(fn, '/', '\') : fn
|
let fn = exists('+ssl') ? tr(fn, '/', '\') : fn
|
||||||
cal filter(s:mrbs, 'v:val !='.s:csen.' fn')
|
cal filter(s:mrbs, 'v:val != bufnr')
|
||||||
cal insert(s:mrbs, fn)
|
cal insert(s:mrbs, bufnr)
|
||||||
if empty(fn) || !empty(&bt) || ( !empty(s:in) && fn !~# s:in )
|
if ( !empty({s:in}) && fn !~# {s:in} ) || ( !empty({s:ex}) && fn =~# {s:ex} )
|
||||||
\ || ( !empty(s:ex) && fn =~# s:ex ) || !filereadable(fn)
|
\ || !empty(&bt) || !filereadable(fn) | retu
|
||||||
\ || ( a:0 && a:1 == 1 )
|
|
||||||
retu
|
|
||||||
en
|
en
|
||||||
let mrufs = s:readcache()
|
cal filter(s:mrufs, 'v:val !='.( {s:cseno} ? '#' : '?' ).' fn')
|
||||||
cal filter(mrufs, 'v:val !='.s:csen.' fn')
|
cal insert(s:mrufs, fn)
|
||||||
cal insert(mrufs, fn)
|
endf
|
||||||
if len(mrufs) > s:max | cal remove(mrufs, s:max, -1) | en
|
|
||||||
cal ctrlp#utils#writecache(mrufs, s:cadir, s:cafile)
|
fu! s:savetofile(mrufs)
|
||||||
|
cal ctrlp#utils#writecache(a:mrufs, s:cadir, s:cafile)
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
fu! ctrlp#mrufiles#refresh()
|
fu! ctrlp#mrufiles#refresh(...)
|
||||||
let mrufs = s:readcache()
|
let s:mrufs = s:mergelists()
|
||||||
cal filter(mrufs, '!empty(ctrlp#utils#glob(v:val, 1)) && !s:excl(v:val)')
|
cal filter(s:mrufs, '!empty(ctrlp#utils#glob(v:val, 1)) && !s:excl(v:val)')
|
||||||
if exists('+ssl')
|
if exists('+ssl')
|
||||||
cal map(mrufs, 'tr(v:val, ''/'', ''\'')')
|
cal map(s:mrufs, 'tr(v:val, "/", "\\")')
|
||||||
cal filter(mrufs, 'count(mrufs, v:val) == 1')
|
cal filter(s:mrufs, 'count(s:mrufs, v:val) == 1')
|
||||||
en
|
en
|
||||||
cal ctrlp#utils#writecache(mrufs, s:cadir, s:cafile)
|
cal s:savetofile(s:mrufs)
|
||||||
retu s:reformat(mrufs)
|
retu a:0 && a:1 == 'raw' ? [] : s:reformat(copy(s:mrufs))
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#mrufiles#remove(files)
|
fu! ctrlp#mrufiles#remove(files)
|
||||||
let mrufs = []
|
let s:mrufs = []
|
||||||
if a:files != []
|
if a:files != []
|
||||||
let mrufs = s:readcache()
|
let s:mrufs = s:mergelists()
|
||||||
cal filter(mrufs, 'index(a:files, v:val) < 0')
|
cal filter(s:mrufs, 'index(a:files, v:val, 0, '.(!{s:cseno}).') < 0')
|
||||||
en
|
en
|
||||||
cal ctrlp#utils#writecache(mrufs, s:cadir, s:cafile)
|
cal s:savetofile(s:mrufs)
|
||||||
retu map(mrufs, 'fnamemodify(v:val, '':.'')')
|
retu s:reformat(copy(s:mrufs))
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#mrufiles#list(...)
|
fu! ctrlp#mrufiles#list(...)
|
||||||
if a:0 | cal s:record(a:1) | retu | en
|
retu a:0 ? a:1 == 'raw' ? s:mergelists() : 0 : s:reformat(s:mergelists())
|
||||||
retu s:reformat(s:readcache())
|
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#mrufiles#bufs()
|
fu! ctrlp#mrufiles#bufs()
|
||||||
retu s:mrbs
|
retu s:mrbs
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
fu! ctrlp#mrufiles#cachefile()
|
||||||
|
if !exists('s:cadir') || !exists('s:cafile')
|
||||||
|
let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'mru'
|
||||||
|
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
|
||||||
|
en
|
||||||
|
retu s:cafile
|
||||||
|
endf
|
||||||
|
|
||||||
fu! ctrlp#mrufiles#init()
|
fu! ctrlp#mrufiles#init()
|
||||||
if !has('autocmd') | retu | en
|
if !has('autocmd') | retu | en
|
||||||
let s:locked = 0
|
let s:locked = 0
|
||||||
aug CtrlPMRUF
|
aug CtrlPMRUF
|
||||||
au!
|
au!
|
||||||
au BufReadPost,BufNewFile,BufWritePost * cal s:record(expand('<abuf>', 1))
|
au BufAdd,BufEnter,BufLeave,BufUnload * cal s:record(expand('<abuf>', 1))
|
||||||
au QuickFixCmdPre *vimgrep* let s:locked = 1
|
au QuickFixCmdPre *vimgrep* let s:locked = 1
|
||||||
au QuickFixCmdPost *vimgrep* let s:locked = 0
|
au QuickFixCmdPost *vimgrep* let s:locked = 0
|
||||||
|
au VimLeavePre * cal s:savetofile(s:mergelists())
|
||||||
aug END
|
aug END
|
||||||
aug CtrlPMREB
|
|
||||||
au!
|
|
||||||
au BufEnter,BufUnload * cal s:record(expand('<abuf>', 1), 1)
|
|
||||||
aug END
|
|
||||||
if exists('#CtrlPMREF')
|
|
||||||
au! CtrlPMREF
|
|
||||||
en
|
|
||||||
if s:mre
|
|
||||||
aug CtrlPMREF
|
|
||||||
au!
|
|
||||||
au BufEnter,BufUnload * cal s:record(expand('<abuf>', 1))
|
|
||||||
aug END
|
|
||||||
if exists('#CtrlPMREB')
|
|
||||||
au! CtrlPMREB
|
|
||||||
en
|
|
||||||
en
|
|
||||||
endf
|
endf
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
|||||||
@@ -10,17 +10,15 @@ if exists('g:loaded_ctrlp_quickfix') && g:loaded_ctrlp_quickfix
|
|||||||
en
|
en
|
||||||
let g:loaded_ctrlp_quickfix = 1
|
let g:loaded_ctrlp_quickfix = 1
|
||||||
|
|
||||||
let s:var_qf = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#quickfix#init()',
|
\ 'init': 'ctrlp#quickfix#init()',
|
||||||
\ 'accept': 'ctrlp#quickfix#accept',
|
\ 'accept': 'ctrlp#quickfix#accept',
|
||||||
\ 'lname': 'quickfix',
|
\ 'lname': 'quickfix',
|
||||||
\ 'sname': 'qfx',
|
\ 'sname': 'qfx',
|
||||||
\ 'type': 'line',
|
\ 'type': 'line',
|
||||||
\ 'sort': 0,
|
\ 'sort': 0,
|
||||||
\ }
|
\ 'nolim': 1,
|
||||||
|
\ })
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:var_qf) : [s:var_qf]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
|
|
||||||
@@ -28,20 +26,22 @@ fu! s:lineout(dict)
|
|||||||
retu printf('%s|%d:%d| %s', bufname(a:dict['bufnr']), a:dict['lnum'],
|
retu printf('%s|%d:%d| %s', bufname(a:dict['bufnr']), a:dict['lnum'],
|
||||||
\ a:dict['col'], matchstr(a:dict['text'], '\s*\zs.*\S'))
|
\ a:dict['col'], matchstr(a:dict['text'], '\s*\zs.*\S'))
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Utilities {{{1
|
||||||
fu! ctrlp#quickfix#init()
|
fu! s:syntax()
|
||||||
let g:ctrlp_nolimit = 1
|
if !ctrlp#nosy()
|
||||||
if has('syntax') && exists('g:syntax_on')
|
cal ctrlp#hicheck('CtrlPqfLineCol', 'Search')
|
||||||
if !hlexists('CtrlPqfLineCol')
|
|
||||||
hi link CtrlPqfLineCol Search
|
|
||||||
en
|
|
||||||
sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
|
sy match CtrlPqfLineCol '|\zs\d\+:\d\+\ze|'
|
||||||
en
|
en
|
||||||
|
endf
|
||||||
|
" Public {{{1
|
||||||
|
fu! ctrlp#quickfix#init()
|
||||||
|
cal s:syntax()
|
||||||
retu map(getqflist(), 's:lineout(v:val)')
|
retu map(getqflist(), 's:lineout(v:val)')
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#quickfix#accept(mode, str)
|
fu! ctrlp#quickfix#accept(mode, str)
|
||||||
let items = matchlist(a:str, '^\([^|]\+\ze\)|\(\d\+\):\(\d\+\)|')
|
let items = matchlist(a:str, '^\([^|]\+\ze\)|\(\d\+\):\(\d\+\)|')
|
||||||
|
if items == [] | retu | en
|
||||||
let [md, filpath] = [a:mode, fnamemodify(items[1], ':p')]
|
let [md, filpath] = [a:mode, fnamemodify(items[1], ':p')]
|
||||||
if empty(filpath) | retu | en
|
if empty(filpath) | retu | en
|
||||||
cal ctrlp#exit()
|
cal ctrlp#exit()
|
||||||
|
|||||||
@@ -10,16 +10,14 @@ if exists('g:loaded_ctrlp_rtscript') && g:loaded_ctrlp_rtscript
|
|||||||
en
|
en
|
||||||
let [g:loaded_ctrlp_rtscript, g:ctrlp_newrts] = [1, 0]
|
let [g:loaded_ctrlp_rtscript, g:ctrlp_newrts] = [1, 0]
|
||||||
|
|
||||||
let s:rtscript_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#rtscript#init()',
|
\ 'init': 'ctrlp#rtscript#init()',
|
||||||
\ 'accept': 'ctrlp#acceptfile',
|
\ 'accept': 'ctrlp#acceptfile',
|
||||||
\ 'lname': 'runtime scripts',
|
\ 'lname': 'runtime scripts',
|
||||||
\ 'sname': 'rts',
|
\ 'sname': 'rts',
|
||||||
\ 'type': 'path',
|
\ 'type': 'path',
|
||||||
\ }
|
\ 'opmul': 1,
|
||||||
|
\ })
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:rtscript_var) : [s:rtscript_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
|
|||||||
@@ -10,17 +10,14 @@ if exists('g:loaded_ctrlp_tag') && g:loaded_ctrlp_tag
|
|||||||
en
|
en
|
||||||
let g:loaded_ctrlp_tag = 1
|
let g:loaded_ctrlp_tag = 1
|
||||||
|
|
||||||
let s:tag_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#tag#init()',
|
\ 'init': 'ctrlp#tag#init()',
|
||||||
\ 'accept': 'ctrlp#tag#accept',
|
\ 'accept': 'ctrlp#tag#accept',
|
||||||
\ 'lname': 'tags',
|
\ 'lname': 'tags',
|
||||||
\ 'sname': 'tag',
|
\ 'sname': 'tag',
|
||||||
\ 'enter': 'ctrlp#tag#enter()',
|
\ 'enter': 'ctrlp#tag#enter()',
|
||||||
\ 'type': 'tabs',
|
\ 'type': 'tabs',
|
||||||
\ }
|
\ })
|
||||||
|
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:tag_var) : [s:tag_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
" Utilities {{{1
|
" Utilities {{{1
|
||||||
@@ -43,19 +40,27 @@ fu! s:findcount(str)
|
|||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:filter(tags)
|
fu! s:filter(tags)
|
||||||
let [nr, alltags] = [0, a:tags]
|
let nr = 0
|
||||||
wh 0 < 1
|
wh 0 < 1
|
||||||
if alltags[nr] =~ '^!' && alltags[nr] !~ '^!_TAG_'
|
if a:tags == [] | brea | en
|
||||||
|
if a:tags[nr] =~ '^!' && a:tags[nr] !~ '^!_TAG_'
|
||||||
let nr += 1
|
let nr += 1
|
||||||
con
|
con
|
||||||
en
|
en
|
||||||
if alltags[nr] =~ '^!_TAG_' && len(alltags) > nr
|
if a:tags[nr] =~ '^!_TAG_' && len(a:tags) > nr
|
||||||
cal remove(alltags, nr)
|
cal remove(a:tags, nr)
|
||||||
el
|
el
|
||||||
brea
|
brea
|
||||||
en
|
en
|
||||||
endw
|
endw
|
||||||
retu alltags
|
retu a:tags
|
||||||
|
endf
|
||||||
|
|
||||||
|
fu! s:syntax()
|
||||||
|
if !ctrlp#nosy()
|
||||||
|
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
|
||||||
|
sy match CtrlPTabExtra '\zs\t.*\ze$'
|
||||||
|
en
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
fu! ctrlp#tag#init()
|
fu! ctrlp#tag#init()
|
||||||
@@ -66,12 +71,7 @@ fu! ctrlp#tag#init()
|
|||||||
let alltags = s:filter(ctrlp#utils#readfile(each))
|
let alltags = s:filter(ctrlp#utils#readfile(each))
|
||||||
cal extend(g:ctrlp_alltags, alltags)
|
cal extend(g:ctrlp_alltags, alltags)
|
||||||
endfo
|
endfo
|
||||||
if has('syntax') && exists('g:syntax_on')
|
cal s:syntax()
|
||||||
if !hlexists('CtrlPTabExtra')
|
|
||||||
hi link CtrlPTabExtra Comment
|
|
||||||
en
|
|
||||||
sy match CtrlPTabExtra '\zs\t.*\ze$'
|
|
||||||
en
|
|
||||||
retu g:ctrlp_alltags
|
retu g:ctrlp_alltags
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ if ( exists('g:loaded_ctrlp_undo') && g:loaded_ctrlp_undo )
|
|||||||
en
|
en
|
||||||
let g:loaded_ctrlp_undo = 1
|
let g:loaded_ctrlp_undo = 1
|
||||||
|
|
||||||
let s:undo_var = {
|
cal add(g:ctrlp_ext_vars, {
|
||||||
\ 'init': 'ctrlp#undo#init()',
|
\ 'init': 'ctrlp#undo#init()',
|
||||||
\ 'accept': 'ctrlp#undo#accept',
|
\ 'accept': 'ctrlp#undo#accept',
|
||||||
\ 'lname': 'undo',
|
\ 'lname': 'undo',
|
||||||
@@ -19,10 +19,8 @@ let s:undo_var = {
|
|||||||
\ 'exit': 'ctrlp#undo#exit()',
|
\ 'exit': 'ctrlp#undo#exit()',
|
||||||
\ 'type': 'line',
|
\ 'type': 'line',
|
||||||
\ 'sort': 0,
|
\ 'sort': 0,
|
||||||
\ }
|
\ 'nolim': 1,
|
||||||
|
\ })
|
||||||
let g:ctrlp_ext_vars = exists('g:ctrlp_ext_vars') && !empty(g:ctrlp_ext_vars)
|
|
||||||
\ ? add(g:ctrlp_ext_vars, s:undo_var) : [s:undo_var]
|
|
||||||
|
|
||||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
|
||||||
|
|
||||||
@@ -82,11 +80,10 @@ fu! s:elapsed(nr)
|
|||||||
endf
|
endf
|
||||||
|
|
||||||
fu! s:syntax()
|
fu! s:syntax()
|
||||||
|
if ctrlp#nosy() | retu | en
|
||||||
for [ke, va] in items({'T': 'Directory', 'Br': 'Comment', 'Nr': 'String',
|
for [ke, va] in items({'T': 'Directory', 'Br': 'Comment', 'Nr': 'String',
|
||||||
\ 'Sv': 'Comment', 'Po': 'Title'})
|
\ 'Sv': 'Comment', 'Po': 'Title'})
|
||||||
if !hlexists('CtrlPUndo'.ke)
|
cal ctrlp#hicheck('CtrlPUndo'.ke, va)
|
||||||
exe 'hi link CtrlPUndo'.ke va
|
|
||||||
en
|
|
||||||
endfo
|
endfo
|
||||||
sy match CtrlPUndoT '\v\d+ \zs[^ ]+\ze|\d+:\d+:\d+'
|
sy match CtrlPUndoT '\v\d+ \zs[^ ]+\ze|\d+:\d+:\d+'
|
||||||
sy match CtrlPUndoBr '\[\|\]'
|
sy match CtrlPUndoBr '\[\|\]'
|
||||||
@@ -115,16 +112,13 @@ endf
|
|||||||
fu! s:formatul(...)
|
fu! s:formatul(...)
|
||||||
let parts = matchlist(a:1,
|
let parts = matchlist(a:1,
|
||||||
\ '\v^\s+(\d+)\s+\d+\s+([^ ]+\s?[^ ]+|\d+\s\w+\s\w+)(\s*\d*)$')
|
\ '\v^\s+(\d+)\s+\d+\s+([^ ]+\s?[^ ]+|\d+\s\w+\s\w+)(\s*\d*)$')
|
||||||
retu parts[2].' ['.parts[1].']'.( parts[3] != '' ? ' saved' : '' )
|
retu parts == [] ? '----'
|
||||||
|
\ : parts[2].' ['.parts[1].']'.( parts[3] != '' ? ' saved' : '' )
|
||||||
endf
|
endf
|
||||||
" Public {{{1
|
" Public {{{1
|
||||||
fu! ctrlp#undo#init()
|
fu! ctrlp#undo#init()
|
||||||
let entries = s:undos[0] ? s:undos[1]['entries'] : s:undos[1]
|
let entries = s:undos[0] ? s:undos[1]['entries'] : s:undos[1]
|
||||||
if empty(entries) | retu [] | en
|
if empty(entries) | retu [] | en
|
||||||
if has('syntax') && exists('g:syntax_on')
|
|
||||||
cal s:syntax()
|
|
||||||
en
|
|
||||||
let g:ctrlp_nolimit = 1
|
|
||||||
if !exists('s:lines')
|
if !exists('s:lines')
|
||||||
if s:undos[0]
|
if s:undos[0]
|
||||||
let entries = s:dict2list(s:flatten(entries, s:undos[1]['seq_cur']))
|
let entries = s:dict2list(s:flatten(entries, s:undos[1]['seq_cur']))
|
||||||
@@ -133,6 +127,7 @@ fu! ctrlp#undo#init()
|
|||||||
let s:lines = map(reverse(entries), 's:formatul(v:val)')
|
let s:lines = map(reverse(entries), 's:formatul(v:val)')
|
||||||
en
|
en
|
||||||
en
|
en
|
||||||
|
cal s:syntax()
|
||||||
retu s:lines
|
retu s:lines
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ endf
|
|||||||
let s:lash = ctrlp#utils#lash()
|
let s:lash = ctrlp#utils#lash()
|
||||||
|
|
||||||
fu! s:lash(...)
|
fu! s:lash(...)
|
||||||
retu match(a:0 ? a:1 : getcwd(), '[\/]$') < 0 ? s:lash : ''
|
retu ( a:0 ? a:1 : getcwd() ) !~ '[\/]$' ? s:lash : ''
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#utils#opts()
|
fu! ctrlp#utils#opts()
|
||||||
@@ -33,9 +33,9 @@ fu! ctrlp#utils#cachedir()
|
|||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#utils#cachefile(...)
|
fu! ctrlp#utils#cachefile(...)
|
||||||
let tail = a:0 ? '.'.a:1 : ''
|
let [tail, dir] = [a:0 == 1 ? '.'.a:1 : '', a:0 == 2 ? a:1 : getcwd()]
|
||||||
let cache_file = substitute(getcwd(), '\([\/]\|^\a\zs:\)', '%', 'g').tail.'.txt'
|
let cache_file = substitute(dir, '\([\/]\|^\a\zs:\)', '%', 'g').tail.'.txt'
|
||||||
retu a:0 ? cache_file : s:cache_dir.s:lash(s:cache_dir).cache_file
|
retu a:0 == 1 ? cache_file : s:cache_dir.s:lash(s:cache_dir).cache_file
|
||||||
endf
|
endf
|
||||||
|
|
||||||
fu! ctrlp#utils#readfile(file)
|
fu! ctrlp#utils#readfile(file)
|
||||||
@@ -60,9 +60,6 @@ endf
|
|||||||
fu! ctrlp#utils#writecache(lines, ...)
|
fu! ctrlp#utils#writecache(lines, ...)
|
||||||
if isdirectory(ctrlp#utils#mkdir(a:0 ? a:1 : s:cache_dir))
|
if isdirectory(ctrlp#utils#mkdir(a:0 ? a:1 : s:cache_dir))
|
||||||
sil! cal writefile(a:lines, a:0 >= 2 ? a:2 : ctrlp#utils#cachefile())
|
sil! cal writefile(a:lines, a:0 >= 2 ? a:2 : ctrlp#utils#cachefile())
|
||||||
if !a:0
|
|
||||||
let g:ctrlp_newcache = 0
|
|
||||||
en
|
|
||||||
en
|
en
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
*ctrlp.txt* Fuzzy file, buffer, mru and tag finder. v1.7.4
|
*ctrlp.txt* Fuzzy file, buffer, mru, tag, ... finder. v1.7.7
|
||||||
*CtrlP* *ControlP* *'ctrlp'* *'ctrl-p'*
|
*CtrlP* *ControlP* *'ctrlp'* *'ctrl-p'*
|
||||||
===============================================================================
|
===============================================================================
|
||||||
# #
|
# #
|
||||||
@@ -23,17 +23,63 @@ CONTENTS *ctrlp-contents*
|
|||||||
===============================================================================
|
===============================================================================
|
||||||
INTRO *ctrlp-intro*
|
INTRO *ctrlp-intro*
|
||||||
|
|
||||||
Full path fuzzy file, buffer, mru and tag finder with an intuitive interface.
|
Full path fuzzy file, buffer, mru, tag, ... finder with an intuitive interface.
|
||||||
Written in pure Vimscript for MacVim and Vim version 7.0+. Has full support for
|
Written in pure Vimscript for MacVim, gVim and Vim version 7.0+. Has full
|
||||||
Vim’s |regexp| as search pattern, built-in MRU files monitoring, project’s root
|
support for Vim's |regexp| as search pattern, built-in MRU files monitoring,
|
||||||
finder, and more.
|
project's root finder, and more.
|
||||||
|
|
||||||
To enable optional extensions (tag, dir, rtscript...), see |ctrlp-extensions|.
|
To enable optional extensions (tag, dir, rtscript...), see |ctrlp-extensions|.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
OPTIONS *ctrlp-options*
|
OPTIONS *ctrlp-options*
|
||||||
|
|
||||||
Below are the available options and their default values:~
|
Overview:~
|
||||||
|
|
||||||
|
|loaded_ctrlp| Disable the plugin.
|
||||||
|
|ctrlp_map| Default mapping.
|
||||||
|
|ctrlp_cmd| Default command used for the default mapping.
|
||||||
|
|ctrlp_by_filename| Default to filename mode or not.
|
||||||
|
|ctrlp_regexp| Default to regexp mode or not.
|
||||||
|
|ctrlp_match_window_bottom| Where to show the match window.
|
||||||
|
|ctrlp_match_window_reversed| Sort order in the match window.
|
||||||
|
|ctrlp_max_height| Max height of the match window.
|
||||||
|
|ctrlp_switch_buffer| Jump to an open buffer if already opened.
|
||||||
|
|ctrlp_reuse_window| Reuse special windows (help, quickfix, etc).
|
||||||
|
|ctrlp_working_path_mode| How to set CtrlP's local working directory.
|
||||||
|
|ctrlp_root_markers| Additional, high priority root markers.
|
||||||
|
|ctrlp_use_caching| Use per-session caching or not.
|
||||||
|
|ctrlp_clear_cache_on_exit| Keep cache after exiting Vim or not.
|
||||||
|
|ctrlp_cache_dir| Location of the cache directory.
|
||||||
|
|ctrlp_dotfiles| Ignore dotfiles and dotdirs or not.
|
||||||
|
|ctrlp_custom_ignore| Hide stuff when using |globpath()|.
|
||||||
|
|ctrlp_max_files| Number of files to scan initially.
|
||||||
|
|ctrlp_max_depth| Directory depth to recurse into when scanning.
|
||||||
|
|ctrlp_user_command| Use an external scanner.
|
||||||
|
|ctrlp_max_history| Number of entries saved in the prompt history.
|
||||||
|
|ctrlp_open_new_file| How to open a file created by <c-y>.
|
||||||
|
|ctrlp_open_multiple_files| How to open files selected by <c-z>.
|
||||||
|
|ctrlp_arg_map| Intercept <c-y> and <c-o> or not.
|
||||||
|
|ctrlp_follow_symlinks| Follow symbolic links or not.
|
||||||
|
|ctrlp_lazy_update| Only update when typing has stopped.
|
||||||
|
|ctrlp_default_input| Seed the prompt with an initial string.
|
||||||
|
|ctrlp_use_migemo| Use Migemo patterns for Japanese filenames.
|
||||||
|
|ctrlp_prompt_mappings| Change the mappings in the prompt.
|
||||||
|
|
||||||
|
MRU mode:
|
||||||
|
|ctrlp_mruf_max| Max MRU entries to remember.
|
||||||
|
|ctrlp_mruf_exclude| Files that shouldn't be remembered.
|
||||||
|
|ctrlp_mruf_include| Files to be remembered.
|
||||||
|
|ctrlp_mruf_relative| Show only MRU files in the working directory.
|
||||||
|
|ctrlp_mruf_default_order| Disable sorting.
|
||||||
|
|ctrlp_mruf_case_sensitive| MRU files are case sensitive or not.
|
||||||
|
|
||||||
|
Advanced options:
|
||||||
|
|ctrlp_status_func| Change CtrlP's two statuslines.
|
||||||
|
|ctrlp_buffer_func| Call custom functions in the CtrlP buffer.
|
||||||
|
|ctrlp_match_func| Replace the built-in matching algorithm.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Detailed descriptions and default values:~
|
||||||
|
|
||||||
*'g:ctrlp_map'*
|
*'g:ctrlp_map'*
|
||||||
Use this option to change the mapping to invoke CtrlP in |Normal| mode: >
|
Use this option to change the mapping to invoke CtrlP in |Normal| mode: >
|
||||||
@@ -58,7 +104,7 @@ default: >
|
|||||||
Can be toggled on/off by pressing <c-d> inside the prompt.
|
Can be toggled on/off by pressing <c-d> inside the prompt.
|
||||||
|
|
||||||
*'g:ctrlp_regexp'*
|
*'g:ctrlp_regexp'*
|
||||||
Set this to 1 to set |regexp| search as the default: >
|
Set this to 1 to set regexp search as the default: >
|
||||||
let g:ctrlp_regexp = 0
|
let g:ctrlp_regexp = 0
|
||||||
<
|
<
|
||||||
Can be toggled on/off by pressing <c-r> inside the prompt.
|
Can be toggled on/off by pressing <c-r> inside the prompt.
|
||||||
@@ -80,12 +126,12 @@ Set the maximum height of the match window: >
|
|||||||
<
|
<
|
||||||
|
|
||||||
*'g:ctrlp_switch_buffer'*
|
*'g:ctrlp_switch_buffer'*
|
||||||
When opening a file with <cr> or <c-t>, if the file’s already opened somewhere
|
When opening a file with <cr> or <c-t>, if the file's already opened somewhere
|
||||||
CtrlP will try to jump to it instead of opening a new instance: >
|
CtrlP will try to jump to it instead of opening a new instance: >
|
||||||
let g:ctrlp_switch_buffer = 2
|
let g:ctrlp_switch_buffer = 2
|
||||||
<
|
<
|
||||||
1 - only jump to the buffer if it’s opened in the current tab.
|
1 - only jump to the buffer if it's opened in the current tab.
|
||||||
2 - jump tab as well if the buffer’s opened in another tab.
|
2 - jump tab as well if the buffer's opened in another tab.
|
||||||
0 - disable this feature.
|
0 - disable this feature.
|
||||||
|
|
||||||
*'g:ctrlp_reuse_window'*
|
*'g:ctrlp_reuse_window'*
|
||||||
@@ -94,7 +140,7 @@ plugins, help and quickfix. Use this to setup some exceptions: >
|
|||||||
let g:ctrlp_reuse_window = 'netrw'
|
let g:ctrlp_reuse_window = 'netrw'
|
||||||
<
|
<
|
||||||
Acceptable values are partial name, filetype or buftype of the special buffers.
|
Acceptable values are partial name, filetype or buftype of the special buffers.
|
||||||
Use |regexp| to specify the pattern.
|
Use regexp to specify the pattern.
|
||||||
Example: >
|
Example: >
|
||||||
let g:ctrlp_reuse_window = 'netrw\|help\|quickfix'
|
let g:ctrlp_reuse_window = 'netrw\|help\|quickfix'
|
||||||
<
|
<
|
||||||
@@ -104,16 +150,16 @@ When starting up, CtrlP sets its local working directory according to this
|
|||||||
variable: >
|
variable: >
|
||||||
let g:ctrlp_working_path_mode = 2
|
let g:ctrlp_working_path_mode = 2
|
||||||
<
|
<
|
||||||
1 - the parent directory of the current file.
|
1 - the directory of the current file.
|
||||||
2 - the nearest ancestor that contains one of these directories or files:
|
2 - the nearest ancestor that contains one of these directories or files:
|
||||||
.git/ .hg/ .svn/ .bzr/ _darcs/
|
.git .hg .svn .bzr _darcs
|
||||||
0 - don’t manage working directory.
|
0 - don't manage working directory.
|
||||||
Note: you can use b:ctrlp_working_path_mode (a |b:var|) to set this option on a
|
Note: you can use b:ctrlp_working_path_mode (a |b:var|) to set this option on a
|
||||||
per buffer basis.
|
per buffer basis.
|
||||||
|
|
||||||
*'g:ctrlp_root_markers'*
|
*'g:ctrlp_root_markers'*
|
||||||
Use this to set your own root markers in addition to the default ones (.git/,
|
Use this to set your own root markers in addition to the default ones (.git,
|
||||||
.hg/, .svn/, .bzr/, and _darcs/). Your markers will take precedence: >
|
.hg, .svn, .bzr, and _darcs). Your markers will take precedence: >
|
||||||
let g:ctrlp_root_markers = ['']
|
let g:ctrlp_root_markers = ['']
|
||||||
<
|
<
|
||||||
|
|
||||||
@@ -135,91 +181,8 @@ Set the directory to store the cache files: >
|
|||||||
let g:ctrlp_cache_dir = $HOME.'/.cache/ctrlp'
|
let g:ctrlp_cache_dir = $HOME.'/.cache/ctrlp'
|
||||||
<
|
<
|
||||||
|
|
||||||
*'g:ctrlp_prompt_mappings'*
|
|
||||||
Use this to customize the mappings inside CtrlP’s prompt to your liking. You
|
|
||||||
only need to keep the lines that you’ve changed the values (inside []): >
|
|
||||||
let g:ctrlp_prompt_mappings = {
|
|
||||||
\ 'PrtBS()': ['<bs>', '<c-]>'],
|
|
||||||
\ 'PrtDelete()': ['<del>'],
|
|
||||||
\ 'PrtDeleteWord()': ['<c-w>'],
|
|
||||||
\ 'PrtClear()': ['<c-u>'],
|
|
||||||
\ 'PrtSelectMove("j")': ['<c-j>', '<down>'],
|
|
||||||
\ 'PrtSelectMove("k")': ['<c-k>', '<up>'],
|
|
||||||
\ 'PrtHistory(-1)': ['<c-n>'],
|
|
||||||
\ 'PrtHistory(1)': ['<c-p>'],
|
|
||||||
\ 'AcceptSelection("e")': ['<cr>', '<2-LeftMouse>'],
|
|
||||||
\ 'AcceptSelection("h")': ['<c-x>', '<c-cr>', '<c-s>'],
|
|
||||||
\ 'AcceptSelection("t")': ['<c-t>', '<MiddleMouse>'],
|
|
||||||
\ 'AcceptSelection("v")': ['<c-v>', '<RightMouse>'],
|
|
||||||
\ 'ToggleFocus()': ['<s-tab>'],
|
|
||||||
\ 'ToggleRegex()': ['<c-r>'],
|
|
||||||
\ 'ToggleByFname()': ['<c-d>'],
|
|
||||||
\ 'ToggleType(1)': ['<c-f>', '<c-up>'],
|
|
||||||
\ 'ToggleType(-1)': ['<c-b>', '<c-down>'],
|
|
||||||
\ 'PrtExpandDir()': ['<tab>'],
|
|
||||||
\ 'PrtInsert("w")': ['<F2>', '<insert>'],
|
|
||||||
\ 'PrtInsert("s")': ['<F3>'],
|
|
||||||
\ 'PrtInsert("v")': ['<F4>'],
|
|
||||||
\ 'PrtInsert("+")': ['<F6>'],
|
|
||||||
\ 'PrtCurStart()': ['<c-a>'],
|
|
||||||
\ 'PrtCurEnd()': ['<c-e>'],
|
|
||||||
\ 'PrtCurLeft()': ['<c-h>', '<left>', '<c-^>'],
|
|
||||||
\ 'PrtCurRight()': ['<c-l>', '<right>'],
|
|
||||||
\ 'PrtClearCache()': ['<F5>'],
|
|
||||||
\ 'PrtDeleteMRU()': ['<F7>'],
|
|
||||||
\ 'CreateNewFile()': ['<c-y>'],
|
|
||||||
\ 'MarkToOpen()': ['<c-z>'],
|
|
||||||
\ 'OpenMulti()': ['<c-o>'],
|
|
||||||
\ 'PrtExit()': ['<esc>', '<c-c>', '<c-g>'],
|
|
||||||
\ }
|
|
||||||
<
|
|
||||||
Note: In some terminals, it’s not possible to remap <c-h> without also changing
|
|
||||||
<bs> (|keycodes|). So if pressing <bs> moves the cursor to the left instead of
|
|
||||||
deleting a char for you, add this to your |.vimrc| to disable the plugin’s
|
|
||||||
default <c-h> mapping: >
|
|
||||||
let g:ctrlp_prompt_mappings = { 'PrtCurLeft()': ['<left>', '<c-^>'] }
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_max'*
|
|
||||||
Specify the number of recently opened files you want CtrlP to remember: >
|
|
||||||
let g:ctrlp_mruf_max = 250
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_exclude'*
|
|
||||||
Files you don’t want CtrlP to remember. Use |regexp| to specify the patterns: >
|
|
||||||
let g:ctrlp_mruf_exclude = ''
|
|
||||||
<
|
|
||||||
Examples: >
|
|
||||||
let g:ctrlp_mruf_exclude = '/tmp/.*\|/temp/.*' " MacOSX/Linux
|
|
||||||
let g:ctrlp_mruf_exclude = '^C:\\dev\\tmp\\.*' " Windows
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_include'*
|
|
||||||
And if you want CtrlP to only remember some files, specify them here: >
|
|
||||||
let g:ctrlp_mruf_include = ''
|
|
||||||
<
|
|
||||||
Example: >
|
|
||||||
let g:ctrlp_mruf_include = '\.py$\|\.rb$'
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_relative'*
|
|
||||||
Set this to 1 to show only MRU files in the current working directory: >
|
|
||||||
let g:ctrlp_mruf_relative = 0
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_case_sensitive'*
|
|
||||||
Match this with your file system case-sensitivity setting to avoid duplicate
|
|
||||||
MRU entries: >
|
|
||||||
let g:ctrlp_mruf_case_sensitive = 1
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_last_entered'*
|
|
||||||
Set to 1 to sort the MRU file list to most-recently-entered-buffer order: >
|
|
||||||
let g:ctrlp_mruf_last_entered = 0
|
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_dotfiles'*
|
*'g:ctrlp_dotfiles'*
|
||||||
Set this to 0 if you don’t want CtrlP to scan for dotfiles and dotdirs: >
|
Set this to 0 if you don't want CtrlP to scan for dotfiles and dotdirs: >
|
||||||
let g:ctrlp_dotfiles = 1
|
let g:ctrlp_dotfiles = 1
|
||||||
<
|
<
|
||||||
You can use |'wildignore'| to exclude anything from the search.
|
You can use |'wildignore'| to exclude anything from the search.
|
||||||
@@ -237,7 +200,7 @@ tools on Windows). So be a little mindful of what you put in your |wildignore|.
|
|||||||
|
|
||||||
*'g:ctrlp_custom_ignore'*
|
*'g:ctrlp_custom_ignore'*
|
||||||
In addition to |'wildignore'|, use this for files and directories you want only
|
In addition to |'wildignore'|, use this for files and directories you want only
|
||||||
CtrlP to not show. Use |regexp| to specify the patterns: >
|
CtrlP to not show. Use regexp to specify the patterns: >
|
||||||
let g:ctrlp_custom_ignore = ''
|
let g:ctrlp_custom_ignore = ''
|
||||||
<
|
<
|
||||||
Examples: >
|
Examples: >
|
||||||
@@ -262,7 +225,7 @@ The maximum depth of a directory tree to recurse into: >
|
|||||||
Note: the larger these values, the more memory Vim uses.
|
Note: the larger these values, the more memory Vim uses.
|
||||||
|
|
||||||
*'g:ctrlp_user_command'*
|
*'g:ctrlp_user_command'*
|
||||||
Specify an external tool to use for listing files instead of using Vim’s
|
Specify an external tool to use for listing files instead of using Vim's
|
||||||
|globpath()|. Use %s in place of the target directory: >
|
|globpath()|. Use %s in place of the target directory: >
|
||||||
let g:ctrlp_user_command = ''
|
let g:ctrlp_user_command = ''
|
||||||
<
|
<
|
||||||
@@ -302,10 +265,10 @@ when searching outside a repo.
|
|||||||
|
|
||||||
*'g:ctrlp_max_history'*
|
*'g:ctrlp_max_history'*
|
||||||
The maximum number of input strings you want CtrlP to remember. The default
|
The maximum number of input strings you want CtrlP to remember. The default
|
||||||
value mirrors Vim’s global |'history'| option: >
|
value mirrors Vim's global |'history'| option: >
|
||||||
let g:ctrlp_max_history = &history
|
let g:ctrlp_max_history = &history
|
||||||
<
|
<
|
||||||
Set to 0 to disable prompt’s history. Browse the history with <c-n> and <c-p>.
|
Set to 0 to disable prompt's history. Browse the history with <c-n> and <c-p>.
|
||||||
|
|
||||||
*'g:ctrlp_open_new_file'*
|
*'g:ctrlp_open_new_file'*
|
||||||
Use this option to specify how the newly created file is to be opened when
|
Use this option to specify how the newly created file is to be opened when
|
||||||
@@ -323,16 +286,18 @@ If non-zero, this will enable opening multiple files with <c-z> and <c-o>: >
|
|||||||
let g:ctrlp_open_multiple_files = 'v'
|
let g:ctrlp_open_multiple_files = 'v'
|
||||||
<
|
<
|
||||||
Example: >
|
Example: >
|
||||||
let g:ctrlp_open_multiple_files = '2vr'
|
let g:ctrlp_open_multiple_files = '2vjr'
|
||||||
<
|
<
|
||||||
For the number:
|
For the number:
|
||||||
- If given, it’ll be used as the maximum number of windows or tabs to create
|
- If given, it'll be used as the maximum number of windows or tabs to create
|
||||||
when opening the files (the rest will be opened as hidden buffers).
|
when opening the files (the rest will be opened as hidden buffers).
|
||||||
- If not given, <c-o> will open all files, each in a new window or new tab.
|
- If not given, <c-o> will open all files, each in a new window or new tab.
|
||||||
For the letters:
|
For the letters:
|
||||||
t - each file in a new tab.
|
t - each file in a new tab.
|
||||||
h - each file in a new horizontal split.
|
h - each file in a new horizontal split.
|
||||||
v - each file in a new vertical split.
|
v - each file in a new vertical split.
|
||||||
|
i - all files as hidden buffers.
|
||||||
|
j - after opening, jump to the first opened tab or window.
|
||||||
Reuse the current window:
|
Reuse the current window:
|
||||||
tr,
|
tr,
|
||||||
hr,
|
hr,
|
||||||
@@ -348,37 +313,132 @@ Pressing <c-o> or <c-y> will then prompt for a keypress. The key can be:
|
|||||||
t - open in tab(s)
|
t - open in tab(s)
|
||||||
h - open in horizontal split(s)
|
h - open in horizontal split(s)
|
||||||
v - open in vertical split(s)
|
v - open in vertical split(s)
|
||||||
r - open in current window (for <c-y> only)
|
i - open as hidden buffers (for <c-o> only)
|
||||||
<esc>, <c-c> - cancel and go back to the prompt.
|
c - clear the marked files (for <c-o> only)
|
||||||
Any other key - use the behavior specified with |g:ctrlp_open_new_file| and
|
r - open in the current window (for <c-y> only)
|
||||||
|
<esc>, <c-c>, <c-u> - cancel and go back to the prompt.
|
||||||
|
<cr> - use the default behavior specified with |g:ctrlp_open_new_file| and
|
||||||
|g:ctrlp_open_multiple_files|.
|
|g:ctrlp_open_multiple_files|.
|
||||||
|
|
||||||
*'g:ctrlp_follow_symlinks'*
|
*'g:ctrlp_follow_symlinks'*
|
||||||
Set this to 1 to follow symbolic links when listing files: >
|
If non-zero, CtrlP will follow symbolic links when listing files: >
|
||||||
let g:ctrlp_follow_symlinks = 0
|
let g:ctrlp_follow_symlinks = 0
|
||||||
<
|
<
|
||||||
When enabled, looped internal symlinks will be ignored to avoid duplicates.
|
0 - don't follow symbolic links.
|
||||||
|
1 - follow but ignore looped internal symlinks to avoid duplicates.
|
||||||
|
2 - follow all symlinks indiscriminately.
|
||||||
|
|
||||||
*'g:ctrlp_lazy_update'*
|
*'g:ctrlp_lazy_update'*
|
||||||
Set this to 1 to enable the lazy-update feature: only update the match window
|
Set this to 1 to enable the lazy-update feature: only update the match window
|
||||||
after typing’s been stopped for a certain amount of time: >
|
after typing's been stopped for a certain amount of time: >
|
||||||
let g:ctrlp_lazy_update = 0
|
let g:ctrlp_lazy_update = 0
|
||||||
<
|
<
|
||||||
If is 1, update after 250ms. If bigger than 1, the number will be used as the
|
If is 1, update after 250ms. If bigger than 1, the number will be used as the
|
||||||
delay time in milliseconds.
|
delay time in milliseconds.
|
||||||
|
|
||||||
*'g:ctrlp_default_input'*
|
*'g:ctrlp_default_input'*
|
||||||
Set this to 1 to enable seeding the prompt with the current file’s relative
|
Set this to 1 to enable seeding the prompt with the current file's relative
|
||||||
path: >
|
path: >
|
||||||
let g:ctrlp_default_input = 0
|
let g:ctrlp_default_input = 0
|
||||||
<
|
<
|
||||||
|
|
||||||
*'g:ctrlp_use_migemo'*
|
*'g:ctrlp_use_migemo'*
|
||||||
Set this to 1 to use Migemo Pattern for Japanese filenames. Migemo Search only
|
Set this to 1 to use Migemo Pattern for Japanese filenames. Migemo Search only
|
||||||
works in |regexp| mode. To split the pattern, separate words with space: >
|
works in regexp mode. To split the pattern, separate words with space: >
|
||||||
let g:ctrlp_use_migemo = 0
|
let g:ctrlp_use_migemo = 0
|
||||||
<
|
<
|
||||||
|
|
||||||
|
*'g:ctrlp_prompt_mappings'*
|
||||||
|
Use this to customize the mappings inside CtrlP's prompt to your liking. You
|
||||||
|
only need to keep the lines that you've changed the values (inside []): >
|
||||||
|
let g:ctrlp_prompt_mappings = {
|
||||||
|
\ 'PrtBS()': ['<bs>', '<c-]>'],
|
||||||
|
\ 'PrtDelete()': ['<del>'],
|
||||||
|
\ 'PrtDeleteWord()': ['<c-w>'],
|
||||||
|
\ 'PrtClear()': ['<c-u>'],
|
||||||
|
\ 'PrtSelectMove("j")': ['<c-j>', '<down>'],
|
||||||
|
\ 'PrtSelectMove("k")': ['<c-k>', '<up>'],
|
||||||
|
\ 'PrtSelectMove("t")': ['<Home>', '<kHome>'],
|
||||||
|
\ 'PrtSelectMove("b")': ['<End>', '<kEnd>'],
|
||||||
|
\ 'PrtSelectMove("u")': ['<PageUp>', '<kPageUp>'],
|
||||||
|
\ 'PrtSelectMove("d")': ['<PageDown>', '<kPageDown>'],
|
||||||
|
\ 'PrtHistory(-1)': ['<c-n>'],
|
||||||
|
\ 'PrtHistory(1)': ['<c-p>'],
|
||||||
|
\ 'AcceptSelection("e")': ['<cr>', '<2-LeftMouse>'],
|
||||||
|
\ 'AcceptSelection("h")': ['<c-x>', '<c-cr>', '<c-s>'],
|
||||||
|
\ 'AcceptSelection("t")': ['<c-t>'],
|
||||||
|
\ 'AcceptSelection("v")': ['<c-v>', '<RightMouse>'],
|
||||||
|
\ 'ToggleFocus()': ['<s-tab>'],
|
||||||
|
\ 'ToggleRegex()': ['<c-r>'],
|
||||||
|
\ 'ToggleByFname()': ['<c-d>'],
|
||||||
|
\ 'ToggleType(1)': ['<c-f>', '<c-up>'],
|
||||||
|
\ 'ToggleType(-1)': ['<c-b>', '<c-down>'],
|
||||||
|
\ 'PrtExpandDir()': ['<tab>'],
|
||||||
|
\ 'PrtInsert("c")': ['<MiddleMouse>', '<insert>'],
|
||||||
|
\ 'PrtInsert()': ['<c-\>'],
|
||||||
|
\ 'PrtCurStart()': ['<c-a>'],
|
||||||
|
\ 'PrtCurEnd()': ['<c-e>'],
|
||||||
|
\ 'PrtCurLeft()': ['<c-h>', '<left>', '<c-^>'],
|
||||||
|
\ 'PrtCurRight()': ['<c-l>', '<right>'],
|
||||||
|
\ 'PrtClearCache()': ['<F5>'],
|
||||||
|
\ 'PrtDeleteEnt()': ['<F7>'],
|
||||||
|
\ 'CreateNewFile()': ['<c-y>'],
|
||||||
|
\ 'MarkToOpen()': ['<c-z>'],
|
||||||
|
\ 'OpenMulti()': ['<c-o>'],
|
||||||
|
\ 'PrtExit()': ['<esc>', '<c-c>', '<c-g>'],
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
Note: In some terminals, it's not possible to remap <c-h> without also changing
|
||||||
|
<bs> (|keycodes|). So if pressing <bs> moves the cursor to the left instead of
|
||||||
|
deleting a char for you, add this to your |.vimrc| to disable the plugin's
|
||||||
|
default <c-h> mapping: >
|
||||||
|
let g:ctrlp_prompt_mappings = { 'PrtCurLeft()': ['<left>', '<c-^>'] }
|
||||||
|
<
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
MRU mode options:~
|
||||||
|
|
||||||
|
*'g:ctrlp_mruf_max'*
|
||||||
|
Specify the number of recently opened files you want CtrlP to remember: >
|
||||||
|
let g:ctrlp_mruf_max = 250
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:ctrlp_mruf_exclude'*
|
||||||
|
Files you don't want CtrlP to remember. Use regexp to specify the patterns: >
|
||||||
|
let g:ctrlp_mruf_exclude = ''
|
||||||
|
<
|
||||||
|
Examples: >
|
||||||
|
let g:ctrlp_mruf_exclude = '/tmp/.*\|/temp/.*' " MacOSX/Linux
|
||||||
|
let g:ctrlp_mruf_exclude = '^C:\\dev\\tmp\\.*' " Windows
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:ctrlp_mruf_include'*
|
||||||
|
And if you want CtrlP to only remember some files, specify them here: >
|
||||||
|
let g:ctrlp_mruf_include = ''
|
||||||
|
<
|
||||||
|
Example: >
|
||||||
|
let g:ctrlp_mruf_include = '\.py$\|\.rb$'
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:ctrlp_mruf_relative'*
|
||||||
|
Set this to 1 to show only MRU files in the current working directory: >
|
||||||
|
let g:ctrlp_mruf_relative = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:ctrlp_mruf_default_order'*
|
||||||
|
Set this to 1 to disable sorting when searching in MRU mode: >
|
||||||
|
let g:ctrlp_mruf_default_order = 0
|
||||||
|
<
|
||||||
|
|
||||||
|
*'g:ctrlp_mruf_case_sensitive'*
|
||||||
|
Match this with your file system case-sensitivity setting to avoid duplicate
|
||||||
|
MRU entries: >
|
||||||
|
let g:ctrlp_mruf_case_sensitive = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
|
Advanced options:~
|
||||||
|
|
||||||
*'g:ctrlp_status_func'*
|
*'g:ctrlp_status_func'*
|
||||||
Use this to customize the statuslines for the CtrlP window: >
|
Use this to customize the statuslines for the CtrlP window: >
|
||||||
let g:ctrlp_status_func = {}
|
let g:ctrlp_status_func = {}
|
||||||
@@ -407,7 +467,7 @@ Structure of the functions: >
|
|||||||
" +- a:next : The next search mode.
|
" +- a:next : The next search mode.
|
||||||
" |
|
" |
|
||||||
" +- a:marked : The number of marked files, or a comma separated list of
|
" +- a:marked : The number of marked files, or a comma separated list of
|
||||||
" the filenames.
|
" the marked filenames.
|
||||||
|
|
||||||
return full_statusline
|
return full_statusline
|
||||||
endfunction
|
endfunction
|
||||||
@@ -422,6 +482,18 @@ Structure of the functions: >
|
|||||||
<
|
<
|
||||||
See https://gist.github.com/1610859 for a working example.
|
See https://gist.github.com/1610859 for a working example.
|
||||||
|
|
||||||
|
*'g:ctrlp_buffer_func'*
|
||||||
|
Specify the functions that will be called after entering and before exiting the
|
||||||
|
CtrlP buffer: >
|
||||||
|
let g:ctrlp_buffer_func = {}
|
||||||
|
<
|
||||||
|
Example: >
|
||||||
|
let g:ctrlp_buffer_func = {
|
||||||
|
\ 'enter': 'Function_Name_1',
|
||||||
|
\ 'exit': 'Function_Name_2',
|
||||||
|
\ }
|
||||||
|
<
|
||||||
|
|
||||||
*'g:ctrlp_match_func'*
|
*'g:ctrlp_match_func'*
|
||||||
Set an external fuzzy matching function for CtrlP to use: >
|
Set an external fuzzy matching function for CtrlP to use: >
|
||||||
let g:ctrlp_match_func = {}
|
let g:ctrlp_match_func = {}
|
||||||
@@ -446,8 +518,8 @@ Structure of the function: >
|
|||||||
" | + "first-non-tab": match until the first tab char.
|
" | + "first-non-tab": match until the first tab char.
|
||||||
" | + "until-last-tab": match until the last tab char.
|
" | + "until-last-tab": match until the last tab char.
|
||||||
" |
|
" |
|
||||||
" +- a:ispath : Is 1 when searching in file, buffer, mru, dir, and rtscript
|
" +- a:ispath : Is 1 when searching in file, buffer, mru, mixed, dir, and
|
||||||
" | modes. Is 0 otherwise.
|
" | rtscript modes. Is 0 otherwise.
|
||||||
" |
|
" |
|
||||||
" +- a:crfile : The file in the current window. Should be excluded from the
|
" +- a:crfile : The file in the current window. Should be excluded from the
|
||||||
" | results when a:ispath == 1.
|
" | results when a:ispath == 1.
|
||||||
@@ -467,6 +539,7 @@ COMMANDS *ctrlp-commands*
|
|||||||
|
|
||||||
If no argument is given, the value of |g:ctrlp_working_path_mode| will be
|
If no argument is given, the value of |g:ctrlp_working_path_mode| will be
|
||||||
used to determine the starting directory.
|
used to determine the starting directory.
|
||||||
|
|
||||||
You can use <tab> to auto-complete the [starting-directory] when typing it.
|
You can use <tab> to auto-complete the [starting-directory] when typing it.
|
||||||
|
|
||||||
*:CtrlPBuffer*
|
*:CtrlPBuffer*
|
||||||
@@ -477,31 +550,27 @@ COMMANDS *ctrlp-commands*
|
|||||||
:CtrlPMRU
|
:CtrlPMRU
|
||||||
Open CtrlP in find Most-Recently-Used file mode.
|
Open CtrlP in find Most-Recently-Used file mode.
|
||||||
|
|
||||||
|
*:CtrlPLastMode*
|
||||||
|
:CtrlPLastMode
|
||||||
|
Open CtrlP in the last mode used.
|
||||||
|
|
||||||
|
*:CtrlPRoot*
|
||||||
|
:CtrlPRoot
|
||||||
|
This acts like |:CtrlP| with |g:ctrlp_working_path_mode| = 2 (ignores the
|
||||||
|
variable's current value).
|
||||||
|
|
||||||
*:CtrlPClearCache*
|
*:CtrlPClearCache*
|
||||||
:CtrlPClearCache
|
:CtrlPClearCache
|
||||||
Flush the cache for the current working directory. The same as pressing <F5>
|
Flush the cache for the current working directory. The same as pressing <F5>
|
||||||
inside CtrlP.
|
inside CtrlP.
|
||||||
You can enable/disable caching with the |g:ctrlp_use_caching| option.
|
To enable or disable caching, use the |g:ctrlp_use_caching| option.
|
||||||
|
|
||||||
*:CtrlPClearAllCaches*
|
*:CtrlPClearAllCaches*
|
||||||
:CtrlPClearAllCaches
|
:CtrlPClearAllCaches
|
||||||
Delete all the cache files saved in |g:ctrlp_cache_dir|.
|
Delete all the cache files saved in |g:ctrlp_cache_dir| location.
|
||||||
|
|
||||||
*:CtrlPReload*
|
|
||||||
:CtrlPReload
|
|
||||||
Load new values for the option variables.
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
The following commands ignore the current value of |g:ctrlp_working_path_mode|:
|
For commands provided by bundled extensions, see |ctrlp-extensions|.
|
||||||
|
|
||||||
:CtrlPCurWD *:CtrlPCurWD*
|
|
||||||
This acts like |:CtrlP| with |path_mode| = 0
|
|
||||||
|
|
||||||
:CtrlPCurFile *:CtrlPCurFile*
|
|
||||||
This acts like |:CtrlP| with |path_mode| = 1
|
|
||||||
|
|
||||||
:CtrlPRoot *:CtrlPRoot*
|
|
||||||
This acts like |:CtrlP| with |path_mode| = 2
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
MAPPINGS *ctrlp-mappings*
|
MAPPINGS *ctrlp-mappings*
|
||||||
@@ -510,17 +579,18 @@ MAPPINGS *ctrlp-mappings*
|
|||||||
<c-p>
|
<c-p>
|
||||||
Default |Normal| mode mapping to open the CtrlP prompt in find file mode.
|
Default |Normal| mode mapping to open the CtrlP prompt in find file mode.
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
Once inside the prompt:~
|
Once inside the prompt:~
|
||||||
|
|
||||||
<c-d>
|
<c-d>
|
||||||
Toggle between full-path search and filename only search.
|
Toggle between full-path search and filename only search.
|
||||||
Note: in filename mode, the prompt’s base is '>d>' instead of '>>>'
|
Note: in filename mode, the prompt's base is '>d>' instead of '>>>'
|
||||||
|
|
||||||
<c-r> *'ctrlp-fullregexp'*
|
<c-r> *'ctrlp-fullregexp'*
|
||||||
Toggle between the string mode and full |regexp| mode.
|
Toggle between the string mode and full regexp mode.
|
||||||
Note: in full |regexp| mode, the prompt’s base is 'r>>' instead of '>>>'
|
Note: in full regexp mode, the prompt's base is 'r>>' instead of '>>>'
|
||||||
|
|
||||||
See also |input-formats| (guide) and |g:ctrlp_regexp_search| (option).
|
See also: |input-formats| (guide) and |g:ctrlp_regexp_search| (option).
|
||||||
|
|
||||||
<c-f>, 'forward'
|
<c-f>, 'forward'
|
||||||
<c-up>
|
<c-up>
|
||||||
@@ -530,13 +600,19 @@ Once inside the prompt:~
|
|||||||
<c-down>
|
<c-down>
|
||||||
Scroll to the 'previous' search mode in the sequence.
|
Scroll to the 'previous' search mode in the sequence.
|
||||||
|
|
||||||
<tab>
|
<tab> *'ctrlp-autocompletion'*
|
||||||
Auto-complete directory names under the current working directory inside
|
Auto-complete directory names under the current working directory inside
|
||||||
the prompt.
|
the prompt.
|
||||||
|
|
||||||
<s-tab>
|
<s-tab>
|
||||||
Toggle the focus between the match window and the prompt.
|
Toggle the focus between the match window and the prompt.
|
||||||
|
|
||||||
|
<esc>,
|
||||||
|
<c-c>
|
||||||
|
Exit CtrlP.
|
||||||
|
|
||||||
|
Moving:~
|
||||||
|
|
||||||
<c-j>,
|
<c-j>,
|
||||||
<down>
|
<down>
|
||||||
Move selection down.
|
Move selection down.
|
||||||
@@ -560,6 +636,8 @@ Once inside the prompt:~
|
|||||||
<right>
|
<right>
|
||||||
Move the cursor one character to the 'right'.
|
Move the cursor one character to the 'right'.
|
||||||
|
|
||||||
|
Editing:~
|
||||||
|
|
||||||
<c-]>,
|
<c-]>,
|
||||||
<bs>
|
<bs>
|
||||||
Delete the preceding character.
|
Delete the preceding character.
|
||||||
@@ -573,55 +651,66 @@ Once inside the prompt:~
|
|||||||
<c-u>
|
<c-u>
|
||||||
Clear the input field.
|
Clear the input field.
|
||||||
|
|
||||||
|
Browsing input history:~
|
||||||
|
|
||||||
|
<c-n>
|
||||||
|
Next string in the prompt's history.
|
||||||
|
|
||||||
|
<c-p>
|
||||||
|
Previous string in the prompt's history.
|
||||||
|
|
||||||
|
Opening/Creating a file:~
|
||||||
|
|
||||||
<cr>
|
<cr>
|
||||||
Open selected file in the active window if possible.
|
Open the selected file in the 'current' window if possible.
|
||||||
|
|
||||||
<c-t>
|
<c-t>
|
||||||
Open selected file in a new 'tab' after the last tabpage.
|
Open the selected file in a new 'tab' after the last tabpage.
|
||||||
|
|
||||||
<c-v>
|
<c-v>
|
||||||
Open selected file in a 'vertical' split.
|
Open the selected file in a 'vertical' split.
|
||||||
|
|
||||||
<c-x>,
|
<c-x>,
|
||||||
<c-cr>,
|
<c-cr>,
|
||||||
<c-s>
|
<c-s>
|
||||||
Open selected file in a 'horizontal' split.
|
Open the selected file in a 'horizontal' split.
|
||||||
|
|
||||||
<c-y>
|
<c-y>
|
||||||
Create a new file and its parent directories.
|
Create a new file and its parent directories.
|
||||||
|
|
||||||
<c-n>
|
Opening multiple files:~
|
||||||
Next string in the prompt’s history.
|
|
||||||
|
|
||||||
<c-p>
|
|
||||||
Previous string in the prompt’s history.
|
|
||||||
|
|
||||||
<c-z>
|
<c-z>
|
||||||
- Mark/unmark a file to be opened with <c-o>.
|
- Mark/unmark a file to be opened with <c-o>.
|
||||||
- Or mark/unmark a file to create a new file in its directory using <c-y>.
|
- Mark/unmark a file to create a new file in its directory using <c-y>.
|
||||||
|
|
||||||
<c-o>
|
<c-o>
|
||||||
Open files marked by <c-z>.
|
Open files marked by <c-z>.
|
||||||
|
|
||||||
|
Function keys:~
|
||||||
|
|
||||||
<F5>
|
<F5>
|
||||||
- Refresh the match window and purge the cache for the current directory.
|
- Refresh the match window and purge the cache for the current directory.
|
||||||
- Or remove deleted files from the MRU list.
|
- Remove deleted files from the MRU list.
|
||||||
|
|
||||||
<F7>
|
<F7>
|
||||||
- Wipe the MRU list.
|
- Wipe the MRU list.
|
||||||
- Or delete MRU entries marked by <c-z>.
|
- Delete MRU entries marked by <c-z>.
|
||||||
|
|
||||||
<insert>
|
Pasting:~
|
||||||
Insert the word under the cursor (in the current buffer) into the prompt.
|
|
||||||
|
|
||||||
<esc>,
|
<Insert>, *'ctrlp-pasting'*
|
||||||
<c-c>,
|
<MiddleMouse>
|
||||||
<c-g>
|
Paste the clipboard content into the prompt.
|
||||||
Exit CtrlP.
|
|
||||||
Note: <c-c> can also be used to stop the scan if it’s taking too long.
|
<c-\>
|
||||||
|
Open a text dialog to paste <cword>, <cfile>, the content of the search
|
||||||
|
register, the last visual selection, the clipboard or any register into the
|
||||||
|
prompt.
|
||||||
|
|
||||||
Choose your own mappings with |g:ctrlp_prompt_mappings|.
|
Choose your own mappings with |g:ctrlp_prompt_mappings|.
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
When inside the match window (press <s-tab> to switch):~
|
When inside the match window (press <s-tab> to switch):~
|
||||||
|
|
||||||
a-z
|
a-z
|
||||||
@@ -639,61 +728,78 @@ a) Simple string.
|
|||||||
|
|
||||||
E.g. 'abc' is understood internally as 'a[^a]\{-}b[^b]\{-}c'
|
E.g. 'abc' is understood internally as 'a[^a]\{-}b[^b]\{-}c'
|
||||||
|
|
||||||
b) Vim |regexp|. If the input string contains '*' or '|', it’ll be treated as
|
b) When in regexp mode, the input string's treated as a Vim's regexp |pattern|
|
||||||
a Vim’s |regexp| |pattern| without any modification.
|
without any modification.
|
||||||
|
|
||||||
E.g. 'abc\d*efg' will be read as 'abc\d*efg'.
|
E.g. 'abc\d*efg' will be read as 'abc\d*efg'.
|
||||||
|
|
||||||
See also |ctrlp-fullregexp| (keymap) and |g:ctrlp_regexp_search| (option).
|
See |ctrlp-fullregexp| (keymap) and |g:ctrlp_regexp_search| (option) for
|
||||||
|
how to enable regexp mode.
|
||||||
|
|
||||||
c) End the string with a colon ':' followed by a Vim command to execute that
|
c) End the string with a colon ':' followed by a Vim command to execute that
|
||||||
command after opening the file. If you need to use ':' literally, escape it
|
command after opening the file. If you need to use ':' literally, escape it
|
||||||
with a backslash: '\:'. When opening multiple files, the command will be
|
with a backslash: '\:'. When opening multiple files, the command will be
|
||||||
executed on each opening file.
|
executed on each opening file.
|
||||||
|
|
||||||
E.g. 'abc:45' will open the selected file and jump to line 45.
|
E.g. Use ':45' to jump to line 45.
|
||||||
|
|
||||||
'abc:/any\:string' will open the selected file and jump to the first
|
Use ':/any\:string' to jump to the first instance of 'any:string'.
|
||||||
instance of 'any:string'.
|
|
||||||
|
|
||||||
'abc:+setf\ myfiletype|50' will open the selected file and set its
|
Use ':+setf\ myfiletype|50' to set the filetype to 'myfiletype', then
|
||||||
filetype to 'myfiletype', then jump to line 50.
|
jump to line 50.
|
||||||
|
|
||||||
'abc:diffthis' will open the selected files and run |:diffthis| on the
|
Use ':diffthis' when opening multiple files to run |:diffthis| on the
|
||||||
first 4 files (if marked).
|
first 4 files.
|
||||||
|
|
||||||
See also Vim’s |++opt| and |+cmd|.
|
See also: Vim's |++opt| and |+cmd|.
|
||||||
|
|
||||||
d) Type exactly two dots '..' at the start of the prompt and press enter to go
|
d) Submit two dots '..' to go upward the directory tree by 1 level. To go up
|
||||||
backward in the directory tree by 1 level. If the parent directory is
|
multiple levels, use one extra dot for each extra level:
|
||||||
large, this might be slow.
|
>
|
||||||
|
Raw input Interpreted as
|
||||||
|
.. ../
|
||||||
|
... ../../
|
||||||
|
.... ../../../
|
||||||
|
<
|
||||||
|
Note: if the parent directories are large and uncached, this can be slow.
|
||||||
|
|
||||||
e) Similarly, submit '/' or '\' to find and go to the project’s root. If the
|
You can also use '@cd path/' to change CtrlP's local working directory.
|
||||||
project is large, using a VCS listing command to look for files might help
|
Use '@cd %:h' to change to the directory of the current file.
|
||||||
speeding up the intial scan (see |g:ctrlp_user_command| for more details).
|
|
||||||
|
e) Similarly, submit '/' or '\' to find and go to the project's root.
|
||||||
|
|
||||||
|
If the project is large, using a VCS listing command to look for files
|
||||||
|
might help speeding up the intial scan (see |g:ctrlp_user_command| for more
|
||||||
|
details).
|
||||||
|
|
||||||
|
Note: d) and e) only work in file, directory and mixed modes.
|
||||||
|
|
||||||
f) Type the name of a non-existent file and press <c-y> to create it. Mark a
|
f) Type the name of a non-existent file and press <c-y> to create it. Mark a
|
||||||
file with <c-z> to create the new file in the same directory as the marked
|
file with <c-z> to create the new file in the same directory as the marked
|
||||||
file.
|
file.
|
||||||
|
|
||||||
E.g. 'parentdir/newfile.txt' will create a directory named 'parentdir' as
|
E.g. Using 'newdir/newfile.txt' will create a directory named 'newdir' as
|
||||||
well as 'newfile.txt'.
|
well as a file named 'newfile.txt'.
|
||||||
|
|
||||||
If 'some/old/dirs/oldfile.txt' is marked with <c-z>, then 'parentdir'
|
If an entry 'some/old/dirs/oldfile.txt' is marked with <c-z>, then
|
||||||
and 'newfile.txt' will be created in 'some/old/dirs'. The final path
|
'newdir' and 'newfile.txt' will be created under 'some/old/dirs'. The
|
||||||
will then be 'some/old/dirs/parentdir/newfile.txt'.
|
final path will then be 'some/old/dirs/newdir/newfile.txt'.
|
||||||
|
|
||||||
Use '\' in place of '/' on Windows (if |'ssl'| is not set).
|
Note: use '\' in place of '/' on Windows (if |'shellslash'| is not set).
|
||||||
|
|
||||||
g) Submit ? to open this help file.
|
g) In filename mode (toggle with <c-d>), you can use one primary pattern and
|
||||||
|
one refining pattern separated by a semicolon. Both patterns work like (a),
|
||||||
|
or (b) when in regexp mode.
|
||||||
|
|
||||||
|
h) Submit ? to open this help file.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
EXTENSIONS *g:ctrlp-extensions*
|
EXTENSIONS *ctrlp-extensions*
|
||||||
|
|
||||||
Extensions are optional. To enable an extension, add its name to the variable
|
Extensions are optional. To enable an extension, add its name to the variable
|
||||||
g:ctrlp_extensions: >
|
g:ctrlp_extensions: >
|
||||||
let g:ctrlp_extensions = ['tag', 'buffertag', 'quickfix', 'dir', 'rtscript',
|
let g:ctrlp_extensions = ['tag', 'buffertag', 'quickfix', 'dir', 'rtscript',
|
||||||
\ 'undo', 'line', 'changes']
|
\ 'undo', 'line', 'changes', 'mixed', 'bookmarkdir']
|
||||||
<
|
<
|
||||||
The order of the items will be the order they appear on the statusline and when
|
The order of the items will be the order they appear on the statusline and when
|
||||||
using <c-f>, <c-b>.
|
using <c-f>, <c-b>.
|
||||||
@@ -705,7 +811,7 @@ Available extensions:~
|
|||||||
- Name: 'tag'
|
- Name: 'tag'
|
||||||
- Command: ':CtrlPTag'
|
- Command: ':CtrlPTag'
|
||||||
- Search for a tag within a generated central tags file, and jump to the
|
- Search for a tag within a generated central tags file, and jump to the
|
||||||
definition. Use the Vim’s option |'tags'| to specify the names and the
|
definition. Use the Vim's option |'tags'| to specify the names and the
|
||||||
locations of the tags file(s).
|
locations of the tags file(s).
|
||||||
E.g. set tags+=doc/tags
|
E.g. set tags+=doc/tags
|
||||||
|
|
||||||
@@ -713,7 +819,7 @@ Available extensions:~
|
|||||||
*:CtrlPBufTagAll*
|
*:CtrlPBufTagAll*
|
||||||
* Buffer Tag mode:~
|
* Buffer Tag mode:~
|
||||||
- Name: 'buffertag'
|
- Name: 'buffertag'
|
||||||
- Commands: ':CtrlPBufTag [buffer-name]',
|
- Commands: ':CtrlPBufTag [buffer]',
|
||||||
':CtrlPBufTagAll'.
|
':CtrlPBufTagAll'.
|
||||||
- Search for a tag within the current buffer or all listed buffers and jump
|
- Search for a tag within the current buffer or all listed buffers and jump
|
||||||
to the definition. Requires |exuberant_ctags| or compatible programs.
|
to the definition. Requires |exuberant_ctags| or compatible programs.
|
||||||
@@ -733,7 +839,7 @@ Available extensions:~
|
|||||||
+ <cr> change the local working directory for CtrlP and keep it open.
|
+ <cr> change the local working directory for CtrlP and keep it open.
|
||||||
+ <c-t> change the global working directory (exit).
|
+ <c-t> change the global working directory (exit).
|
||||||
+ <c-v> change the local working directory for the current window (exit).
|
+ <c-v> change the local working directory for the current window (exit).
|
||||||
+ <c-x> change the global working directory to CtrlP’s current local
|
+ <c-x> change the global working directory to CtrlP's current local
|
||||||
working directory (exit).
|
working directory (exit).
|
||||||
|
|
||||||
*:CtrlPRTS*
|
*:CtrlPRTS*
|
||||||
@@ -758,21 +864,43 @@ Available extensions:~
|
|||||||
*:CtrlPChangeAll*
|
*:CtrlPChangeAll*
|
||||||
* Change list mode:~
|
* Change list mode:~
|
||||||
- Name: 'changes'
|
- Name: 'changes'
|
||||||
- Commands: ':CtrlPChange [buffer-name]',
|
- Commands: ':CtrlPChange [buffer]',
|
||||||
':CtrlPChangeAll'.
|
':CtrlPChangeAll'.
|
||||||
- Search for and jump to a recent change in the current buffer or in all
|
- Search for and jump to a recent change in the current buffer or in all
|
||||||
listed buffers.
|
listed buffers.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
*:CtrlPMixed*
|
||||||
|
* Mixed mode:~
|
||||||
|
- Name: 'mixed'
|
||||||
|
- Command: ':CtrlPMixed'
|
||||||
|
- Search in files, buffers and MRU files at the same time.
|
||||||
|
|
||||||
|
*:CtrlPBookmarkDir*
|
||||||
|
*:CtrlPBookmarkDirAdd*
|
||||||
|
* BookmarkDir mode:~
|
||||||
|
- Name: 'bookmarkdir'
|
||||||
|
- Commands: ':CtrlPBookmarkDir',
|
||||||
|
':CtrlPBookmarkDirAdd [directory]'.
|
||||||
|
- Search for a bookmarked directory and change the working directory to it.
|
||||||
|
- Mappings:
|
||||||
|
+ <cr> change the local working directory for CtrlP, keep it open and
|
||||||
|
switch to find file mode.
|
||||||
|
+ <c-x> change the global working directory (exit).
|
||||||
|
+ <c-v> change the local working directory for the current window (exit).
|
||||||
|
+ <F7>
|
||||||
|
- Wipe bookmark list.
|
||||||
|
- Delete entries marked by <c-z>.
|
||||||
|
|
||||||
|
----------------------------------------
|
||||||
Buffer Tag mode options:~
|
Buffer Tag mode options:~
|
||||||
|
|
||||||
*'g:ctrlp_buftag_ctags_bin'*
|
*'g:ctrlp_buftag_ctags_bin'*
|
||||||
If ctags isn’t in your $PATH, use this to set its location: >
|
If ctags isn't in your $PATH, use this to set its location: >
|
||||||
let g:ctrlp_buftag_ctags_bin = ''
|
let g:ctrlp_buftag_ctags_bin = ''
|
||||||
<
|
<
|
||||||
|
|
||||||
*'g:ctrlp_buftag_systemenc'*
|
*'g:ctrlp_buftag_systemenc'*
|
||||||
Match this with your OS’s encoding (not Vim’s). The default value mirrors Vim’s
|
Match this with your OS's encoding (not Vim's). The default value mirrors Vim's
|
||||||
global |'encoding'| option: >
|
global |'encoding'| option: >
|
||||||
let g:ctrlp_buftag_systemenc = &encoding
|
let g:ctrlp_buftag_systemenc = &encoding
|
||||||
<
|
<
|
||||||
@@ -799,12 +927,12 @@ Highlighting:~
|
|||||||
CtrlPNoEntries : the message when no match is found (Error)
|
CtrlPNoEntries : the message when no match is found (Error)
|
||||||
CtrlPMatch : the matched pattern (Identifier)
|
CtrlPMatch : the matched pattern (Identifier)
|
||||||
CtrlPLinePre : the line prefix '>' in the match window
|
CtrlPLinePre : the line prefix '>' in the match window
|
||||||
CtrlPPrtBase : the prompt’s base (Comment)
|
CtrlPPrtBase : the prompt's base (Comment)
|
||||||
CtrlPPrtText : the prompt’s text (|hl-Normal|)
|
CtrlPPrtText : the prompt's text (|hl-Normal|)
|
||||||
CtrlPPrtCursor : the prompt’s cursor when moving over the text (Constant)
|
CtrlPPrtCursor : the prompt's cursor when moving over the text (Constant)
|
||||||
|
|
||||||
* In extensions:
|
* In extensions:
|
||||||
CtrlPTabExtra : the part of each line that’s not matched against (Comment)
|
CtrlPTabExtra : the part of each line that's not matched against (Comment)
|
||||||
CtrlPBufName : the buffer name an entry belongs to (|hl-Directory|)
|
CtrlPBufName : the buffer name an entry belongs to (|hl-Directory|)
|
||||||
CtrlPTagKind : the kind of the tag in buffer-tag mode (|hl-Title|)
|
CtrlPTagKind : the kind of the tag in buffer-tag mode (|hl-Title|)
|
||||||
CtrlPqfLineCol : the line and column numbers in quickfix mode (Comment)
|
CtrlPqfLineCol : the line and column numbers in quickfix mode (Comment)
|
||||||
@@ -813,6 +941,7 @@ Highlighting:~
|
|||||||
CtrlPUndoNr : the undo number inside [] in undo mode (String)
|
CtrlPUndoNr : the undo number inside [] in undo mode (String)
|
||||||
CtrlPUndoSv : the point where the file was saved (Comment)
|
CtrlPUndoSv : the point where the file was saved (Comment)
|
||||||
CtrlPUndoPo : the current position in the undo tree (|hl-Title|)
|
CtrlPUndoPo : the current position in the undo tree (|hl-Title|)
|
||||||
|
CtrlPBookmark : the name of the bookmark (Identifier)
|
||||||
|
|
||||||
Statuslines:~
|
Statuslines:~
|
||||||
* Highlight groups:
|
* Highlight groups:
|
||||||
@@ -825,7 +954,7 @@ Statuslines:~
|
|||||||
===============================================================================
|
===============================================================================
|
||||||
MISCELLANEOUS CONFIGS *ctrlp-miscellaneous-configs*
|
MISCELLANEOUS CONFIGS *ctrlp-miscellaneous-configs*
|
||||||
|
|
||||||
* Use |wildignore| for |g:ctrlp_user_command|:
|
* Using |wildignore| for |g:ctrlp_user_command|:
|
||||||
>
|
>
|
||||||
function! s:wig2cmd()
|
function! s:wig2cmd()
|
||||||
" Change wildignore into space or | separated groups
|
" Change wildignore into space or | separated groups
|
||||||
@@ -847,12 +976,12 @@ MISCELLANEOUS CONFIGS *ctrlp-miscellaneous-configs*
|
|||||||
<
|
<
|
||||||
(submitted by Rich Alesi <github.com/ralesi>)
|
(submitted by Rich Alesi <github.com/ralesi>)
|
||||||
|
|
||||||
* A standalone function to set the working directory to the project’s root, or
|
* A standalone function to set the working directory to the project's root, or
|
||||||
to the parent directory of the current file if a root can’t be found:
|
to the parent directory of the current file if a root can't be found:
|
||||||
>
|
>
|
||||||
function! s:setcwd()
|
function! s:setcwd()
|
||||||
let cph = expand('%:p:h', 1)
|
let cph = expand('%:p:h', 1)
|
||||||
if match(cph, '\v^<.+>://') >= 0 | retu | en
|
if cph =~ '^.\+://' | retu | en
|
||||||
for mkr in ['.git/', '.hg/', '.svn/', '.bzr/', '_darcs/', '.vimprojects']
|
for mkr in ['.git/', '.hg/', '.svn/', '.bzr/', '_darcs/', '.vimprojects']
|
||||||
let wd = call('find'.(mkr =~ '/$' ? 'dir' : 'file'), [mkr, cph.';'])
|
let wd = call('find'.(mkr =~ '/$' ? 'dir' : 'file'), [mkr, cph.';'])
|
||||||
if wd != '' | let &acd = 0 | brea | en
|
if wd != '' | let &acd = 0 | brea | en
|
||||||
@@ -864,12 +993,17 @@ MISCELLANEOUS CONFIGS *ctrlp-miscellaneous-configs*
|
|||||||
<
|
<
|
||||||
(requires Vim 7.1.299+)
|
(requires Vim 7.1.299+)
|
||||||
|
|
||||||
|
* Using a |count| to invoke different commands using the same mapping:
|
||||||
|
>
|
||||||
|
let g:ctrlp_cmd = 'exe "CtrlP".get(["", "Buffer", "MRU"], v:count)'
|
||||||
|
<
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
CREDITS *ctrlp-credits*
|
CREDITS *ctrlp-credits*
|
||||||
|
|
||||||
Developed by Kien Nguyen <github.com/kien>.
|
Developed by Kien Nguyen <github.com/kien>.
|
||||||
|
|
||||||
Project’s homepage: http://kien.github.com/ctrlp.vim
|
Project's homepage: http://kien.github.com/ctrlp.vim
|
||||||
Git repository: https://github.com/kien/ctrlp.vim
|
Git repository: https://github.com/kien/ctrlp.vim
|
||||||
Mercurial repository: https://bitbucket.org/kien/ctrlp.vim
|
Mercurial repository: https://bitbucket.org/kien/ctrlp.vim
|
||||||
|
|
||||||
@@ -891,13 +1025,37 @@ Special thanks:~
|
|||||||
* Kent Sibilev <github.com/datanoise>
|
* Kent Sibilev <github.com/datanoise>
|
||||||
* Tacahiroy <github.com/tacahiroy>
|
* Tacahiroy <github.com/tacahiroy>
|
||||||
* Luca Pette <github.com/lucapette>
|
* Luca Pette <github.com/lucapette>
|
||||||
|
* Seth Fowler <github.com/sfowler>
|
||||||
|
* Lowe Thiderman <github.com/daethorian>
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
CHANGELOG *ctrlp-changelog*
|
CHANGELOG *ctrlp-changelog*
|
||||||
|
|
||||||
|
Before 2012/06/15~
|
||||||
|
|
||||||
|
+ New value for |g:ctrlp_follow_symlinks|: 2.
|
||||||
|
+ New value for |g:ctrlp_open_multiple_files|: 'j'.
|
||||||
|
+ Allow using <c-t>, <c-x>, <c-v> to open files marked by <c-z>.
|
||||||
|
+ Extend '..' (|ctrlp-input-formats| (d))
|
||||||
|
+ New input format: '@cd' (|ctrlp-input-formats| (d))
|
||||||
|
|
||||||
|
Before 2012/04/30~
|
||||||
|
|
||||||
|
+ New option: |g:ctrlp_mruf_default_order|
|
||||||
|
+ New feature: Bookmarked directories extension.
|
||||||
|
+ New commands: |:CtrlPBookmarkDir|
|
||||||
|
|:CtrlPBookmarkDirAdd|
|
||||||
|
|
||||||
|
Before 2012/04/15~
|
||||||
|
|
||||||
|
+ New option: |g:ctrlp_buffer_func|, callback functions for CtrlP buffer.
|
||||||
|
+ Remove: g:ctrlp_mruf_last_entered, make it a default for MRU mode.
|
||||||
|
+ New commands: |:CtrlPLastMode|, open CtrlP in the last mode used.
|
||||||
|
|:CtrlPMixed|, search in files, buffers and MRU files.
|
||||||
|
|
||||||
Before 2012/03/31~
|
Before 2012/03/31~
|
||||||
|
|
||||||
+ New option: |g:ctrlp_default_input|, default input when entering CtrlP.
|
+ New options: |g:ctrlp_default_input|, default input when entering CtrlP.
|
||||||
|g:ctrlp_match_func|, allow using a custom fuzzy matcher.
|
|g:ctrlp_match_func|, allow using a custom fuzzy matcher.
|
||||||
+ Rename:
|
+ Rename:
|
||||||
*ClearCtrlPCache* -> |CtrlPClearCache|
|
*ClearCtrlPCache* -> |CtrlPClearCache|
|
||||||
@@ -959,7 +1117,7 @@ Before 2011/10/30~
|
|||||||
Before 2011/10/12~
|
Before 2011/10/12~
|
||||||
|
|
||||||
+ New features: Open multiple files.
|
+ New features: Open multiple files.
|
||||||
Pass Vim’s |++opt| and |+cmd| to the opening file
|
Pass Vim's |++opt| and |+cmd| to the opening file
|
||||||
(|ctrlp-input-formats| (c))
|
(|ctrlp-input-formats| (c))
|
||||||
Auto-complete each dir for |:CtrlP| [starting-directory]
|
Auto-complete each dir for |:CtrlP| [starting-directory]
|
||||||
+ New mappings: <c-z> mark/unmark a file to be opened with <c-o>.
|
+ New mappings: <c-z> mark/unmark a file to be opened with <c-o>.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
" =============================================================================
|
" =============================================================================
|
||||||
" File: plugin/ctrlp.vim
|
" File: plugin/ctrlp.vim
|
||||||
" Description: Fuzzy file, buffer, mru and tag finder.
|
" Description: Fuzzy file, buffer, mru, tag, etc finder.
|
||||||
" Author: Kien Nguyen <github.com/kien>
|
" Author: Kien Nguyen <github.com/kien>
|
||||||
" =============================================================================
|
" =============================================================================
|
||||||
" GetLatestVimScripts: 3736 1 :AutoInstall: ctrlp.zip
|
" GetLatestVimScripts: 3736 1 :AutoInstall: ctrlp.zip
|
||||||
@@ -11,7 +11,8 @@ en
|
|||||||
let g:loaded_ctrlp = 1
|
let g:loaded_ctrlp = 1
|
||||||
|
|
||||||
let [g:ctrlp_lines, g:ctrlp_allfiles, g:ctrlp_alltags, g:ctrlp_alldirs,
|
let [g:ctrlp_lines, g:ctrlp_allfiles, g:ctrlp_alltags, g:ctrlp_alldirs,
|
||||||
\ g:ctrlp_buftags, g:ctrlp_builtins] = [[], [], [], [], {}, 2]
|
\ g:ctrlp_allmixes, g:ctrlp_buftags, g:ctrlp_ext_vars, g:ctrlp_builtins]
|
||||||
|
\ = [[], [], [], [], {}, {}, [], 2]
|
||||||
|
|
||||||
if !exists('g:ctrlp_map') | let g:ctrlp_map = '<c-p>' | en
|
if !exists('g:ctrlp_map') | let g:ctrlp_map = '<c-p>' | en
|
||||||
if !exists('g:ctrlp_cmd') | let g:ctrlp_cmd = 'CtrlP' | en
|
if !exists('g:ctrlp_cmd') | let g:ctrlp_cmd = 'CtrlP' | en
|
||||||
@@ -21,6 +22,8 @@ com! -n=? -com=dir CtrlP cal ctrlp#init(0, <q-args>)
|
|||||||
com! CtrlPBuffer cal ctrlp#init(1)
|
com! CtrlPBuffer cal ctrlp#init(1)
|
||||||
com! CtrlPMRUFiles cal ctrlp#init(2)
|
com! CtrlPMRUFiles cal ctrlp#init(2)
|
||||||
|
|
||||||
|
com! CtrlPLastMode cal ctrlp#init(-1)
|
||||||
|
|
||||||
com! CtrlPClearCache cal ctrlp#clr()
|
com! CtrlPClearCache cal ctrlp#clr()
|
||||||
com! CtrlPClearAllCaches cal ctrlp#clra()
|
com! CtrlPClearAllCaches cal ctrlp#clra()
|
||||||
com! CtrlPReload cal ctrlp#reset()
|
com! CtrlPReload cal ctrlp#reset()
|
||||||
@@ -40,21 +43,19 @@ en
|
|||||||
cal ctrlp#mrufiles#init()
|
cal ctrlp#mrufiles#init()
|
||||||
|
|
||||||
com! CtrlPTag cal ctrlp#init(ctrlp#tag#id())
|
com! CtrlPTag cal ctrlp#init(ctrlp#tag#id())
|
||||||
|
|
||||||
com! CtrlPQuickfix cal ctrlp#init(ctrlp#quickfix#id())
|
com! CtrlPQuickfix cal ctrlp#init(ctrlp#quickfix#id())
|
||||||
|
com! -n=? -com=dir CtrlPDir
|
||||||
com! -n=? -com=dir CtrlPDir cal ctrlp#init(ctrlp#dir#id(), <q-args>)
|
\ cal ctrlp#init(ctrlp#dir#id(), <q-args>)
|
||||||
|
|
||||||
com! -n=? -com=buffer CtrlPBufTag
|
com! -n=? -com=buffer CtrlPBufTag
|
||||||
\ cal ctrlp#init(ctrlp#buffertag#cmd(0, <q-args>))
|
\ cal ctrlp#init(ctrlp#buffertag#cmd(0, <q-args>))
|
||||||
com! CtrlPBufTagAll cal ctrlp#init(ctrlp#buffertag#cmd(1))
|
com! CtrlPBufTagAll cal ctrlp#init(ctrlp#buffertag#cmd(1))
|
||||||
|
|
||||||
com! CtrlPRTS cal ctrlp#init(ctrlp#rtscript#id())
|
com! CtrlPRTS cal ctrlp#init(ctrlp#rtscript#id())
|
||||||
|
|
||||||
com! CtrlPUndo cal ctrlp#init(ctrlp#undo#id())
|
com! CtrlPUndo cal ctrlp#init(ctrlp#undo#id())
|
||||||
|
|
||||||
com! CtrlPLine cal ctrlp#init(ctrlp#line#id())
|
com! CtrlPLine cal ctrlp#init(ctrlp#line#id())
|
||||||
|
|
||||||
com! -n=? -com=buffer CtrlPChange
|
com! -n=? -com=buffer CtrlPChange
|
||||||
\ cal ctrlp#init(ctrlp#changes#cmd(0, <q-args>))
|
\ cal ctrlp#init(ctrlp#changes#cmd(0, <q-args>))
|
||||||
com! CtrlPChangeAll cal ctrlp#init(ctrlp#changes#cmd(1))
|
com! CtrlPChangeAll cal ctrlp#init(ctrlp#changes#cmd(1))
|
||||||
|
com! CtrlPMixed cal ctrlp#init(ctrlp#mixed#id())
|
||||||
|
com! CtrlPBookmarkDir cal ctrlp#init(ctrlp#bookmarkdir#id())
|
||||||
|
com! -n=? -com=dir CtrlPBookmarkDirAdd
|
||||||
|
\ cal ctrlp#call('ctrlp#bookmarkdir#add', <q-args>)
|
||||||
|
|||||||
@@ -1,56 +1,69 @@
|
|||||||
# ctrlp.vim
|
# ctrlp.vim
|
||||||
Full path fuzzy __file__, __buffer__, __mru__ and __tag__ finder for Vim.
|
Fuzzy __file__, __buffer__, __mru__, __tag__, ... finder for Vim.
|
||||||
|
|
||||||
* Written in pure Vimscript for MacVim and Vim 7.0+.
|
* Written in pure Vimscript for MacVim, gVim and Vim 7.0+.
|
||||||
* Full support for Vim’s regexp as search pattern.
|
* Full support for Vim's regexp as search patterns.
|
||||||
* Built-in Most Recently Used (MRU) files monitoring.
|
* Built-in Most Recently Used (MRU) files monitoring.
|
||||||
* Built-in project’s root finder.
|
* Built-in project's root finder.
|
||||||
* Open Multiple Files.
|
* Open multiple files at once.
|
||||||
* [Extensible][3].
|
* Create new files and directories.
|
||||||
|
* [Extensible][2].
|
||||||
|
|
||||||
![ctrlp][1]
|
![ctrlp][1]
|
||||||
|
|
||||||
## Basic Usage
|
## Installation
|
||||||
* Press `<c-p>` or run `:CtrlP` to invoke CtrlP in find file mode.
|
1. Clone the plugin into a separate directory:
|
||||||
* Or run `:CtrlPBuffer` or `:CtrlPMRU` to invoke CtrlP in buffer or MRU mode.
|
|
||||||
|
|
||||||
Once CtrlP is open:
|
```
|
||||||
|
$ cd ~/.vim
|
||||||
* Press `<c-f>` and `<c-b>` to switch between find file, buffer, and MRU file
|
$ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim
|
||||||
modes.
|
|
||||||
* Press `<c-d>` to switch to filename only search instead of full path.
|
|
||||||
* Press `<F5>` to purge the cache for the current directory and get new files.
|
|
||||||
* Use `*` or `|` in the prompt to submit the string as a Vim’s regexp pattern.
|
|
||||||
* Or press `<c-r>` to switch to regexp mode.
|
|
||||||
* End the input string with a colon `:` followed by a command to execute after
|
|
||||||
opening the file.
|
|
||||||
e.g. `abc:45` will open the file matched the pattern and jump to line 45.
|
|
||||||
* Submit two dots `..` as the input string to go backward the directory tree by
|
|
||||||
1 level.
|
|
||||||
* Use `<c-y>` to create a new file and its parent dirs.
|
|
||||||
* Use `<c-z>` to mark/unmark files and `<c-o>` to open them.
|
|
||||||
|
|
||||||
## Basic Options
|
|
||||||
* Change the mapping to invoke CtrlP:
|
|
||||||
|
|
||||||
```vim
|
|
||||||
let g:ctrlp_map = '<c-p>'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
* When CtrlP is invoked, it automatically sets its local working directory
|
2. Add to your `~/.vimrc`:
|
||||||
according to this variable:
|
|
||||||
|
```vim
|
||||||
|
set runtimepath^=~/.vim/bundle/ctrlp.vim
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Run at Vim's command line:
|
||||||
|
|
||||||
|
```
|
||||||
|
:helptags ~/.vim/bundle/ctrlp.vim/doc
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Restart Vim and start reading `:help ctrlp.txt` for usage and configuration details.
|
||||||
|
|
||||||
|
On Windows, use the `$HOME/vimfiles` or the `$VIM/vimfiles` directory instead of the `~/.vim` directory.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
1. See `:help ctrlp-commands` and `:help ctrlp-extensions`.
|
||||||
|
2. Once the prompt's open:
|
||||||
|
* Press `<c-f>` and `<c-b>` to cycle between modes.
|
||||||
|
* Press `<c-d>` to switch to filename only search instead of full path.
|
||||||
|
* Press `<F5>` to purge the cache for the current directory and get new files.
|
||||||
|
* Submit two or more dots `..` to go up the directory tree by one or multiple levels.
|
||||||
|
* Use `<c-n>`, `<c-p>` to go to the next/previous string in the prompt's history.
|
||||||
|
* Use `<c-y>` to create a new file and its parent dirs.
|
||||||
|
* Use `<c-z>` to mark/unmark multiple files and `<c-o>` to open them.
|
||||||
|
* End the input string with a colon `:` followed by a command to execute it on the opening file(s).
|
||||||
|
|
||||||
|
More at `:help ctrlp-mappings`.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
* Unless a starting directory is specified, the local working directory will be set according to this variable:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
let g:ctrlp_working_path_mode = 2
|
let g:ctrlp_working_path_mode = 2
|
||||||
```
|
```
|
||||||
|
|
||||||
0 - don’t manage working directory.
|
0 - don't manage working directory.
|
||||||
1 - the parent directory of the current file.
|
1 - the directory of the current file.
|
||||||
2 - the nearest ancestor that contains one of these directories or files:
|
2 - the nearest ancestor that contains one of these directories or files:
|
||||||
`.git/` `.hg/` `.svn/` `.bzr/` `_darcs/`
|
`.git` `.hg` `.svn` `.bzr` `_darcs`
|
||||||
|
|
||||||
* If you want to exclude directories or files from the search, use the Vim’s
|
Define additional root markers with the `g:ctrlp_root_markers` option.
|
||||||
option `wildignore` and/or the option `g:ctrlp_custom_ignore`. Examples:
|
|
||||||
|
* Exclude files and directories:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux
|
set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux
|
||||||
@@ -64,15 +77,14 @@ option `wildignore` and/or the option `g:ctrlp_custom_ignore`. Examples:
|
|||||||
\ }
|
\ }
|
||||||
```
|
```
|
||||||
|
|
||||||
* Use a custom file listing command with:
|
* Use a custom file listing command:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
let g:ctrlp_user_command = 'find %s -type f' " MacOSX/Linux
|
let g:ctrlp_user_command = 'find %s -type f' " MacOSX/Linux
|
||||||
let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d' " Windows
|
let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d' " Windows
|
||||||
```
|
```
|
||||||
|
|
||||||
_Check [the docs][2] for more mappings, commands and options._
|
More at `:help ctrlp-options`.
|
||||||
|
|
||||||
[1]: http://i.imgur.com/yIynr.png
|
[1]: http://i.imgur.com/yIynr.png
|
||||||
[2]: https://github.com/kien/ctrlp.vim/blob/master/doc/ctrlp.txt
|
[2]: https://github.com/kien/ctrlp.vim/tree/extensions
|
||||||
[3]: https://github.com/kien/ctrlp.vim/tree/extensions
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ function! syntastic#c#SearchHeaders()
|
|||||||
" search included headers
|
" search included headers
|
||||||
for hfile in files
|
for hfile in files
|
||||||
if hfile != ''
|
if hfile != ''
|
||||||
let filename = expand('%:p:h') . ((has('win32') || has('win64')) ?
|
let filename = expand('%:p:h') . (has('win32') ?
|
||||||
\ '\' : '/') . hfile
|
\ '\' : '/') . hfile
|
||||||
try
|
try
|
||||||
let lines = readfile(filename, '', 100)
|
let lines = readfile(filename, '', 100)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ if exists("g:loaded_syntastic_plugin")
|
|||||||
endif
|
endif
|
||||||
let g:loaded_syntastic_plugin = 1
|
let g:loaded_syntastic_plugin = 1
|
||||||
|
|
||||||
let s:running_windows = has("win16") || has("win32") || has("win64")
|
let s:running_windows = has("win16") || has("win32")
|
||||||
|
|
||||||
if !s:running_windows
|
if !s:running_windows
|
||||||
let s:uname = system('uname')
|
let s:uname = system('uname')
|
||||||
@@ -185,6 +185,8 @@ function! s:CacheErrors()
|
|||||||
for ft in split(fts, '\.')
|
for ft in split(fts, '\.')
|
||||||
if s:Checkable(ft)
|
if s:Checkable(ft)
|
||||||
let errors = SyntaxCheckers_{ft}_GetLocList()
|
let errors = SyntaxCheckers_{ft}_GetLocList()
|
||||||
|
"keep only lines that effectively match an error/warning
|
||||||
|
let errors = s:FilterLocList({'valid': 1}, errors)
|
||||||
"make errors have type "E" by default
|
"make errors have type "E" by default
|
||||||
call SyntasticAddToErrors(errors, {'type': 'E'})
|
call SyntasticAddToErrors(errors, {'type': 'E'})
|
||||||
call extend(s:LocList(), errors)
|
call extend(s:LocList(), errors)
|
||||||
@@ -529,10 +531,10 @@ endfunction
|
|||||||
" 'subtype' - all errors will be assigned the given subtype
|
" 'subtype' - all errors will be assigned the given subtype
|
||||||
function! SyntasticMake(options)
|
function! SyntasticMake(options)
|
||||||
let old_loclist = getloclist(0)
|
let old_loclist = getloclist(0)
|
||||||
let old_makeprg = &makeprg
|
let old_makeprg = &l:makeprg
|
||||||
let old_shellpipe = &shellpipe
|
let old_shellpipe = &shellpipe
|
||||||
let old_shell = &shell
|
let old_shell = &shell
|
||||||
let old_errorformat = &errorformat
|
let old_errorformat = &l:errorformat
|
||||||
|
|
||||||
if !s:running_windows && (s:uname !~ "FreeBSD")
|
if !s:running_windows && (s:uname !~ "FreeBSD")
|
||||||
"this is a hack to stop the screen needing to be ':redraw'n when
|
"this is a hack to stop the screen needing to be ':redraw'n when
|
||||||
@@ -542,19 +544,19 @@ function! SyntasticMake(options)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(a:options, 'makeprg')
|
if has_key(a:options, 'makeprg')
|
||||||
let &makeprg = a:options['makeprg']
|
let &l:makeprg = a:options['makeprg']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(a:options, 'errorformat')
|
if has_key(a:options, 'errorformat')
|
||||||
let &errorformat = a:options['errorformat']
|
let &l:errorformat = a:options['errorformat']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
silent lmake!
|
silent lmake!
|
||||||
let errors = getloclist(0)
|
let errors = getloclist(0)
|
||||||
|
|
||||||
call setloclist(0, old_loclist)
|
call setloclist(0, old_loclist)
|
||||||
let &makeprg = old_makeprg
|
let &l:makeprg = old_makeprg
|
||||||
let &errorformat = old_errorformat
|
let &l:errorformat = old_errorformat
|
||||||
let &shellpipe=old_shellpipe
|
let &shellpipe=old_shellpipe
|
||||||
let &shell=old_shell
|
let &shell=old_shell
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ function! SyntaxCheckers_c_GetLocList()
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" add optional config file parameters
|
" add optional config file parameters
|
||||||
let makeprg .= syntastic#c#ReadConfig(g:syntastic_c_config_file)
|
let makeprg .= ' '.syntastic#c#ReadConfig(g:syntastic_c_config_file)
|
||||||
|
|
||||||
" process makeprg
|
" process makeprg
|
||||||
let errors = SyntasticMake({ 'makeprg': makeprg,
|
let errors = SyntasticMake({ 'makeprg': makeprg,
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ function! SyntaxCheckers_cpp_GetLocList()
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" add optional config file parameters
|
" add optional config file parameters
|
||||||
let makeprg .= syntastic#c#ReadConfig(g:syntastic_cpp_config_file)
|
let makeprg .= ' ' . syntastic#c#ReadConfig(g:syntastic_cpp_config_file)
|
||||||
|
|
||||||
" process makeprg
|
" process makeprg
|
||||||
let errors = SyntasticMake({ 'makeprg': makeprg,
|
let errors = SyntasticMake({ 'makeprg': makeprg,
|
||||||
|
|||||||
140
bundle/git_syntastic/syntax_checkers/d.vim
Normal file
140
bundle/git_syntastic/syntax_checkers/d.vim
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
"============================================================================
|
||||||
|
"File: d.vim
|
||||||
|
"Description: Syntax checking plugin for syntastic.vim
|
||||||
|
"Maintainer: Alfredo Di Napoli <alfredo dot dinapoli at gmail dot com>
|
||||||
|
"License: Based on the original work of Gregor Uhlenheuer and his
|
||||||
|
" cpp.vim checker so credits are dued.
|
||||||
|
" 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.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
|
||||||
|
" in order to also check header files add this to your .vimrc:
|
||||||
|
" (this usually creates a .gch file in your source directory)
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_check_header = 1
|
||||||
|
"
|
||||||
|
" To disable the search of included header files after special
|
||||||
|
" libraries like gtk and glib add this line to your .vimrc:
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_no_include_search = 1
|
||||||
|
"
|
||||||
|
" In order to add some custom include directories that should be added to the
|
||||||
|
" gcc command line you can add those to the global variable
|
||||||
|
" g:syntastic_d_include_dirs. This list can be used like this:
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_include_dirs = [ 'includes', 'headers' ]
|
||||||
|
"
|
||||||
|
" To enable header files being re-checked on every file write add the
|
||||||
|
" following line to your .vimrc. Otherwise the header files are checked only
|
||||||
|
" one time on initially loading the file.
|
||||||
|
" In order to force syntastic to refresh the header includes simply
|
||||||
|
" unlet b:syntastic_d_includes. Then the header files are being re-checked
|
||||||
|
" on the next file write.
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_auto_refresh_includes = 1
|
||||||
|
"
|
||||||
|
" Alternatively you can set the buffer local variable b:syntastic_d_cflags.
|
||||||
|
" If this variable is set for the current buffer no search for additional
|
||||||
|
" libraries is done. I.e. set the variable like this:
|
||||||
|
"
|
||||||
|
" let b:syntastic_d_cflags = ' -I/usr/include/libsoup-2.4'
|
||||||
|
"
|
||||||
|
" Moreover it is possible to add additional compiler options to the syntax
|
||||||
|
" checking execution via the variable 'g:syntastic_d_compiler_options':
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_compiler_options = ' -std=c++0x'
|
||||||
|
"
|
||||||
|
" Additionally the setting 'g:syntastic_d_config_file' allows you to define
|
||||||
|
" a file that contains additional compiler arguments like include directories
|
||||||
|
" or CFLAGS. The file is expected to contain one option per line. If none is
|
||||||
|
" given the filename defaults to '.syntastic_d_config':
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_config_file = '.config'
|
||||||
|
"
|
||||||
|
" Using the global variable 'g:syntastic_d_remove_include_errors' you can
|
||||||
|
" specify whether errors of files included via the
|
||||||
|
" g:syntastic_d_include_dirs' setting are removed from the result set:
|
||||||
|
"
|
||||||
|
" let g:syntastic_d_remove_include_errors = 1
|
||||||
|
|
||||||
|
if exists('loaded_d_syntax_checker')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let loaded_d_syntax_checker = 1
|
||||||
|
|
||||||
|
if !executable('dmd')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
if !exists('g:syntastic_d_config_file')
|
||||||
|
let g:syntastic_d_config_file = '.syntastic_d_config'
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! SyntaxCheckers_d_GetLocList()
|
||||||
|
let makeprg = 'dmd -of/dev/null -c '
|
||||||
|
let errorformat = '%-G%f:%s:,%f(%l): %m,%f:%l: %m'
|
||||||
|
|
||||||
|
if exists('g:syntastic_d_compiler_options')
|
||||||
|
let makeprg .= g:syntastic_d_compiler_options
|
||||||
|
endif
|
||||||
|
|
||||||
|
let makeprg .= ' ' . shellescape(expand('%')) .
|
||||||
|
\ ' ' . syntastic#c#GetIncludeDirs('d')
|
||||||
|
|
||||||
|
if expand('%') =~? '\%(.di\)$'
|
||||||
|
if exists('g:syntastic_d_check_header')
|
||||||
|
let makeprg = 'dmd -c '.shellescape(expand('%')).
|
||||||
|
\ ' ' . syntastic#c#GetIncludeDirs('d')
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('b:syntastic_d_cflags')
|
||||||
|
if !exists('g:syntastic_d_no_include_search') ||
|
||||||
|
\ g:syntastic_d_no_include_search != 1
|
||||||
|
if exists('g:syntastic_d_auto_refresh_includes') &&
|
||||||
|
\ g:syntastic_d_auto_refresh_includes != 0
|
||||||
|
let makeprg .= syntastic#c#SearchHeaders()
|
||||||
|
else
|
||||||
|
if !exists('b:syntastic_d_includes')
|
||||||
|
let b:syntastic_d_includes = syntastic#c#SearchHeaders()
|
||||||
|
endif
|
||||||
|
let makeprg .= b:syntastic_d_includes
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let makeprg .= b:syntastic_d_cflags
|
||||||
|
endif
|
||||||
|
|
||||||
|
" add optional config file parameters
|
||||||
|
let makeprg .= ' ' . syntastic#c#ReadConfig(g:syntastic_d_config_file)
|
||||||
|
|
||||||
|
" process makeprg
|
||||||
|
let errors = SyntasticMake({ 'makeprg': makeprg,
|
||||||
|
\ 'errorformat': errorformat })
|
||||||
|
|
||||||
|
" filter the processed errors if desired
|
||||||
|
if exists('g:syntastic_d_remove_include_errors') &&
|
||||||
|
\ g:syntastic_d_remove_include_errors != 0
|
||||||
|
return filter(errors,
|
||||||
|
\ 'has_key(v:val, "bufnr") && v:val["bufnr"]=='.bufnr(''))
|
||||||
|
else
|
||||||
|
return errors
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
" vim: set et sts=4 sw=4:
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
# with the quickfix mode of Vim
|
# with the quickfix mode of Vim
|
||||||
#
|
#
|
||||||
# Copyright (<28>) 2001 by J<>rg Ziefle <joerg.ziefle@gmx.de>
|
# Copyright (<28>) 2001 by J<>rg Ziefle <joerg.ziefle@gmx.de>
|
||||||
|
# Copyright (c) 2012 Eric Harmon <http://eharmon.net>
|
||||||
# You may use and distribute this software under the same terms as Perl itself.
|
# You may use and distribute this software under the same terms as Perl itself.
|
||||||
#
|
#
|
||||||
# Usage: put one of the two configurations below in your ~/.vimrc (without the
|
# Usage: put one of the two configurations below in your ~/.vimrc (without the
|
||||||
@@ -13,25 +14,27 @@
|
|||||||
# Program is run interactively with 'perl -w':
|
# Program is run interactively with 'perl -w':
|
||||||
#
|
#
|
||||||
# set makeprg=$HOME/bin/vimparse.pl\ %\ $*
|
# set makeprg=$HOME/bin/vimparse.pl\ %\ $*
|
||||||
# set errorformat=%f:%l:%m
|
# set errorformat=%t:%f:%l:%m
|
||||||
#
|
#
|
||||||
# Program is only compiled with 'perl -wc':
|
# Program is only compiled with 'perl -wc':
|
||||||
#
|
#
|
||||||
# set makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*
|
# set makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*
|
||||||
# set errorformat=%f:%l:%m
|
# set errorformat=%t:%f:%l:%m
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# vimparse.pl [-c] [-f <errorfile>] <programfile> [programargs]
|
# vimparse.pl [-c] [-w] [-f <errorfile>] <programfile> [programargs]
|
||||||
#
|
#
|
||||||
# -c compile only, don't run (perl -wc)
|
# -c compile only, don't run (perl -wc)
|
||||||
|
# -w output warnings as warnings instead of errors (slightly slower)
|
||||||
# -f write errors to <errorfile>
|
# -f write errors to <errorfile>
|
||||||
#
|
#
|
||||||
# Example usages:
|
# Example usages:
|
||||||
# * From the command line:
|
# * From the command line:
|
||||||
# vimparse.pl program.pl
|
# vimparse.pl program.pl
|
||||||
#
|
#
|
||||||
# vimparse.pl -c -f errorfile program.pl
|
# vimparse.pl -c -w -f errorfile program.pl
|
||||||
# Then run vim -q errorfile to edit the errors with Vim.
|
# Then run vim -q errorfile to edit the errors with Vim.
|
||||||
|
# This uses the custom errorformat: %t:%f:%l:%m.
|
||||||
#
|
#
|
||||||
# * From Vim:
|
# * From Vim:
|
||||||
# Edit in Vim (and save, if you don't have autowrite on), then
|
# Edit in Vim (and save, if you don't have autowrite on), then
|
||||||
@@ -39,6 +42,9 @@
|
|||||||
# to error check.
|
# to error check.
|
||||||
#
|
#
|
||||||
# Version history:
|
# Version history:
|
||||||
|
# 0.3 (05/31/2012):
|
||||||
|
# * Added support for the seperate display of warnings
|
||||||
|
# * Switched output format to %t:%f:%l:%m to support error levels
|
||||||
# 0.2 (04/12/2001):
|
# 0.2 (04/12/2001):
|
||||||
# * First public version (sent to Bram)
|
# * First public version (sent to Bram)
|
||||||
# * -c command line option for compiling only
|
# * -c command line option for compiling only
|
||||||
@@ -64,11 +70,11 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use Getopt::Std;
|
use Getopt::Std;
|
||||||
|
|
||||||
use vars qw/$opt_c $opt_f $opt_h/; # needed for Getopt in combination with use strict 'vars'
|
use vars qw/$opt_c $opt_w $opt_f $opt_h/; # needed for Getopt in combination with use strict 'vars'
|
||||||
|
|
||||||
use constant VERSION => 0.2;
|
use constant VERSION => 0.2;
|
||||||
|
|
||||||
getopts('cf:h');
|
getopts('cwf:h');
|
||||||
|
|
||||||
&usage if $opt_h; # not necessarily needed, but good for further extension
|
&usage if $opt_h; # not necessarily needed, but good for further extension
|
||||||
|
|
||||||
@@ -86,20 +92,33 @@ my $handle = (defined $opt_f ? \*FILE : \*STDOUT);
|
|||||||
(my $file = shift) or &usage; # display usage if no filename is supplied
|
(my $file = shift) or &usage; # display usage if no filename is supplied
|
||||||
my $args = (@ARGV ? ' ' . join ' ', @ARGV : '');
|
my $args = (@ARGV ? ' ' . join ' ', @ARGV : '');
|
||||||
|
|
||||||
my @lines = `perl @{[defined $opt_c ? '-c ' : '' ]} -w "$file$args" 2>&1`;
|
my @error_lines = `perl @{[defined $opt_c ? '-c ' : '' ]} @{[defined $opt_w ? '-X ' : '-w ']} "$file$args" 2>&1`;
|
||||||
|
|
||||||
|
my @lines = map { "E:$_" } @error_lines;
|
||||||
|
|
||||||
|
my @warn_lines;
|
||||||
|
if(defined($opt_w)) {
|
||||||
|
@warn_lines = `perl @{[defined $opt_c ? '-c ' : '' ]} -w "$file$args" 2>&1`;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Any new errors must be warnings
|
||||||
|
foreach my $line (@warn_lines) {
|
||||||
|
if(!grep { $_ eq $line } @error_lines) {
|
||||||
|
push(@lines, "W:$line");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
my $errors = 0;
|
my $errors = 0;
|
||||||
foreach my $line (@lines) {
|
foreach my $line (@lines) {
|
||||||
|
|
||||||
chomp($line);
|
chomp($line);
|
||||||
my ($file, $lineno, $message, $rest);
|
my ($file, $lineno, $message, $rest, $severity);
|
||||||
|
|
||||||
if ($line =~ /^(.*)\sat\s(.*)\sline\s(\d+)(\.|,\snear\s\".*\")$/) {
|
if ($line =~ /^(.*)\sat\s(.*)\sline\s(\d+)(.*)$/) {
|
||||||
|
($severity, $message, $file, $lineno, $rest) = ($1, $2, $3, $4, $5);
|
||||||
($message, $file, $lineno, $rest) = ($1, $2, $3, $4);
|
|
||||||
$errors++;
|
$errors++;
|
||||||
$message .= $rest if ($rest =~ s/^,//);
|
$message .= $rest if ($rest =~ s/^,//);
|
||||||
print $handle "$file:$lineno:$message\n";
|
print $handle "$severity:$file:$lineno:$message\n";
|
||||||
|
|
||||||
} else { next };
|
} else { next };
|
||||||
|
|
||||||
@@ -129,9 +148,10 @@ sub usage {
|
|||||||
(local $0 = $0) =~ s/^.*\/([^\/]+)$/$1/; # remove path from name of program
|
(local $0 = $0) =~ s/^.*\/([^\/]+)$/$1/; # remove path from name of program
|
||||||
print<<EOT;
|
print<<EOT;
|
||||||
Usage:
|
Usage:
|
||||||
$0 [-c] [-f <errorfile>] <programfile> [programargs]
|
$0 [-c] [-w] [-f <errorfile>] <programfile> [programargs]
|
||||||
|
|
||||||
-c compile only, don't run (executes 'perl -wc')
|
-c compile only, don't run (executes 'perl -c')
|
||||||
|
-w output warnings as warnings instead of errors (slightly slower)
|
||||||
-f write errors to <errorfile>
|
-f write errors to <errorfile>
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
@@ -139,8 +159,9 @@ Examples:
|
|||||||
$0 program.pl
|
$0 program.pl
|
||||||
Displays output on STDOUT.
|
Displays output on STDOUT.
|
||||||
|
|
||||||
$0 -c -f errorfile program.pl
|
$0 -c -w -f errorfile program.pl
|
||||||
Then run 'vim -q errorfile' to edit the errors with Vim.
|
Then run 'vim -q errorfile' to edit the errors with Vim.
|
||||||
|
This uses the custom errorformat: %t:%f:%l:%m.
|
||||||
|
|
||||||
* In Vim:
|
* In Vim:
|
||||||
Edit in Vim (and save, if you don't have autowrite on), then
|
Edit in Vim (and save, if you don't have autowrite on), then
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ if !executable("ruby") || !executable("cat")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
function! SyntaxCheckers_eruby_GetLocList()
|
function! SyntaxCheckers_eruby_GetLocList()
|
||||||
if has('win32') || has('win64')
|
if has('win32')
|
||||||
let makeprg='sed "s/<\%=/<\%/g" '. shellescape(expand("%")) . ' \| ruby -e "require \"erb\"; puts ERB.new(ARGF.read, nil, \"-\").src" \| ruby -c'
|
let makeprg='sed "s/<\%=/<\%/g" '. shellescape(expand("%")) . ' \| ruby -e "require \"erb\"; puts ERB.new(ARGF.read, nil, \"-\").src" \| ruby -c'
|
||||||
else
|
else
|
||||||
let makeprg='sed "s/<\%=/<\%/g" '. shellescape(expand("%")) . ' \| RUBYOPT= ruby -e "require \"erb\"; puts ERB.new(ARGF.read, nil, \"-\").src" \| RUBYOPT= ruby -c'
|
let makeprg='sed "s/<\%=/<\%/g" '. shellescape(expand("%")) . ' \| RUBYOPT= ruby -e "require \"erb\"; puts ERB.new(ARGF.read, nil, \"-\").src" \| RUBYOPT= ruby -c'
|
||||||
|
|||||||
@@ -18,5 +18,5 @@ if exists("loaded_go_syntax_checker")
|
|||||||
endif
|
endif
|
||||||
let loaded_go_syntax_checker = 1
|
let loaded_go_syntax_checker = 1
|
||||||
|
|
||||||
let s:supported_checkers = ["6g", "gofmt"]
|
let s:supported_checkers = ["go", "6g", "gofmt"]
|
||||||
call SyntasticLoadChecker(s:supported_checkers, 'go')
|
call SyntasticLoadChecker(s:supported_checkers, 'go')
|
||||||
|
|||||||
17
bundle/git_syntastic/syntax_checkers/go/go.vim
Normal file
17
bundle/git_syntastic/syntax_checkers/go/go.vim
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
"============================================================================
|
||||||
|
"File: go.vim
|
||||||
|
"Description: Check go syntax using 'go build'
|
||||||
|
"Maintainer: Kamil Kisiel <kamil@kamilkisiel.net>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
function! SyntaxCheckers_go_GetLocList()
|
||||||
|
let makeprg = 'go build -o /dev/null'
|
||||||
|
let errorformat = '%f:%l:%c:%m,%f:%l%m,%-G#%.%#'
|
||||||
|
|
||||||
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
endfunction
|
||||||
@@ -14,73 +14,16 @@ if exists("loaded_html_syntax_checker")
|
|||||||
endif
|
endif
|
||||||
let loaded_html_syntax_checker = 1
|
let loaded_html_syntax_checker = 1
|
||||||
|
|
||||||
"bail if the user doesnt have tidy or grep installed
|
if !exists('g:syntastic_html_checker')
|
||||||
if !executable("tidy") || !executable("grep")
|
let g:syntastic_html_checker = "tidy"
|
||||||
finish
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" TODO: join this with xhtml.vim for DRY's sake?
|
if g:syntastic_html_checker == "tidy"
|
||||||
function! s:TidyEncOptByFenc()
|
if executable("tidy") && executable("grep")
|
||||||
let tidy_opts = {
|
runtime! syntax_checkers/html/tidy.vim
|
||||||
\'utf-8' : '-utf8',
|
|
||||||
\'ascii' : '-ascii',
|
|
||||||
\'latin1' : '-latin1',
|
|
||||||
\'iso-2022-jp' : '-iso-2022',
|
|
||||||
\'cp1252' : '-win1252',
|
|
||||||
\'macroman' : '-mac',
|
|
||||||
\'utf-16le' : '-utf16le',
|
|
||||||
\'utf-16' : '-utf16',
|
|
||||||
\'big5' : '-big5',
|
|
||||||
\'sjis' : '-shiftjis',
|
|
||||||
\'cp850' : '-ibm858',
|
|
||||||
\}
|
|
||||||
return get(tidy_opts, &fileencoding, '-utf8')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
let s:ignore_html_errors = [
|
|
||||||
\ "<table> lacks \"summary\" attribute",
|
|
||||||
\ "not approved by W3C",
|
|
||||||
\ "attribute \"placeholder\"",
|
|
||||||
\ "<meta> proprietary attribute \"charset\"",
|
|
||||||
\ "<meta> lacks \"content\" attribute",
|
|
||||||
\ "inserting \"type\" attribute",
|
|
||||||
\ "proprietary attribute \"data-"
|
|
||||||
\]
|
|
||||||
|
|
||||||
function! s:ValidateError(text)
|
|
||||||
let valid = 0
|
|
||||||
for i in s:ignore_html_errors
|
|
||||||
if stridx(a:text, i) != -1
|
|
||||||
let valid = 1
|
|
||||||
break
|
|
||||||
endif
|
endif
|
||||||
endfor
|
elseif g:syntastic_html_checker == "w3"
|
||||||
return valid
|
if executable("curl") && executable("sed")
|
||||||
endfunction
|
runtime! syntax_checkers/html/w3.vim
|
||||||
|
|
||||||
|
|
||||||
function! SyntaxCheckers_html_GetLocList()
|
|
||||||
|
|
||||||
let encopt = s:TidyEncOptByFenc()
|
|
||||||
let makeprg="tidy ".encopt." --new-blocklevel-tags ".shellescape('section, article, aside, hgroup, header, footer, nav, figure, figcaption')." --new-inline-tags ".shellescape('video, audio, embed, mark, progress, meter, time, ruby, rt, rp, canvas, command, details, datalist')." --new-empty-tags ".shellescape('wbr, keygen')." -e ".shellescape(expand('%'))." 2>&1"
|
|
||||||
let errorformat='%Wline %l column %c - Warning: %m,%Eline %l column %c - Error: %m,%-G%.%#,%-G%.%#'
|
|
||||||
let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
|
||||||
|
|
||||||
" process loclist since we need to add some info and filter out valid HTML5
|
|
||||||
" from the errors
|
|
||||||
let n = len(loclist) - 1
|
|
||||||
let bufnum = bufnr("")
|
|
||||||
while n >= 0
|
|
||||||
let i = loclist[n]
|
|
||||||
" filter out valid HTML5
|
|
||||||
if s:ValidateError(i['text']) == 1
|
|
||||||
unlet loclist[n]
|
|
||||||
else
|
|
||||||
"the file name isnt in the output so stick in the buf num manually
|
|
||||||
let i['bufnr'] = bufnum
|
|
||||||
endif
|
endif
|
||||||
let n -= 1
|
endif
|
||||||
endwhile
|
|
||||||
|
|
||||||
return loclist
|
|
||||||
endfunction
|
|
||||||
|
|||||||
74
bundle/git_syntastic/syntax_checkers/html/tidy.vim
Normal file
74
bundle/git_syntastic/syntax_checkers/html/tidy.vim
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
"============================================================================
|
||||||
|
"File: tidy.vim
|
||||||
|
"Description: Syntax checking plugin for syntastic.vim
|
||||||
|
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
" TODO: join this with xhtml.vim for DRY's sake?
|
||||||
|
function! s:TidyEncOptByFenc()
|
||||||
|
let tidy_opts = {
|
||||||
|
\'utf-8' : '-utf8',
|
||||||
|
\'ascii' : '-ascii',
|
||||||
|
\'latin1' : '-latin1',
|
||||||
|
\'iso-2022-jp' : '-iso-2022',
|
||||||
|
\'cp1252' : '-win1252',
|
||||||
|
\'macroman' : '-mac',
|
||||||
|
\'utf-16le' : '-utf16le',
|
||||||
|
\'utf-16' : '-utf16',
|
||||||
|
\'big5' : '-big5',
|
||||||
|
\'sjis' : '-shiftjis',
|
||||||
|
\'cp850' : '-ibm858',
|
||||||
|
\}
|
||||||
|
return get(tidy_opts, &fileencoding, '-utf8')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:ignore_html_errors = [
|
||||||
|
\ "<table> lacks \"summary\" attribute",
|
||||||
|
\ "not approved by W3C",
|
||||||
|
\ "attribute \"placeholder\"",
|
||||||
|
\ "<meta> proprietary attribute \"charset\"",
|
||||||
|
\ "<meta> lacks \"content\" attribute",
|
||||||
|
\ "inserting \"type\" attribute",
|
||||||
|
\ "proprietary attribute \"data-"
|
||||||
|
\]
|
||||||
|
|
||||||
|
function! s:ValidateError(text)
|
||||||
|
let valid = 0
|
||||||
|
for i in s:ignore_html_errors
|
||||||
|
if stridx(a:text, i) != -1
|
||||||
|
let valid = 1
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return valid
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! SyntaxCheckers_html_GetLocList()
|
||||||
|
let encopt = s:TidyEncOptByFenc()
|
||||||
|
let makeprg="tidy ".encopt." --new-blocklevel-tags ".shellescape('section, article, aside, hgroup, header, footer, nav, figure, figcaption')." --new-inline-tags ".shellescape('video, audio, embed, mark, progress, meter, time, ruby, rt, rp, canvas, command, details, datalist')." --new-empty-tags ".shellescape('wbr, keygen')." -e ".shellescape(expand('%'))." 2>&1"
|
||||||
|
let errorformat='%Wline %l column %c - Warning: %m,%Eline %l column %c - Error: %m,%-G%.%#,%-G%.%#'
|
||||||
|
let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
|
||||||
|
" process loclist since we need to add some info and filter out valid HTML5
|
||||||
|
" from the errors
|
||||||
|
let n = len(loclist) - 1
|
||||||
|
let bufnum = bufnr("")
|
||||||
|
while n >= 0
|
||||||
|
let i = loclist[n]
|
||||||
|
" filter out valid HTML5
|
||||||
|
if s:ValidateError(i['text']) == 1
|
||||||
|
unlet loclist[n]
|
||||||
|
else
|
||||||
|
"the file name isnt in the output so stick in the buf num manually
|
||||||
|
let i['bufnr'] = bufnum
|
||||||
|
endif
|
||||||
|
let n -= 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return loclist
|
||||||
|
endfunction
|
||||||
32
bundle/git_syntastic/syntax_checkers/html/w3.vim
Normal file
32
bundle/git_syntastic/syntax_checkers/html/w3.vim
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
"============================================================================
|
||||||
|
"File: w3.vim
|
||||||
|
"Description: Syntax checking plugin for syntastic.vim
|
||||||
|
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
function! SyntaxCheckers_html_GetLocList()
|
||||||
|
let makeprg2="curl -s -F output=text -F \"uploaded_file=@".expand('%:p').";type=text/html\" http://validator.w3.org/check \\| sed -n -e '/\<em\>Line\.\*/ \{ N; s/\\n//; N; s/\\n//; /msg/p; \}' -e ''/msg_warn/p'' -e ''/msg_info/p'' \\| sed -e 's/[ ]\\+/ /g' -e 's/\<[\^\>]\*\>//g' -e 's/\^[ ]//g'"
|
||||||
|
let errorformat2='Line %l\, Column %c: %m'
|
||||||
|
let loclist = SyntasticMake({ 'makeprg': makeprg2, 'errorformat': errorformat2 })
|
||||||
|
|
||||||
|
let n = len(loclist) - 1
|
||||||
|
let bufnum = bufnr("")
|
||||||
|
while n >= 0
|
||||||
|
let i = loclist[n]
|
||||||
|
let i['bufnr'] = bufnum
|
||||||
|
|
||||||
|
if i['lnum'] == 0
|
||||||
|
let i['type'] = 'w'
|
||||||
|
else
|
||||||
|
let i['type'] = 'e'
|
||||||
|
endif
|
||||||
|
let n -= 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return loclist
|
||||||
|
endfunction
|
||||||
28
bundle/git_syntastic/syntax_checkers/java.vim
Normal file
28
bundle/git_syntastic/syntax_checkers/java.vim
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
"============================================================================
|
||||||
|
"File: java.vim
|
||||||
|
"Description: Syntax checking plugin for syntastic.vim
|
||||||
|
"Maintainer: Jochen Keil <jochen.keil at gmail dot com>
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
function! SyntaxCheckers_java_GetLocList()
|
||||||
|
|
||||||
|
let makeprg = 'javac -Xlint '
|
||||||
|
\. expand ( '%:p:h' ) . '/' . expand ( '%:t' )
|
||||||
|
\. ' 2>&1 \| '
|
||||||
|
\. 'sed -e "s\|'
|
||||||
|
\. expand ( '%:t' )
|
||||||
|
\. '\|'
|
||||||
|
\. expand ( '%:p:h' ) . '/' . expand ( '%:t' )
|
||||||
|
\. '\|"'
|
||||||
|
|
||||||
|
" unashamedly stolen from *errorformat-javac* (quickfix.txt)
|
||||||
|
let errorformat = '%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#'
|
||||||
|
|
||||||
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
|
||||||
|
endfunction
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
"============================================================================
|
"============================================================================
|
||||||
"File: perl.vim
|
"File: perl.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic.vim
|
||||||
"Maintainer: Anthony Carapetis <anthony.carapetis at gmail dot com>
|
"Maintainer: Anthony Carapetis <anthony.carapetis at gmail dot com>,
|
||||||
|
" Eric Harmon <http://eharmon.net>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
" it and/or modify it under the terms of the Do What The Fuck You
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
@@ -19,11 +20,12 @@ if !executable("perl")
|
|||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:checker = 'perl ' . shellescape(expand('<sfile>:p:h') . '/efm_perl.pl') . ' -c'
|
"remove '-w' switch to change all warnings to errors
|
||||||
|
let s:checker = 'perl ' . shellescape(expand('<sfile>:p:h') . '/efm_perl.pl') . ' -c -w'
|
||||||
|
|
||||||
function! SyntaxCheckers_perl_GetLocList()
|
function! SyntaxCheckers_perl_GetLocList()
|
||||||
let makeprg = s:checker . ' ' . shellescape(expand('%'))
|
let makeprg = s:checker . ' ' . shellescape(expand('%'))
|
||||||
let errorformat = '%f:%l:%m'
|
let errorformat = '%t:%f:%l:%m'
|
||||||
|
|
||||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ function! SyntaxCheckers_php_GetLocList()
|
|||||||
let errors = []
|
let errors = []
|
||||||
|
|
||||||
let makeprg = "php -l -d error_reporting=E_ALL -d display_errors=0 -d error_log='' ".shellescape(expand('%'))
|
let makeprg = "php -l -d error_reporting=E_ALL -d display_errors=0 -d error_log='' ".shellescape(expand('%'))
|
||||||
let errorformat='%-GNo syntax errors detected in%.%#,PHP Parse error: %#syntax %trror\, %m in %f on line %l,PHP Fatal %trror: %m in %f on line %l,%-GErrors parsing %.%#,%-G\s%#,Parse error: %#syntax %trror\, %m in %f on line %l,Fatal %trror: %m in %f on line %l'
|
let errorformat='%-GNo syntax errors detected in%.%#,PHP Parse error: %#syntax %trror\, %m in %f on line %l,PHP Fatal %trror: %m in %f on line %l,%-GErrors parsing %.%#,%-G\s%#,Parse error: %#syntax %trror\, %m in %f on line %l,Fatal %trror: %m in %f on line %l,PHP Parse %trror: %m in %f on line %l'
|
||||||
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
|
||||||
if empty(errors) && !g:syntastic_phpcs_disable && executable("phpcs")
|
if empty(errors) && !g:syntastic_phpcs_disable && executable("phpcs")
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ if !exists("g:syntastic_puppet_lint_disable")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if !executable("puppet-lint")
|
if !executable("puppet-lint")
|
||||||
let g:syntastic_puppet_lint_disable = 0
|
let g:syntastic_puppet_lint_disable = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:PuppetExtractVersion()
|
function! s:PuppetExtractVersion()
|
||||||
@@ -44,11 +44,15 @@ let s:puppetVersion = s:PuppetExtractVersion()
|
|||||||
let s:lintVersion = s:PuppetLintExtractVersion()
|
let s:lintVersion = s:PuppetLintExtractVersion()
|
||||||
|
|
||||||
if !(s:lintVersion[0] >= '0' && s:lintVersion[1] >= '1' && s:lintVersion[2] >= '10')
|
if !(s:lintVersion[0] >= '0' && s:lintVersion[1] >= '1' && s:lintVersion[2] >= '10')
|
||||||
let g:syntastic_puppet_lint_disable = 0
|
let g:syntastic_puppet_lint_disable = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:getPuppetLintErrors()
|
function! s:getPuppetLintErrors()
|
||||||
let makeprg = 'puppet-lint --log-format "\%{KIND} [\%{check}] \%{message} at \%{fullpath}:\%{linenumber}" '.shellescape(expand('%'))
|
if !exists("g:syntastic_puppet_lint_arguments")
|
||||||
|
let g:syntastic_puppet_lint_arguments = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
let makeprg = 'puppet-lint --log-format "\%{KIND} [\%{check}] \%{message} at \%{fullpath}:\%{linenumber}" '.g:syntastic_puppet_lint_arguments.shellescape(expand('%'))
|
||||||
let errorformat = '%t%*[a-zA-Z] %m at %f:%l'
|
let errorformat = '%t%*[a-zA-Z] %m at %f:%l'
|
||||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'subtype': 'Style' })
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'subtype': 'Style' })
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -6,9 +6,6 @@
|
|||||||
"
|
"
|
||||||
"============================================================================
|
"============================================================================
|
||||||
function! SyntaxCheckers_python_GetHighlightRegex(i)
|
function! SyntaxCheckers_python_GetHighlightRegex(i)
|
||||||
if a:i['type'] ==# 'E'
|
|
||||||
let a:i['text'] = "Syntax error"
|
|
||||||
endif
|
|
||||||
if match(a:i['text'], 'is assigned to but never used') > -1
|
if match(a:i['text'], 'is assigned to but never used') > -1
|
||||||
\ || match(a:i['text'], 'imported but unused') > -1
|
\ || match(a:i['text'], 'imported but unused') > -1
|
||||||
\ || match(a:i['text'], 'undefined name') > -1
|
\ || match(a:i['text'], 'undefined name') > -1
|
||||||
|
|||||||
15
bundle/git_syntastic/syntax_checkers/ruby/macruby.vim
Normal file
15
bundle/git_syntastic/syntax_checkers/ruby/macruby.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
"============================================================================
|
||||||
|
"File: macruby.vim
|
||||||
|
"Description: Syntax checking plugin for syntastic.vim
|
||||||
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
" it and/or modify it under the terms of the Do What The Fuck You
|
||||||
|
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||||
|
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
"
|
||||||
|
"============================================================================
|
||||||
|
function! SyntaxCheckers_ruby_GetLocList()
|
||||||
|
let makeprg = 'RUBYOPT= macruby -W1 -c '.shellescape(expand('%'))
|
||||||
|
let errorformat = '%-GSyntax OK,%E%f:%l: syntax error\, %m,%Z%p^,%W%f:%l: warning: %m,%Z%p^,%W%f:%l: %m,%-C%.%#'
|
||||||
|
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
endfunction
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
"============================================================================
|
"============================================================================
|
||||||
function! SyntaxCheckers_ruby_GetLocList()
|
function! SyntaxCheckers_ruby_GetLocList()
|
||||||
" we cannot set RUBYOPT on windows like that
|
" we cannot set RUBYOPT on windows like that
|
||||||
if has('win32') || has('win64')
|
if has('win32')
|
||||||
let makeprg = 'ruby -W1 -T1 -c '.shellescape(expand('%'))
|
let makeprg = 'ruby -W1 -T1 -c '.shellescape(expand('%'))
|
||||||
else
|
else
|
||||||
let makeprg = 'RUBYOPT= ruby -W1 -c '.shellescape(expand('%'))
|
let makeprg = 'RUBYOPT= ruby -W1 -c '.shellescape(expand('%'))
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ if executable("compass")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
function! SyntaxCheckers_sass_GetLocList()
|
function! SyntaxCheckers_sass_GetLocList()
|
||||||
let makeprg='sass '.s:imports.' --check '.shellescape(expand('%'))
|
let makeprg='sass --no-cache '.s:imports.' --check '.shellescape(expand('%'))
|
||||||
let errorformat = '%ESyntax %trror:%m,%C on line %l of %f,%Z%.%#'
|
let errorformat = '%ESyntax %trror:%m,%C on line %l of %f,%Z%.%#'
|
||||||
let errorformat .= ',%Wwarning on line %l:,%Z%m,Syntax %trror on line %l: %m'
|
let errorformat .= ',%Wwarning on line %l:,%Z%m,Syntax %trror on line %l: %m'
|
||||||
let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
let loclist = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||||
|
|||||||
4
bundle/git_tagbar/.gitattributes
vendored
Normal file
4
bundle/git_tagbar/.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.gitignore export-ignore
|
||||||
|
.gitattributes export-ignore
|
||||||
|
README export-ignore
|
||||||
|
.info export-ignore
|
||||||
1
bundle/git_tagbar/.gitignore
vendored
Normal file
1
bundle/git_tagbar/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/doc/tags
|
||||||
2
bundle/git_tagbar/.info
Normal file
2
bundle/git_tagbar/.info
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
tagbar
|
||||||
|
3465
|
||||||
7
bundle/git_tagbar/README
Normal file
7
bundle/git_tagbar/README
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Tagbar is a vim plugin for browsing the tags of source code files. It provides
|
||||||
|
a sidebar that displays the ctags-generated tags of the current file, ordered
|
||||||
|
by their scope. This means that for example methods in C++ are displayed under
|
||||||
|
the class they are defined in.
|
||||||
|
|
||||||
|
Check out the homepage at http://majutsushi.github.com/tagbar/ for more
|
||||||
|
information.
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
|||||||
*tagbar.txt* Display tags of a file in their correct scope
|
*tagbar.txt* Display tags of a file ordered by scope
|
||||||
|
|
||||||
Author: Jan Larres <jan@majutsushi.net>
|
Author: Jan Larres <jan@majutsushi.net>
|
||||||
Licence: Vim licence, see |license|
|
Licence: Vim licence, see |license|
|
||||||
Homepage: http://majutsushi.github.com/tagbar/
|
Homepage: http://majutsushi.github.com/tagbar/
|
||||||
Version: 2.3
|
Version: 2.4
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Contents *tagbar* *tagbar-contents*
|
Contents *tagbar* *tagbar-contents*
|
||||||
@@ -20,6 +20,7 @@ Contents *tagbar* *tagbar-contents*
|
|||||||
5. Configuration ................... |tagbar-configuration|
|
5. Configuration ................... |tagbar-configuration|
|
||||||
Highlight colours ............. |tagbar-highlight|
|
Highlight colours ............. |tagbar-highlight|
|
||||||
Automatically opening Tagbar .. |tagbar-autoopen|
|
Automatically opening Tagbar .. |tagbar-autoopen|
|
||||||
|
Show current tag in statusline |tagbar-statusline|
|
||||||
6. Extending Tagbar ................ |tagbar-extend|
|
6. Extending Tagbar ................ |tagbar-extend|
|
||||||
7. Troubleshooting & Known issues .. |tagbar-issues|
|
7. Troubleshooting & Known issues .. |tagbar-issues|
|
||||||
8. History ......................... |tagbar-history|
|
8. History ......................... |tagbar-history|
|
||||||
@@ -152,8 +153,7 @@ Use the normal Vimball install method for installing tagbar.vba:
|
|||||||
:q
|
:q
|
||||||
<
|
<
|
||||||
Alternatively you can clone the git repository and then add the path to
|
Alternatively you can clone the git repository and then add the path to
|
||||||
'runtimepath' or use the pathogen plugin. Don't forget to run |:helptags| if
|
'runtimepath' or use the pathogen plugin. Don't forget to run |:helptags|.
|
||||||
you're not using pathogen.
|
|
||||||
|
|
||||||
If the ctags executable is not installed in one of the directories in your
|
If the ctags executable is not installed in one of the directories in your
|
||||||
$PATH environment variable you have to set the g:tagbar_ctags_bin variable,
|
$PATH environment variable you have to set the g:tagbar_ctags_bin variable,
|
||||||
@@ -184,7 +184,7 @@ closed. By default the window is opened on the right side, set the option
|
|||||||
|:TagbarClose| will simply close the window if it is open.
|
|:TagbarClose| will simply close the window if it is open.
|
||||||
|
|
||||||
It is probably a good idea to assign a key to these commands. For example, put
|
It is probably a good idea to assign a key to these commands. For example, put
|
||||||
this in your |vimrc|:
|
this into your |vimrc|:
|
||||||
>
|
>
|
||||||
nnoremap <silent> <F9> :TagbarToggle<CR>
|
nnoremap <silent> <F9> :TagbarToggle<CR>
|
||||||
<
|
<
|
||||||
@@ -206,7 +206,7 @@ order. Sorting them by name simply displays the tags in their alphabetical
|
|||||||
order under their corresponding scope. Sorting by file order means that the
|
order under their corresponding scope. Sorting by file order means that the
|
||||||
tags keep the order they have in the source file, but are still associated
|
tags keep the order they have in the source file, but are still associated
|
||||||
with the correct scope. You can change the sort order by pressing the "s" key
|
with the correct scope. You can change the sort order by pressing the "s" key
|
||||||
in the Tagbar window. The current sort order is displayed in the statusbar of
|
in the Tagbar window. The current sort order is displayed in the statusline of
|
||||||
the Tagbar window.
|
the Tagbar window.
|
||||||
|
|
||||||
Folding~
|
Folding~
|
||||||
@@ -214,6 +214,13 @@ The displayed scopes (and unscoped types) can be folded to hide uninteresting
|
|||||||
information. Mappings similar to Vim's built-in ones are provided. Folds can
|
information. Mappings similar to Vim's built-in ones are provided. Folds can
|
||||||
also be opened and closed by clicking on the fold icon with the mouse.
|
also be opened and closed by clicking on the fold icon with the mouse.
|
||||||
|
|
||||||
|
Highlighting the current tag~
|
||||||
|
When the Tagbar window is open the current tag will automatically be
|
||||||
|
highlighted in it after a short pause if the cursor is not moving. The length
|
||||||
|
of this pause is determined by the 'updatetime' option. If you want to make
|
||||||
|
that pause shorter you can change the option, but don't set it too low or
|
||||||
|
strange things will happen. This is unfortunately unavoidable.
|
||||||
|
|
||||||
Displaying the prototype of a tag~
|
Displaying the prototype of a tag~
|
||||||
Tagbar can display the prototype of a tag. More precisely it can display the
|
Tagbar can display the prototype of a tag. More precisely it can display the
|
||||||
line in which the tag is defined. This can be done by either pressing <Space>
|
line in which the tag is defined. This can be done by either pressing <Space>
|
||||||
@@ -225,7 +232,7 @@ displayed when the cursor stays on a tag for 'updatetime' milliseconds.
|
|||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
COMMANDS *tagbar-commands*
|
COMMANDS *tagbar-commands*
|
||||||
|
|
||||||
:TagbarOpen [{flags}]
|
:TagbarOpen [{flags}] *:TagbarOpen*
|
||||||
Open the Tagbar window if it is closed.
|
Open the Tagbar window if it is closed.
|
||||||
|
|
||||||
Additional behaviour can be specified with the optional {flags} argument.
|
Additional behaviour can be specified with the optional {flags} argument.
|
||||||
@@ -241,31 +248,41 @@ COMMANDS *tagbar-commands*
|
|||||||
(unless |g:tagbar_autoclose| is set): >
|
(unless |g:tagbar_autoclose| is set): >
|
||||||
:TagbarOpen fj
|
:TagbarOpen fj
|
||||||
<
|
<
|
||||||
:TagbarClose
|
:TagbarClose *:TagbarClose*
|
||||||
Close the Tagbar window if it is open.
|
Close the Tagbar window if it is open.
|
||||||
|
|
||||||
:TagbarToggle
|
:TagbarToggle *:TagbarToggle*
|
||||||
Open the Tagbar window if it is closed or close it if it is open.
|
Open the Tagbar window if it is closed or close it if it is open.
|
||||||
|
|
||||||
:TagbarOpenAutoClose
|
:TagbarOpenAutoClose *:TagbarOpenAutoClose*
|
||||||
Open the Tagbar window, jump to it and close it on tag selection. This is
|
Open the Tagbar window, jump to it and close it on tag selection. This is
|
||||||
an alias for ":TagbarOpen fc".
|
an alias for ":TagbarOpen fc".
|
||||||
|
|
||||||
:TagbarSetFoldlevel {number}
|
:TagbarSetFoldlevel[!] {number} *:TagbarSetFoldlevel*
|
||||||
Set the foldlevel of the tags of the current file to {number}. The
|
Set the foldlevel of the tags of the current file to {number}. The
|
||||||
foldlevel of tags in other files remains unaffected. Works in the same way
|
foldlevel of tags in other files remains unaffected. Works in the same way
|
||||||
as 'foldlevel'.
|
as 'foldlevel'. Folds that are specified to be closed by default in the
|
||||||
|
type configuration will not be opened, use a "!" to force applying the new
|
||||||
|
foldlevel to those folds as well.
|
||||||
|
|
||||||
:TagbarShowTag
|
:TagbarShowTag *:TagbarShowTag*
|
||||||
Open the parent folds of the current tag in the file window as much as
|
Open the parent folds of the current tag in the file window as much as
|
||||||
needed for the tag to be visible in the Tagbar window.
|
needed for the tag to be visible in the Tagbar window.
|
||||||
|
|
||||||
:TagbarDebug [logfile]
|
:TagbarGetTypeConfig {filetype} *:TagbarGetTypeConfig*
|
||||||
|
Paste the Tagbar configuration of the vim filetype {filetype} at the
|
||||||
|
current cursor position (provided that filetype is supported by Tagbar)
|
||||||
|
for easy customization. The configuration will be ready to use as is but
|
||||||
|
will only contain the "kinds" entry as that is the only one that really
|
||||||
|
makes sense to customize. See |tagbar-extend| for more information about
|
||||||
|
type configurations.
|
||||||
|
|
||||||
|
:TagbarDebug [logfile] *:TagbarDebug*
|
||||||
Start debug mode. This will write debug messages to file [logfile] while
|
Start debug mode. This will write debug messages to file [logfile] while
|
||||||
using Tagbar. If no argument is given "tagbardebug.log" in the current
|
using Tagbar. If no argument is given "tagbardebug.log" in the current
|
||||||
directory is used. Note: an existing file will be overwritten!
|
directory is used. Note: an existing file will be overwritten!
|
||||||
|
|
||||||
:TagbarDebugEnd
|
:TagbarDebugEnd *:TagbarDebugEnd*
|
||||||
End debug mode, debug messages will no longer be written to the logfile.
|
End debug mode, debug messages will no longer be written to the logfile.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@@ -413,8 +430,8 @@ Example:
|
|||||||
g:tagbar_foldlevel~
|
g:tagbar_foldlevel~
|
||||||
Default: 99
|
Default: 99
|
||||||
|
|
||||||
The initial foldlevel for folds in the Tagbar window. Fold with a level higher
|
The initial foldlevel for folds in the Tagbar window. Folds with a level
|
||||||
than this number will be closed.
|
higher than this number will be closed.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
>
|
>
|
||||||
@@ -430,8 +447,8 @@ fonts. With this variable you can set the icons to characters of your liking.
|
|||||||
The first character in the list specifies the icon to use for a closed fold,
|
The first character in the list specifies the icon to use for a closed fold,
|
||||||
and the second one for an open fold.
|
and the second one for an open fold.
|
||||||
|
|
||||||
Examples (don't worry if some the characters aren't displayed correctly, just
|
Examples (don't worry if some of the characters aren't displayed correctly,
|
||||||
choose other characters in that case):
|
just choose other characters in that case):
|
||||||
>
|
>
|
||||||
let g:tagbar_iconchars = ['▶', '▼'] (default on Linux and Mac OS X)
|
let g:tagbar_iconchars = ['▶', '▼'] (default on Linux and Mac OS X)
|
||||||
let g:tagbar_iconchars = ['▾', '▸']
|
let g:tagbar_iconchars = ['▾', '▸']
|
||||||
@@ -446,8 +463,8 @@ Default: 0
|
|||||||
If this variable is set and the current tag is inside of a closed fold then
|
If this variable is set and the current tag is inside of a closed fold then
|
||||||
the folds will be opened as much as needed for the tag to be visible so it can
|
the folds will be opened as much as needed for the tag to be visible so it can
|
||||||
be highlighted. If it is not set then the folds won't be opened and the parent
|
be highlighted. If it is not set then the folds won't be opened and the parent
|
||||||
tag will be highlighted instead. You can use the TagbarShowTag command to open
|
tag will be highlighted instead. You can use the |:TagbarShowTag| command to
|
||||||
the folds manually.
|
open the folds manually.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
>
|
>
|
||||||
@@ -540,7 +557,11 @@ AUTOMATICALLY OPENING TAGBAR *tagbar-autoopen*
|
|||||||
Since there are several different situations in which you might want to open
|
Since there are several different situations in which you might want to open
|
||||||
Tagbar automatically there is no single option to enable automatic opening.
|
Tagbar automatically there is no single option to enable automatic opening.
|
||||||
Instead, autocommands can be used together with a convenience function that
|
Instead, autocommands can be used together with a convenience function that
|
||||||
opens Tagbar only if a supported file is open(ed).
|
opens Tagbar only if a supported file is open(ed). It has a boolean parameter
|
||||||
|
that specifies whether Tagbar should be opened if any loaded buffer is
|
||||||
|
supported (in case the parameter is set to true) or only if a supported
|
||||||
|
file/buffer is currently being shown in a window. This can be useful if you
|
||||||
|
use multiple tabs and don't edit supported files in all of them.
|
||||||
|
|
||||||
If you want to open Tagbar automatically on Vim startup no matter what put
|
If you want to open Tagbar automatically on Vim startup no matter what put
|
||||||
this into your vimrc:
|
this into your vimrc:
|
||||||
@@ -550,29 +571,84 @@ this into your vimrc:
|
|||||||
If you want to open it only if you're opening Vim with a supported file/files
|
If you want to open it only if you're opening Vim with a supported file/files
|
||||||
use this instead:
|
use this instead:
|
||||||
>
|
>
|
||||||
autocmd VimEnter * nested :call tagbar#autoopen()
|
autocmd VimEnter * nested :call tagbar#autoopen(1)
|
||||||
<
|
<
|
||||||
|
The above is exactly what the Taglist plugin does if you set the
|
||||||
|
Tlist_Auto_Open option, in case you want to emulate this behaviour.
|
||||||
|
|
||||||
For opening Tagbar also if you open a supported file in an already running
|
For opening Tagbar also if you open a supported file in an already running
|
||||||
Vim:
|
Vim:
|
||||||
>
|
>
|
||||||
autocmd FileType * nested :call tagbar#autoopen()
|
autocmd FileType * nested :call tagbar#autoopen(0)
|
||||||
<
|
<
|
||||||
And if you only want to open Tagbar only for specific filetypes, not for all
|
If you use multiple tabs and want Tagbar to also open in the current tab when
|
||||||
of the supported ones:
|
you switch to an already loaded, supported buffer:
|
||||||
|
>
|
||||||
|
autocmd BufEnter * nested :call tagbar#autoopen(0)
|
||||||
|
<
|
||||||
|
And if you want to open Tagbar only for specific filetypes, not for all of the
|
||||||
|
supported ones:
|
||||||
>
|
>
|
||||||
autocmd FileType c,cpp nested :TagbarOpen
|
autocmd FileType c,cpp nested :TagbarOpen
|
||||||
<
|
<
|
||||||
Check out |autocmd.txt| if you want it to open automatically in more
|
Check out |autocmd.txt| if you want it to open automatically in more
|
||||||
complicated cases.
|
complicated cases.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
SHOWING THE CURRENT TAG IN THE STATUSLINE *tagbar-statusline*
|
||||||
|
|
||||||
|
You can show the current tag in the 'statusline', or in any other place that
|
||||||
|
you want to, by calling the tagbar#currenttag() function. The current tag is
|
||||||
|
exactly the same as would be highlighted in the Tagbar window if it is open.
|
||||||
|
It is defined as the nearest tag upwards in the file starting from the cursor
|
||||||
|
position. This means that for example in a function it should usually be the
|
||||||
|
name of the function.
|
||||||
|
|
||||||
|
The function has the following signature:
|
||||||
|
|
||||||
|
tagbar#currenttag({format}, {default} [, {flags}])
|
||||||
|
{format} is a |printf()|-compatible format string where "%s" will be
|
||||||
|
replaced by the name of the tag. {default} will be displayed instead of
|
||||||
|
the format string if no tag can be found.
|
||||||
|
|
||||||
|
The optional {flags} argument specifies some additional properties of the
|
||||||
|
displayed tags. It is a string which can contain these character flags:
|
||||||
|
'f' Display the full hierarchy of the tag, not just the tag itself.
|
||||||
|
's' If the tag is a function, the complete signature will be shown,
|
||||||
|
otherwise just "()" will be appended to distinguish functions from
|
||||||
|
other tags.
|
||||||
|
|
||||||
|
For example, if you put the following into your statusline: >
|
||||||
|
%{tagbar#currenttag('[%s] ', '')}
|
||||||
|
< then the function "myfunc" will be show as "[myfunc()] ".
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
6. Extending Tagbar *tagbar-extend*
|
6. Extending Tagbar *tagbar-extend*
|
||||||
|
|
||||||
Tagbar has a flexible mechanism for extending the existing file type (i.e.
|
Tagbar has a flexible mechanism for extending the existing file type (i.e.
|
||||||
language) definitions. This can be used both to change the settings of the
|
language) definitions. This can be used both to change the settings of the
|
||||||
existing types and to add completely new types. A complete configuration
|
existing types and to add completely new types. For Tagbar to support a
|
||||||
consists of a type definition for Tagbar in your |vimrc| and optionally a
|
filetype two things are needed: a program that generates the tag information,
|
||||||
language definition for ctags in case you want to add a new language.
|
usually Exuberant Ctags, and a Tagbar type definition in your |vimrc| or an
|
||||||
|
|ftplugin| that tells Tagbar how to interpret the generated tags.
|
||||||
|
|
||||||
|
Note: if you only want to customize an existing definition (like changing the
|
||||||
|
order in which tag kinds are displayed) see "Changing an existing definition"
|
||||||
|
below.
|
||||||
|
|
||||||
|
There are two ways to generate the tag information for new filetypes: add a
|
||||||
|
definition to Exuberant Ctags or create a specialized program for your
|
||||||
|
language that generates ctags-compatible tag information (see
|
||||||
|
|tags-file-format| for information about how a "tags" file is structured). The
|
||||||
|
former allows simple regular expression-based parsing that is easy to get
|
||||||
|
started with, but doesn't support scopes unless you instead want to write a
|
||||||
|
C-based parser module for Exuberant Ctags. The regex approach is described in
|
||||||
|
more detail below.
|
||||||
|
Writing your own program is the approach used by for example jsctags and can
|
||||||
|
be useful if your language can best be parsed by a program written in the
|
||||||
|
language itself, or if you want to provide the program as part of a complete
|
||||||
|
support package for the language. Some tips on how to write such a program are
|
||||||
|
given at the end of this section.
|
||||||
|
|
||||||
Before writing your own extension have a look at the wiki
|
Before writing your own extension have a look at the wiki
|
||||||
(https://github.com/majutsushi/tagbar/wiki/Support-for-additional-filetypes)
|
(https://github.com/majutsushi/tagbar/wiki/Support-for-additional-filetypes)
|
||||||
@@ -591,18 +667,26 @@ kinds: A list of the "language kinds" that should be listed in Tagbar,
|
|||||||
Use the command >
|
Use the command >
|
||||||
ctags --list-kinds={language name}
|
ctags --list-kinds={language name}
|
||||||
< to get a list of the kinds ctags supports for a given language. An
|
< to get a list of the kinds ctags supports for a given language. An
|
||||||
entry in this list is a string with two or three parts separated
|
entry in this list is a colon-separated string with the following
|
||||||
by a colon: the first part is the one-character abbreviation that
|
syntax: >
|
||||||
ctags uses, and the second part is an arbitrary string that will
|
{short}:{long}[:{fold}[:{stl}]]
|
||||||
be used in Tagbar as the header for the tags of this kind that are
|
< {short} is the one-character abbreviation that ctags uses, and
|
||||||
not listed under a specific scope. The optional third part
|
{long} is an arbitrary string that will be used in Tagbar as the
|
||||||
determines whether tags of this kind should be folded by default,
|
header for the the tags of this kind that are not listed under a
|
||||||
with 1 meaning they should be folded and 0 they should not. If
|
specific scope. {fold} determines whether tags of this kind should
|
||||||
this part is omitted the tags will not be folded by default. For
|
be folded by default, with 1 meaning they should be folded and 0
|
||||||
example, the string >
|
they should not. If this part is omitted the tags will not be
|
||||||
|
folded by default. {stl} is used by the tagbar#currenttag()
|
||||||
|
function (see |tagbar-statusline|) to decide whether tags of this
|
||||||
|
kind should be shown in the statusline or not, with 1 meaning they
|
||||||
|
will be shown and 0 meaning they will be ignored. Omitting this
|
||||||
|
part means that the tags will be shown. Note that you have to
|
||||||
|
specify {fold} too if you want to specify {stl}.
|
||||||
|
For example, the string >
|
||||||
"f:functions:1"
|
"f:functions:1"
|
||||||
< would list all the function definitions in a file under the header
|
< would list all the function definitions in a file under the header
|
||||||
"functions" and fold them.
|
"functions", fold them, and implicitly show them in the statusline
|
||||||
|
if tagbar#currenttag() is used.
|
||||||
sro: The scope resolution operator. For example, in C++ it is "::" and
|
sro: The scope resolution operator. For example, in C++ it is "::" and
|
||||||
in Java it is ".". If in doubt run ctags as shown below and check
|
in Java it is ".". If in doubt run ctags as shown below and check
|
||||||
the output.
|
the output.
|
||||||
@@ -662,7 +746,8 @@ ctagsbin: The path to a filetype-specific ctags-compatible program like
|
|||||||
used automatically if found in your $PATH and does not have to be
|
used automatically if found in your $PATH and does not have to be
|
||||||
set in that case. If it is not in your path you have to set this
|
set in that case. If it is not in your path you have to set this
|
||||||
key, the rest of the configuration should not be necessary (unless
|
key, the rest of the configuration should not be necessary (unless
|
||||||
you want to change something, of course).
|
you want to change something, of course). Note: if you use this
|
||||||
|
then the "ctagstype" key is not needed.
|
||||||
ctagsargs: The arguments to be passed to the filetype-specific ctags program
|
ctagsargs: The arguments to be passed to the filetype-specific ctags program
|
||||||
{optional} (without the filename). Make sure you set an option that makes the
|
{optional} (without the filename). Make sure you set an option that makes the
|
||||||
program output its data on stdout. Not used for the normal ctags
|
program output its data on stdout. Not used for the normal ctags
|
||||||
@@ -689,18 +774,18 @@ configurations will usually be less complicated.
|
|||||||
let g:tagbar_type_cpp = {
|
let g:tagbar_type_cpp = {
|
||||||
\ 'ctagstype' : 'c++',
|
\ 'ctagstype' : 'c++',
|
||||||
\ 'kinds' : [
|
\ 'kinds' : [
|
||||||
\ 'd:macros:1',
|
\ 'd:macros:1:0',
|
||||||
\ 'p:prototypes:1',
|
\ 'p:prototypes:1:0',
|
||||||
\ 'g:enums',
|
\ 'g:enums',
|
||||||
\ 'e:enumerators',
|
\ 'e:enumerators:0:0',
|
||||||
\ 't:typedefs',
|
\ 't:typedefs:0:0',
|
||||||
\ 'n:namespaces',
|
\ 'n:namespaces',
|
||||||
\ 'c:classes',
|
\ 'c:classes',
|
||||||
\ 's:structs',
|
\ 's:structs',
|
||||||
\ 'u:unions',
|
\ 'u:unions',
|
||||||
\ 'f:functions',
|
\ 'f:functions',
|
||||||
\ 'm:members',
|
\ 'm:members:0:0',
|
||||||
\ 'v:variables'
|
\ 'v:variables:0:0'
|
||||||
\ ],
|
\ ],
|
||||||
\ 'sro' : '::',
|
\ 'sro' : '::',
|
||||||
\ 'kind2scope' : {
|
\ 'kind2scope' : {
|
||||||
@@ -724,25 +809,31 @@ Which of the keys you have to specify depends on what you want to do.
|
|||||||
|
|
||||||
Changing an existing definition~
|
Changing an existing definition~
|
||||||
If you want to change an existing definition you only need to specify the
|
If you want to change an existing definition you only need to specify the
|
||||||
parts that you want to change. It probably only makes sense to change "kinds"
|
parts that you want to change. It probably only makes sense to change "kinds",
|
||||||
and/or "scopes", which would be the case if you wanted to exclude certain
|
which would be the case if you wanted to for example change the order of
|
||||||
kinds from appearing in Tagbar or if you want to change their order. As an
|
certain kinds, change their default fold state or exclude them from appearing
|
||||||
example, if you didn't want Tagbar to show prototypes for C++ files and switch
|
in Tagbar. The easiest way to do that is to use the |:TagbarGetTypeConfig|
|
||||||
the order of enums and typedefs, you would do it like this:
|
command, which will paste a ready-to-use configuration with the "kinds" entry
|
||||||
|
for the specified type at the current cursor position.
|
||||||
|
|
||||||
|
As an example, if you didn't want Tagbar to show prototypes for C++ files,
|
||||||
|
switch the order of enums and typedefs, and show macros in the statusline, you
|
||||||
|
would first run ":TagbarGetTypeConfig cpp" in your vimrc and then change the
|
||||||
|
definition like this:
|
||||||
>
|
>
|
||||||
let g:tagbar_type_cpp = {
|
let g:tagbar_type_cpp = {
|
||||||
\ 'kinds' : [
|
\ 'kinds' : [
|
||||||
\ 'd:macros:1',
|
\ 'd:macros:1',
|
||||||
\ 'g:enums',
|
\ 'g:enums',
|
||||||
\ 't:typedefs',
|
\ 't:typedefs:0:0',
|
||||||
\ 'e:enumerators',
|
\ 'e:enumerators:0:0',
|
||||||
\ 'n:namespaces',
|
\ 'n:namespaces',
|
||||||
\ 'c:classes',
|
\ 'c:classes',
|
||||||
\ 's:structs',
|
\ 's:structs',
|
||||||
\ 'u:unions',
|
\ 'u:unions',
|
||||||
\ 'f:functions',
|
\ 'f:functions',
|
||||||
\ 'm:members',
|
\ 'm:members:0:0',
|
||||||
\ 'v:variables'
|
\ 'v:variables:0:0'
|
||||||
\ ]
|
\ ]
|
||||||
\ }
|
\ }
|
||||||
<
|
<
|
||||||
@@ -805,10 +896,10 @@ Now we have to create the Tagbar language definition in our vimrc:
|
|||||||
\ 'ctagstype' : 'latex',
|
\ 'ctagstype' : 'latex',
|
||||||
\ 'kinds' : [
|
\ 'kinds' : [
|
||||||
\ 's:sections',
|
\ 's:sections',
|
||||||
\ 'g:graphics',
|
\ 'g:graphics:0:0',
|
||||||
\ 'l:labels',
|
\ 'l:labels',
|
||||||
\ 'r:refs:1',
|
\ 'r:refs:1:0',
|
||||||
\ 'p:pagerefs:1'
|
\ 'p:pagerefs:1:0'
|
||||||
\ ],
|
\ ],
|
||||||
\ 'sort' : 0,
|
\ 'sort' : 0,
|
||||||
\ 'deffile' : expand('<sfile>:p:h:h') . '/ctags/latex.cnf'
|
\ 'deffile' : expand('<sfile>:p:h:h') . '/ctags/latex.cnf'
|
||||||
@@ -825,6 +916,35 @@ that.
|
|||||||
Tagbar should now be able to show the sections and other tags from LaTeX
|
Tagbar should now be able to show the sections and other tags from LaTeX
|
||||||
files.
|
files.
|
||||||
|
|
||||||
|
Writing your own tag-generating program~
|
||||||
|
If you want to write your own program for generating tags then here are some
|
||||||
|
imporant tips to get it to integrate well with Tagbar:
|
||||||
|
|
||||||
|
- Tagbar supports the same tag format as Vim itself. The format is described
|
||||||
|
in |tags-file-format|, the third format mentioned there is the relevant
|
||||||
|
one. Note that the {tagaddress} part should be a search pattern since the
|
||||||
|
line number can be specified in a field (see below).
|
||||||
|
- Tagbar reads the tag information from a program's standard output
|
||||||
|
(stdout), it doesn't generate files and reads them in after that. So make
|
||||||
|
sure that your program has an option to output the tags on stdout.
|
||||||
|
- Some fields are supported for providing additional information about a
|
||||||
|
tag. One field is required: the "kind" field as a single letter without
|
||||||
|
a "kind:" fieldname. This field has to be the first one in the list. All
|
||||||
|
other fields need to have a fieldname in order to determine what they are.
|
||||||
|
The following fields are supported for all filetypes:
|
||||||
|
|
||||||
|
* line: The line number of the tag
|
||||||
|
* column: The column number of the tag
|
||||||
|
* signature: The signature of a function
|
||||||
|
* access: Visibility/access information of a tag; the values
|
||||||
|
"public", "protected" and "private" will be denoted with
|
||||||
|
a special symbol in Tagbar
|
||||||
|
|
||||||
|
In addition fields that describe the surrounding scope of the tag are
|
||||||
|
supported if they are specified in the type configuration as explained at
|
||||||
|
the beginning of this section. For example, for a tag in class "Foo" this
|
||||||
|
could look like "class:Foo".
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
7. Troubleshooting & Known issues *tagbar-issues*
|
7. Troubleshooting & Known issues *tagbar-issues*
|
||||||
|
|
||||||
@@ -891,13 +1011,23 @@ file.
|
|||||||
def bar(self):
|
def bar(self):
|
||||||
pass
|
pass
|
||||||
<
|
<
|
||||||
I haven't found a clean way around this yet, but it shouldn't be much of a
|
I haven't found a proper way around this yet, but it shouldn't be much of
|
||||||
problem in practice anyway. Tags with the same name at any other level are
|
a problem in practice anyway. Tags with the same name at any other level
|
||||||
no problem, though.
|
are no problem, though.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
8. History *tagbar-history*
|
8. History *tagbar-history*
|
||||||
|
|
||||||
|
2.4 (2012-06-17)
|
||||||
|
- New function tagbar#currenttag() that reports the current tag, for
|
||||||
|
example for putting it into the statusline.
|
||||||
|
- New command TagbarGetTypeConfig for easy customization of an existing
|
||||||
|
type.
|
||||||
|
- Type definitions now can be loaded from ftplugins.
|
||||||
|
- The autoopen() function is now a bit more flexible.
|
||||||
|
- Vala is now supported if Anjuta is installed.
|
||||||
|
- Various other small improvements and bugfixes.
|
||||||
|
|
||||||
2.3 (2011-12-24)
|
2.3 (2011-12-24)
|
||||||
- Add a convenience function that allows more flexible ways to
|
- Add a convenience function that allows more flexible ways to
|
||||||
automatically open Tagbar.
|
automatically open Tagbar.
|
||||||
@@ -1006,11 +1136,13 @@ The folding technique was inspired by NERDTree by Martin Grenfell.
|
|||||||
|
|
||||||
Thanks to the following people for code contributions, feature suggestions etc:
|
Thanks to the following people for code contributions, feature suggestions etc:
|
||||||
Jan Christoph Ebersbach
|
Jan Christoph Ebersbach
|
||||||
|
Vadim Fint
|
||||||
Leandro Freitas
|
Leandro Freitas
|
||||||
Seth Milliken
|
Seth Milliken
|
||||||
Kien N
|
Kien N
|
||||||
pielgrzym
|
pielgrzym
|
||||||
Taybin Rutkin
|
Taybin Rutkin
|
||||||
|
Ville Valkonen
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim: tw=78 ts=8 sw=8 sts=8 noet ft=help
|
vim: tw=78 ts=8 sw=4 sts=4 et ft=help
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
" Author: Jan Larres <jan@majutsushi.net>
|
" Author: Jan Larres <jan@majutsushi.net>
|
||||||
" Licence: Vim licence
|
" Licence: Vim licence
|
||||||
" Website: http://majutsushi.github.com/tagbar/
|
" Website: http://majutsushi.github.com/tagbar/
|
||||||
" Version: 2.3
|
" Version: 2.4
|
||||||
" Note: This plugin was heavily inspired by the 'Taglist' plugin by
|
" Note: This plugin was heavily inspired by the 'Taglist' plugin by
|
||||||
" Yegappan Lakshmanan and uses a small amount of code from it.
|
" Yegappan Lakshmanan and uses a small amount of code from it.
|
||||||
"
|
"
|
||||||
@@ -109,8 +109,9 @@ command! -nargs=0 TagbarToggle call tagbar#ToggleWindow()
|
|||||||
command! -nargs=? TagbarOpen call tagbar#OpenWindow(<f-args>)
|
command! -nargs=? TagbarOpen call tagbar#OpenWindow(<f-args>)
|
||||||
command! -nargs=0 TagbarOpenAutoClose call tagbar#OpenWindow('fc')
|
command! -nargs=0 TagbarOpenAutoClose call tagbar#OpenWindow('fc')
|
||||||
command! -nargs=0 TagbarClose call tagbar#CloseWindow()
|
command! -nargs=0 TagbarClose call tagbar#CloseWindow()
|
||||||
command! -nargs=1 TagbarSetFoldlevel call tagbar#SetFoldLevel(<args>)
|
command! -nargs=1 -bang TagbarSetFoldlevel call tagbar#SetFoldLevel(<args>, <bang>0)
|
||||||
command! -nargs=0 TagbarShowTag call tagbar#OpenParents()
|
command! -nargs=0 TagbarShowTag call tagbar#OpenParents()
|
||||||
|
command! -nargs=1 TagbarGetTypeConfig call tagbar#gettypeconfig(<f-args>)
|
||||||
command! -nargs=? TagbarDebug call tagbar#StartDebug(<f-args>)
|
command! -nargs=? TagbarDebug call tagbar#StartDebug(<f-args>)
|
||||||
command! -nargs=0 TagbarDebugEnd call tagbar#StopDebug()
|
command! -nargs=0 TagbarDebugEnd call tagbar#StopDebug()
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
" Author: Jan Larres <jan@majutsushi.net>
|
" Author: Jan Larres <jan@majutsushi.net>
|
||||||
" Licence: Vim licence
|
" Licence: Vim licence
|
||||||
" Website: http://majutsushi.github.com/tagbar/
|
" Website: http://majutsushi.github.com/tagbar/
|
||||||
" Version: 2.3
|
" Version: 2.4
|
||||||
|
|
||||||
scriptencoding utf-8
|
scriptencoding utf-8
|
||||||
|
|
||||||
@@ -1062,7 +1062,12 @@ function! s:Window(settings, tags) " {{{
|
|||||||
let content = format.content
|
let content = format.content
|
||||||
exe winnum . 'wincmd w'
|
exe winnum . 'wincmd w'
|
||||||
|
|
||||||
silent! syn clear TagListKeyword
|
silent! syn clear
|
||||||
|
\ TagListKeyword
|
||||||
|
\ TagListVisibilityPublic
|
||||||
|
\ TagListVisibilityPrivate
|
||||||
|
\ TagListVisibilityProtected
|
||||||
|
\ TagListVisibilityStatic
|
||||||
for syn_cmd in format.syntax
|
for syn_cmd in format.syntax
|
||||||
exec syn_cmd
|
exec syn_cmd
|
||||||
endfor
|
endfor
|
||||||
|
|||||||
112
bundle/git_vimwiki/README
Normal file
112
bundle/git_vimwiki/README
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
This is a mirror of http://www.vim.org/scripts/script.php?script_id=2226
|
||||||
|
|
||||||
|
A Personal Wiki For Vim Plugin
|
||||||
|
==============================================================================
|
||||||
|
Screenshots are available on http://code.google.com/p/vimwiki/
|
||||||
|
There are also zipped vimwiki files there in case you do not like vimball archives.
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
For the various options see :h vimwiki-options.
|
||||||
|
|
||||||
|
|
||||||
|
Basic Markup
|
||||||
|
==============================================================================
|
||||||
|
see :h vimwiki-syntax
|
||||||
|
|
||||||
|
*bold* -- bold
|
||||||
|
_italic_ -- italic
|
||||||
|
|
||||||
|
[[wiki link]] -- link with spaces
|
||||||
|
[[wiki link|description]] -- 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
|
||||||
|
|
||||||
|
# numbered list item 1
|
||||||
|
# numbered list item 2
|
||||||
|
# numbered list item 3
|
||||||
|
# numbered list item 4
|
||||||
|
|
||||||
|
= Header1 =
|
||||||
|
== Header2 ==
|
||||||
|
=== Header3 ===
|
||||||
|
|
||||||
|
|
||||||
|
Key bindings
|
||||||
|
==============================================================================
|
||||||
|
see :h vimwiki-mappings
|
||||||
|
|
||||||
|
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> -- Folow/Create wiki link
|
||||||
|
<Shift-Enter> -- Split and folow/create wiki link
|
||||||
|
<Ctrl-Enter> -- Vertical split and folow/create wiki link
|
||||||
|
<Backspace> -- Go back to parent(previous) wiki link
|
||||||
|
<Tab> -- Find next wiki link
|
||||||
|
<Shift-Tab> -- Find previous wiki link
|
||||||
|
|
||||||
|
|
||||||
|
Commands
|
||||||
|
==============================================================================
|
||||||
|
:Vimwiki2HTML -- Convert current wiki link to HTML
|
||||||
|
:VimwikiAll2HTML -- Convert all your wiki links to HTML
|
||||||
|
|
||||||
1502
bundle/git_vimwiki/autoload/vimwiki/base.vim
Normal file
1502
bundle/git_vimwiki/autoload/vimwiki/base.vim
Normal file
File diff suppressed because it is too large
Load Diff
358
bundle/git_vimwiki/autoload/vimwiki/diary.vim
Normal file
358
bundle/git_vimwiki/autoload/vimwiki/diary.vim
Normal file
@@ -0,0 +1,358 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki autoload plugin file
|
||||||
|
" Desc: Handle diary notes
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" Load only once {{{
|
||||||
|
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
|
||||||
|
|
||||||
|
" Helpers {{{
|
||||||
|
function! s:prefix_zero(num) "{{{
|
||||||
|
if a:num < 10
|
||||||
|
return '0'.a:num
|
||||||
|
endif
|
||||||
|
return a:num
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:get_date_link(fmt) "{{{
|
||||||
|
return strftime(a:fmt)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:link_exists(lines, link) "{{{
|
||||||
|
let link_exists = 0
|
||||||
|
for line in a:lines
|
||||||
|
if line =~ escape(a:link, '[]\')
|
||||||
|
let link_exists = 1
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return link_exists
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:diary_path(...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
return VimwikiGet('path', idx).VimwikiGet('diary_rel_path', idx)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:diary_index(...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
return s:diary_path(idx).VimwikiGet('diary_index', idx).VimwikiGet('ext', idx)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:diary_date_link(...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
return s:get_date_link(VimwikiGet('diary_link_fmt', idx))
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:get_position_links(link) "{{{
|
||||||
|
let idx = -1
|
||||||
|
let links = []
|
||||||
|
if a:link =~ '^\d\{4}-\d\d-\d\d'
|
||||||
|
let links = keys(s:get_diary_links())
|
||||||
|
" include 'today' into links
|
||||||
|
if index(links, s:diary_date_link()) == -1
|
||||||
|
call add(links, s:diary_date_link())
|
||||||
|
endif
|
||||||
|
call sort(links)
|
||||||
|
let idx = index(links, a:link)
|
||||||
|
endif
|
||||||
|
return [idx, links]
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
fun! s:get_month_name(month) "{{{
|
||||||
|
return g:vimwiki_diary_months[str2nr(a:month)]
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
" Helpers }}}
|
||||||
|
|
||||||
|
" Diary index stuff {{{
|
||||||
|
fun! s:read_captions(files) "{{{
|
||||||
|
let result = {}
|
||||||
|
for fl in a:files
|
||||||
|
" remove paths and extensions
|
||||||
|
let fl_key = fnamemodify(fl, ':t:r')
|
||||||
|
|
||||||
|
if filereadable(fl)
|
||||||
|
for line in readfile(fl, '', s:vimwiki_max_scan_for_caption)
|
||||||
|
if line =~ g:vimwiki_rxHeader && !has_key(result, fl_key)
|
||||||
|
let result[fl_key] = vimwiki#u#trim(matchstr(line, g:vimwiki_rxHeader))
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !has_key(result, fl_key)
|
||||||
|
let result[fl_key] = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
endfor
|
||||||
|
return result
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! s:get_diary_links(...) "{{{
|
||||||
|
let rx = '^\d\{4}-\d\d-\d\d'
|
||||||
|
let s_files = glob(VimwikiGet('path').VimwikiGet('diary_rel_path').'*'.VimwikiGet('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 !~ ''.*\~$''')
|
||||||
|
|
||||||
|
if a:0
|
||||||
|
call add(files, a:1)
|
||||||
|
endif
|
||||||
|
let links_with_captions = s:read_captions(files)
|
||||||
|
|
||||||
|
return links_with_captions
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! 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
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! s:sort(lst) "{{{
|
||||||
|
if VimwikiGet("diary_sort") == 'desc'
|
||||||
|
return reverse(sort(a:lst))
|
||||||
|
else
|
||||||
|
return sort(a:lst)
|
||||||
|
endif
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
fun! s:format_diary(...) "{{{
|
||||||
|
let result = []
|
||||||
|
|
||||||
|
call add(result, substitute(g:vimwiki_rxH1_Template, '__Header__', VimwikiGet('diary_header'), ''))
|
||||||
|
|
||||||
|
if a:0
|
||||||
|
let g_files = s:group_links(s:get_diary_links(a:1))
|
||||||
|
else
|
||||||
|
let g_files = s:group_links(s:get_diary_links())
|
||||||
|
endif
|
||||||
|
|
||||||
|
" for year in s:rev(sort(keys(g_files)))
|
||||||
|
for year in s:sort(keys(g_files))
|
||||||
|
call add(result, '')
|
||||||
|
call add(result, substitute(g:vimwiki_rxH2_Template, '__Header__', year , ''))
|
||||||
|
|
||||||
|
" for month in s:rev(sort(keys(g_files[year])))
|
||||||
|
for month in s:sort(keys(g_files[year]))
|
||||||
|
call add(result, '')
|
||||||
|
call add(result, substitute(g:vimwiki_rxH3_Template, '__Header__', s:get_month_name(month), ''))
|
||||||
|
|
||||||
|
" for [fl, cap] in s:rev(sort(items(g_files[year][month])))
|
||||||
|
for [fl, cap] in s:sort(items(g_files[year][month]))
|
||||||
|
if empty(cap)
|
||||||
|
let entry = substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', fl, '')
|
||||||
|
let entry = substitute(entry, '__LinkDescription__', cap, '')
|
||||||
|
call add(result, repeat(' ', &sw).'* '.entry)
|
||||||
|
else
|
||||||
|
let entry = substitute(g:vimwiki_WikiLinkTemplate2, '__LinkUrl__', fl, '')
|
||||||
|
let entry = substitute(entry, '__LinkDescription__', cap, '')
|
||||||
|
call add(result, repeat(' ', &sw).'* '.entry)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
call add(result, '')
|
||||||
|
|
||||||
|
return result
|
||||||
|
endfun "}}}
|
||||||
|
|
||||||
|
function! s:delete_diary_section() "{{{
|
||||||
|
" remove diary section
|
||||||
|
let old_pos = getpos('.')
|
||||||
|
let ln_start = -1
|
||||||
|
let ln_end = -1
|
||||||
|
call cursor(1, 1)
|
||||||
|
if search(substitute(g:vimwiki_rxH1_Template, '__Header__', VimwikiGet('diary_header'), ''), 'Wc')
|
||||||
|
let ln_start = line('.')
|
||||||
|
if search(g:vimwiki_rxH1, 'W')
|
||||||
|
let ln_end = line('.') - 1
|
||||||
|
else
|
||||||
|
let ln_end = line('$')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ln_start < 0 || ln_end < 0
|
||||||
|
call setpos('.', old_pos)
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !&readonly
|
||||||
|
exe ln_start.",".ln_end."delete _"
|
||||||
|
endif
|
||||||
|
|
||||||
|
call setpos('.', old_pos)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:insert_diary_section() "{{{
|
||||||
|
if !&readonly
|
||||||
|
let ln = line('.')
|
||||||
|
call append(ln, s:format_diary())
|
||||||
|
if ln == 1 && getline(ln) == ''
|
||||||
|
1,1delete
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Diary index stuff }}}
|
||||||
|
|
||||||
|
function! vimwiki#diary#make_note(wnum, ...) "{{{
|
||||||
|
if a:wnum > len(g:vimwiki_list)
|
||||||
|
echom "vimwiki: 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#validate_wiki_options(idx)
|
||||||
|
call vimwiki#base#mkdir(VimwikiGet('path', idx).VimwikiGet('diary_rel_path', idx))
|
||||||
|
|
||||||
|
if a:0
|
||||||
|
let cmd = 'tabedit'
|
||||||
|
else
|
||||||
|
let cmd = 'edit'
|
||||||
|
endif
|
||||||
|
if len(a:0)>1
|
||||||
|
let link = 'diary:'.a:2
|
||||||
|
else
|
||||||
|
let link = 'diary:'.s:diary_date_link(idx)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call vimwiki#base#open_link(cmd, link, s:diary_index(idx))
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#diary#goto_diary_index(wnum) "{{{
|
||||||
|
if a:wnum > len(g:vimwiki_list)
|
||||||
|
echom "vimwiki: 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#validate_wiki_options(idx)
|
||||||
|
call vimwiki#base#edit_file('e', s:diary_index(idx))
|
||||||
|
call vimwiki#base#setup_buffer_state(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:'.s: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:'.s: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#u#path_norm(expand("%:p"))
|
||||||
|
let diary_file = vimwiki#u#path_norm(s:diary_index())
|
||||||
|
if current_file == diary_file
|
||||||
|
call s:delete_diary_section()
|
||||||
|
call s:insert_diary_section()
|
||||||
|
else
|
||||||
|
echom "vimwiki: You can generate diary links only in a diary index page!"
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Calendar.vim {{{
|
||||||
|
" Callback function.
|
||||||
|
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
|
||||||
|
|
||||||
|
" Create diary note for a selected date in default wiki.
|
||||||
|
call vimwiki#diary#make_note(1, 0, link)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Sign function.
|
||||||
|
function vimwiki#diary#calendar_sign(day, month, year) "{{{
|
||||||
|
let day = s:prefix_zero(a:day)
|
||||||
|
let month = s:prefix_zero(a:month)
|
||||||
|
let sfile = VimwikiGet('path').VimwikiGet('diary_rel_path').
|
||||||
|
\ a:year.'-'.month.'-'.day.VimwikiGet('ext')
|
||||||
|
return filereadable(expand(sfile))
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Calendar.vim }}}
|
||||||
|
|
||||||
@@ -14,6 +14,15 @@ let g:loaded_vimwiki_html_auto = 1
|
|||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" UTILITY "{{{
|
" UTILITY "{{{
|
||||||
|
function s:get_completion_index(sym) "{{{
|
||||||
|
for idx in range(1, 5)
|
||||||
|
if match(g:vimwiki_listsyms, '\C\%'.idx.'v'.a:sym) != -1
|
||||||
|
return (idx-1)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return 0
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:root_path(subdir) "{{{
|
function! s:root_path(subdir) "{{{
|
||||||
return repeat('../', len(split(a:subdir, '[/\\]')))
|
return repeat('../', len(split(a:subdir, '[/\\]')))
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@@ -36,7 +45,7 @@ function! s:is_web_link(lnk) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_img_link(lnk) "{{{
|
function! s:is_img_link(lnk) "{{{
|
||||||
if a:lnk =~ '\.\%(png\|jpg\|gif\|jpeg\)$'
|
if tolower(a:lnk) =~ '\.\%(png\|jpg\|gif\|jpeg\)$'
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
return 0
|
return 0
|
||||||
@@ -59,9 +68,14 @@ function! s:find_autoload_file(name) " {{{
|
|||||||
return ''
|
return ''
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
function! s:create_default_CSS(path) " {{{
|
function! s:default_CSS_full_name(path) " {{{
|
||||||
let path = expand(a:path)
|
let path = expand(a:path)
|
||||||
let css_full_name = path.VimwikiGet('css_name')
|
let css_full_name = path.VimwikiGet('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) == ""
|
if glob(css_full_name) == ""
|
||||||
call vimwiki#base#mkdir(fnamemodify(css_full_name, ':p:h'))
|
call vimwiki#base#mkdir(fnamemodify(css_full_name, ':p:h'))
|
||||||
let default_css = s:find_autoload_file('style.css')
|
let default_css = s:find_autoload_file('style.css')
|
||||||
@@ -81,8 +95,7 @@ function! s:template_full_name(name) "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let fname = expand(VimwikiGet('template_path').
|
let fname = expand(VimwikiGet('template_path').
|
||||||
\name.
|
\ name.VimwikiGet('template_ext'))
|
||||||
\VimwikiGet('template_ext'))
|
|
||||||
|
|
||||||
if filereadable(fname)
|
if filereadable(fname)
|
||||||
return fname
|
return fname
|
||||||
@@ -95,8 +108,8 @@ function! s:get_html_template(wikifile, template) "{{{
|
|||||||
" TODO: refactor it!!!
|
" TODO: refactor it!!!
|
||||||
let lines=[]
|
let lines=[]
|
||||||
|
|
||||||
|
if a:template != ''
|
||||||
let template_name = s:template_full_name(a:template)
|
let template_name = s:template_full_name(a:template)
|
||||||
if template_name != ''
|
|
||||||
try
|
try
|
||||||
let lines = readfile(template_name)
|
let lines = readfile(template_name)
|
||||||
return lines
|
return lines
|
||||||
@@ -106,27 +119,40 @@ function! s:get_html_template(wikifile, template) "{{{
|
|||||||
endtry
|
endtry
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" if no VimwikiGet('html_template') set up or error while reading template
|
let default_tpl = s:template_full_name('')
|
||||||
" file -- use default one.
|
|
||||||
|
if default_tpl == ''
|
||||||
let default_tpl = s:find_autoload_file('default.tpl')
|
let default_tpl = s:find_autoload_file('default.tpl')
|
||||||
if default_tpl != ''
|
|
||||||
let lines = readfile(default_tpl)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let lines = readfile(default_tpl)
|
||||||
return lines
|
return lines
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:safe_html_tags(line) "{{{
|
||||||
|
let line = substitute(a:line,'<','\<', 'g')
|
||||||
|
let line = substitute(line,'>','\>', 'g')
|
||||||
|
return line
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:safe_html(line) "{{{
|
function! s:safe_html(line) "{{{
|
||||||
|
" escape & < > when producing HTML text
|
||||||
|
" uses variables s:lt_pattern, s:gt_pattern that are
|
||||||
|
" set in vimwiki#html#Wiki2HTML() according to g:vimwiki_valid_html_tags
|
||||||
"" htmlize symbols: < > &
|
"" htmlize symbols: < > &
|
||||||
|
|
||||||
let line = substitute(a:line, '&', '\&', 'g')
|
let line = substitute(a:line, '&', '\&', 'g')
|
||||||
|
" the following depends on g:vimwiki_valid_html_tags
|
||||||
|
let line = substitute(line,s:lt_pattern,'\<', 'g')
|
||||||
|
let line = substitute(line,s:gt_pattern,'\>', 'g')
|
||||||
|
|
||||||
let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
"let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
||||||
let line = substitute(line,'<\%(/\?\%('
|
"let line = substitute(line,'<\%(/\?\%('
|
||||||
\.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!',
|
" \.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!',
|
||||||
\'\<', 'g')
|
" \'\<', 'g')
|
||||||
let line = substitute(line,'\%(</\?\%('
|
"let line = substitute(line,'\%(</\?\%('
|
||||||
\.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>',
|
" \.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>',
|
||||||
\'\>', 'g')
|
" \'\>', 'g')
|
||||||
return line
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
@@ -140,8 +166,8 @@ function! s:delete_html_files(path) "{{{
|
|||||||
|
|
||||||
" delete if there is no corresponding wiki file
|
" delete if there is no corresponding wiki file
|
||||||
let subdir = vimwiki#base#subdir(VimwikiGet('path_html'), fname)
|
let subdir = vimwiki#base#subdir(VimwikiGet('path_html'), fname)
|
||||||
let wikifile = VimwikiGet("path").subdir.
|
let wikifile = VimwikiGet('path').subdir.
|
||||||
\fnamemodify(fname, ":t:r").VimwikiGet("ext")
|
\fnamemodify(fname, ":t:r").VimwikiGet('ext')
|
||||||
if filereadable(wikifile)
|
if filereadable(wikifile)
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
@@ -182,12 +208,6 @@ function! s:save_vimwiki_buffer() "{{{
|
|||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:trim(string) "{{{
|
|
||||||
let res = substitute(a:string, '^\s\+', '', '')
|
|
||||||
let res = substitute(res, '\s\+$', '', '')
|
|
||||||
return res
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_html_toc(toc_list) "{{{
|
function! s:get_html_toc(toc_list) "{{{
|
||||||
" toc_list is list of [level, header_text, header_id]
|
" toc_list is list of [level, header_text, header_id]
|
||||||
" ex: [[1, "Header", "toc1"], [2, "Header2", "toc2"], ...]
|
" ex: [[1, "Header", "toc1"], [2, "Header2", "toc2"], ...]
|
||||||
@@ -265,8 +285,7 @@ function! s:is_html_uptodate(wikifile) "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let wikifile = fnamemodify(a:wikifile, ":p")
|
let wikifile = fnamemodify(a:wikifile, ":p")
|
||||||
let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile)
|
let htmlfile = expand(VimwikiGet('path_html').VimwikiGet('subdir').
|
||||||
let htmlfile = expand(VimwikiGet('path_html').subdir.
|
|
||||||
\fnamemodify(wikifile, ":t:r").".html")
|
\fnamemodify(wikifile, ":t:r").".html")
|
||||||
|
|
||||||
if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile)
|
if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile)
|
||||||
@@ -299,6 +318,11 @@ endfunction "}}}
|
|||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
" INLINE TAGS "{{{
|
" INLINE TAGS "{{{
|
||||||
|
function! s:tag_eqin(value) "{{{
|
||||||
|
" mathJAX wants \( \) for inline maths
|
||||||
|
return '\('.s:mid(a:value, 1).'\)'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_em(value) "{{{
|
function! s:tag_em(value) "{{{
|
||||||
return '<em>'.s:mid(a:value, 1).'</em>'
|
return '<em>'.s:mid(a:value, 1).'</em>'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@@ -324,141 +348,113 @@ function! s:tag_sub(value) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_code(value) "{{{
|
function! s:tag_code(value) "{{{
|
||||||
return '<code>'.s:mid(a:value, 1).'</code>'
|
return '<code>'.s:safe_html_tags(s:mid(a:value, 1)).'</code>'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_pre(value) "{{{
|
"function! s:tag_pre(value) "{{{
|
||||||
return '<code>'.s:mid(a:value, 3).'</code>'
|
" return '<code>'.s:mid(a:value, 3).'</code>'
|
||||||
|
"endfunction "}}}
|
||||||
|
|
||||||
|
"FIXME dead code?
|
||||||
|
"function! s:tag_math(value) "{{{
|
||||||
|
" return '\['.s:mid(a:value, 3).'\]'
|
||||||
|
"endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
"{{{ v2.0 links
|
||||||
|
" match n-th ARG within {{URL[|ARG1|ARG2|...]}} " {{{
|
||||||
|
" *c,d,e),...
|
||||||
|
function! vimwiki#html#incl_match_arg(nn_index)
|
||||||
|
let rx = g:vimwiki_rxWikiInclPrefix. g:vimwiki_rxWikiInclUrl
|
||||||
|
let rx = rx. repeat(g:vimwiki_rxWikiInclSeparator. g:vimwiki_rxWikiInclArg, a:nn_index-1)
|
||||||
|
if a:nn_index > 0
|
||||||
|
let rx = rx. g:vimwiki_rxWikiInclSeparator. '\zs'. g:vimwiki_rxWikiInclArg. '\ze'
|
||||||
|
endif
|
||||||
|
let rx = rx. g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix
|
||||||
|
return rx
|
||||||
|
endfunction
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
function! vimwiki#html#linkify_link(src, descr) "{{{
|
||||||
|
let src_str = ' href="'.a:src.'"'
|
||||||
|
let descr = substitute(a:descr,'^\s*\(.*\)\s*$','\1','')
|
||||||
|
let descr = (descr == "" ? a:src : descr)
|
||||||
|
let descr_str = (descr =~ g:vimwiki_rxWikiIncl
|
||||||
|
\ ? s:tag_wikiincl(descr)
|
||||||
|
\ : descr)
|
||||||
|
return '<a'.src_str.'>'.descr_str.'</a>'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_internal_link(value) "{{{
|
function! vimwiki#html#linkify_image(src, descr, verbatim_str) "{{{
|
||||||
" Make <a href="This is a link">This is a link</a>
|
let src_str = ' src="'.a:src.'"'
|
||||||
" from [[This is a link]]
|
let descr_str = (a:descr != '' ? ' alt="'.a:descr.'"' : '')
|
||||||
" Make <a href="link">This is a link</a>
|
let verbatim_str = (a:verbatim_str != '' ? ' '.a:verbatim_str : '')
|
||||||
" from [[link|This is a link]]
|
return '<img'.src_str.descr_str.verbatim_str.' />'
|
||||||
" Make <a href="link">This is a link</a>
|
endfunction "}}}
|
||||||
" from [[link][This is a link]]
|
|
||||||
" TODO: rename function -- it makes not only internal links.
|
|
||||||
" TODO: refactor it.
|
|
||||||
|
|
||||||
function! s:linkify(src, caption, style) "{{{
|
function! s:tag_weblink(value) "{{{
|
||||||
if a:style == ''
|
" Weblink Template -> <a href="url">descr</a>
|
||||||
let style_str = ''
|
let str = a:value
|
||||||
else
|
let url = matchstr(str, g:vimwiki_rxWeblinkMatchUrl)
|
||||||
let style_str = ' style="'.a:style.'"'
|
let descr = matchstr(str, g:vimwiki_rxWeblinkMatchDescr)
|
||||||
|
let line = vimwiki#html#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, g:vimwiki_rxWikiInclMatchUrl)
|
||||||
|
let descr = matchstr(str, vimwiki#html#incl_match_arg(1))
|
||||||
|
let verbatim_str = matchstr(str, vimwiki#html#incl_match_arg(2))
|
||||||
|
" resolve url
|
||||||
|
let [idx, scheme, path, subdir, lnk, ext, url] =
|
||||||
|
\ vimwiki#base#resolve_scheme(url_0, 1)
|
||||||
|
" generate html output
|
||||||
|
" TODO: migrate non-essential debugging messages into g:VimwikiLog
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '{{idx='.idx.', scheme='.scheme.', path='.path.', subdir='.subdir.', lnk='.lnk.', ext='.ext.'}}'
|
||||||
endif
|
endif
|
||||||
|
let url = escape(url, '#')
|
||||||
if s:is_img_link(a:caption)
|
let line = vimwiki#html#linkify_image(url, descr, verbatim_str)
|
||||||
let link = '<a href="'.a:src.'"><img src="'.a:caption.'"'.style_str.' />'.
|
return line
|
||||||
\ '</a>'
|
|
||||||
elseif vimwiki#base#is_non_wiki_link(a:src)
|
|
||||||
let link = '<a href="'.a:src.'">'.a:caption.'</a>'
|
|
||||||
elseif s:is_img_link(a:src)
|
|
||||||
let link = '<img src="'.a:src.'" alt="'.a:caption.'"'. style_str.' />'
|
|
||||||
elseif vimwiki#base#is_link_to_dir(a:src)
|
|
||||||
if g:vimwiki_dir_link == ''
|
|
||||||
let link = '<a href="'.vimwiki#base#safe_link(a:src).'">'.a:caption.'</a>'
|
|
||||||
else
|
|
||||||
let link = '<a href="'.vimwiki#base#safe_link(a:src).
|
|
||||||
\ g:vimwiki_dir_link.'.html">'.a:caption.'</a>'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let link = '<a href="'.vimwiki#base#safe_link(a:src).
|
|
||||||
\ '.html">'.a:caption.'</a>'
|
|
||||||
endif
|
|
||||||
|
|
||||||
return link
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
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 = s:linkify(link_parts[0], link_parts[1], style)
|
|
||||||
|
|
||||||
else
|
|
||||||
let line = s:linkify(value, value, '')
|
|
||||||
endif
|
endif
|
||||||
return line
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:tag_external_link(value) "{{{
|
function! s:tag_wikilink(value) "{{{
|
||||||
"" Make <a href="link">link desc</a>
|
" [[url]] -> <a href="url.html">url</a>
|
||||||
"" from [link link desc]
|
" [[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>
|
||||||
|
let str = a:value
|
||||||
|
let url = matchstr(str, g:vimwiki_rxWikiLinkMatchUrl)
|
||||||
|
let descr = matchstr(str, g:vimwiki_rxWikiLinkMatchDescr)
|
||||||
|
let descr = (substitute(descr,'^\s*\(.*\)\s*$','\1','') != '' ? descr : url)
|
||||||
|
|
||||||
let value = s:mid(a:value, 1)
|
" resolve url
|
||||||
|
let [idx, scheme, path, subdir, lnk, ext, url] =
|
||||||
|
\ vimwiki#base#resolve_scheme(url, 1)
|
||||||
|
|
||||||
let line = ''
|
" generate html output
|
||||||
if s:is_web_link(value)
|
" TODO: migrate non-essential debugging messages into g:VimwikiLog
|
||||||
let lnkElements = split(value)
|
if g:vimwiki_debug > 1
|
||||||
let head = lnkElements[0]
|
echom '[[idx='.idx.', scheme='.scheme.', path='.path.', subdir='.subdir.', lnk='.lnk.', ext='.ext.']]'
|
||||||
let rest = join(lnkElements[1:])
|
|
||||||
if rest==""
|
|
||||||
let rest=head
|
|
||||||
endif
|
|
||||||
if s:is_img_link(rest)
|
|
||||||
if rest!=head
|
|
||||||
let line = '<a href="'.head.'"><img src="'.rest.'" /></a>'
|
|
||||||
else
|
|
||||||
let line = '<img src="'.rest.'" />'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let line = '<a href="'.head.'">'.rest.'</a>'
|
|
||||||
endif
|
|
||||||
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
|
endif
|
||||||
|
let url = escape(url, '#')
|
||||||
|
let line = vimwiki#html#linkify_link(url, descr)
|
||||||
return line
|
return line
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
"}}} v1.3 links
|
||||||
|
|
||||||
function! s:tag_wikiword_link(value) "{{{
|
|
||||||
" Make <a href="WikiWord">WikiWord</a> from WikiWord
|
|
||||||
if a:value[0] == '!'
|
|
||||||
return a:value[1:]
|
|
||||||
elseif g:vimwiki_camel_case
|
|
||||||
let line = '<a href="'.a:value.'.html">'.a:value.'</a>'
|
|
||||||
return line
|
|
||||||
else
|
|
||||||
return a:value
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:tag_barebone_link(value) "{{{
|
|
||||||
"" Make <a href="http://habamax.ru">http://habamax.ru</a>
|
|
||||||
"" from http://habamax.ru
|
|
||||||
|
|
||||||
if s:is_img_link(a:value)
|
|
||||||
let line = '<img src="'.a:value.'" />'
|
|
||||||
else
|
|
||||||
let line = '<a href="'.a:value.'">'.a:value.'</a>'
|
|
||||||
endif
|
|
||||||
return line
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:tag_no_wikiword_link(value) "{{{
|
|
||||||
if a:value[0] == '!'
|
|
||||||
return a:value[1:]
|
|
||||||
else
|
|
||||||
return a:value
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:tag_remove_internal_link(value) "{{{
|
function! s:tag_remove_internal_link(value) "{{{
|
||||||
let value = s:mid(a:value, 2)
|
let value = s:mid(a:value, 2)
|
||||||
@@ -508,10 +504,16 @@ endfunction "}}}
|
|||||||
function! s:make_tag(line, regexp, func) "{{{
|
function! s:make_tag(line, regexp, func) "{{{
|
||||||
" Make tags for a given matched regexp.
|
" Make tags for a given matched regexp.
|
||||||
" Exclude preformatted text and href links.
|
" Exclude preformatted text and href links.
|
||||||
|
" FIXME
|
||||||
|
let patt_splitter = '\(`[^`]\+`\)\|'.
|
||||||
|
\ '\('.g:vimwiki_rxPreStart.'.\+'.g:vimwiki_rxPreEnd.'\)\|'.
|
||||||
|
\ '\(<a href.\{-}</a>\)\|'.
|
||||||
|
\ '\(<img src.\{-}/>\)\|'.
|
||||||
|
\ '\('.g:vimwiki_rxEqIn.'\)'
|
||||||
|
|
||||||
let patt_splitter = '\(`[^`]\+`\)\|\({{{.\+}}}\)\|'.
|
"FIXME FIXME !!! these can easily occur on the same line!
|
||||||
\ '\(<a href.\{-}</a>\)\|\(<img src.\{-}/>\)'
|
"XXX {{{ }}} ??? obsolete
|
||||||
if '`[^`]\+`' == a:regexp || '{{{.\+}}}' == a:regexp
|
if '`[^`]\+`' == a:regexp || '{{{.\+}}}' == a:regexp || g:vimwiki_rxEqIn == a:regexp
|
||||||
let res_line = s:subst_func(a:line, a:regexp, a:func)
|
let res_line = s:subst_func(a:line, a:regexp, a:func)
|
||||||
else
|
else
|
||||||
let pos = 0
|
let pos = 0
|
||||||
@@ -541,7 +543,6 @@ endfunction " }}}
|
|||||||
|
|
||||||
function! s:process_tags_typefaces(line) "{{{
|
function! s:process_tags_typefaces(line) "{{{
|
||||||
let line = a:line
|
let line = a:line
|
||||||
let line = s:make_tag(line, g:vimwiki_rxNoWikiWord, 's:tag_no_wikiword_link')
|
|
||||||
let line = s:make_tag(line, g:vimwiki_rxItalic, 's:tag_em')
|
let line = s:make_tag(line, g:vimwiki_rxItalic, 's:tag_em')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxBold, 's:tag_strong')
|
let line = s:make_tag(line, g:vimwiki_rxBold, 's:tag_strong')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxTodo, 's:tag_todo')
|
let line = s:make_tag(line, g:vimwiki_rxTodo, 's:tag_todo')
|
||||||
@@ -549,15 +550,15 @@ function! s:process_tags_typefaces(line) "{{{
|
|||||||
let line = s:make_tag(line, g:vimwiki_rxSuperScript, 's:tag_super')
|
let line = s:make_tag(line, g:vimwiki_rxSuperScript, 's:tag_super')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxSubScript, 's:tag_sub')
|
let line = s:make_tag(line, g:vimwiki_rxSubScript, 's:tag_sub')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxCode, 's:tag_code')
|
let line = s:make_tag(line, g:vimwiki_rxCode, 's:tag_code')
|
||||||
|
let line = s:make_tag(line, g:vimwiki_rxEqIn, 's:tag_eqin')
|
||||||
return line
|
return line
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
function! s:process_tags_links(line) " {{{
|
function! s:process_tags_links(line) " {{{
|
||||||
let line = a:line
|
let line = a:line
|
||||||
let line = s:make_tag(line, '\[\[.\{-}\]\]', 's:tag_internal_link')
|
let line = s:make_tag(line, g:vimwiki_rxWikiLink, 's:tag_wikilink')
|
||||||
let line = s:make_tag(line, '\[.\{-}\]', 's:tag_external_link')
|
let line = s:make_tag(line, g:vimwiki_rxWikiIncl, 's:tag_wikiincl')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxWeblink, 's:tag_barebone_link')
|
let line = s:make_tag(line, g:vimwiki_rxWeblink, 's:tag_weblink')
|
||||||
let line = s:make_tag(line, g:vimwiki_rxWikiWord, 's:tag_wikiword_link')
|
|
||||||
return line
|
return line
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
@@ -577,6 +578,14 @@ function! s:close_tag_pre(pre, ldest) "{{{
|
|||||||
return a:pre
|
return a:pre
|
||||||
endfunction "}}}
|
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) "{{{
|
function! s:close_tag_quote(quote, ldest) "{{{
|
||||||
if a:quote
|
if a:quote
|
||||||
call insert(a:ldest, "</blockquote>")
|
call insert(a:ldest, "</blockquote>")
|
||||||
@@ -745,11 +754,15 @@ endfunction! "}}}
|
|||||||
|
|
||||||
function! s:process_tag_pre(line, pre) "{{{
|
function! s:process_tag_pre(line, pre) "{{{
|
||||||
" pre is the list of [is_in_pre, indent_of_pre]
|
" pre is the list of [is_in_pre, indent_of_pre]
|
||||||
|
"XXX always outputs a single line or empty list!
|
||||||
let lines = []
|
let lines = []
|
||||||
let pre = a:pre
|
let pre = a:pre
|
||||||
let processed = 0
|
let processed = 0
|
||||||
if !pre[0] && a:line =~ '^\s*{{{[^\(}}}\)]*\s*$'
|
"XXX huh?
|
||||||
|
"if !pre[0] && a:line =~ '^\s*{{{[^\(}}}\)]*\s*$'
|
||||||
|
if !pre[0] && a:line =~ '^\s*{{{'
|
||||||
let class = matchstr(a:line, '{{{\zs.*$')
|
let class = matchstr(a:line, '{{{\zs.*$')
|
||||||
|
"FIXME class cannot contain arbitrary strings
|
||||||
let class = substitute(class, '\s\+$', '', 'g')
|
let class = substitute(class, '\s\+$', '', 'g')
|
||||||
if class != ""
|
if class != ""
|
||||||
call add(lines, "<pre ".class.">")
|
call add(lines, "<pre ".class.">")
|
||||||
@@ -764,11 +777,48 @@ function! s:process_tag_pre(line, pre) "{{{
|
|||||||
let processed = 1
|
let processed = 1
|
||||||
elseif pre[0]
|
elseif pre[0]
|
||||||
let processed = 1
|
let processed = 1
|
||||||
call add(lines, substitute(a:line, '^\s\{'.pre[1].'}', '', ''))
|
"XXX destroys indent in general!
|
||||||
|
"call add(lines, substitute(a:line, '^\s\{'.pre[1].'}', '', ''))
|
||||||
|
call add(lines, s:safe_html_tags(a:line))
|
||||||
endif
|
endif
|
||||||
return [processed, lines, pre]
|
return [processed, lines, pre]
|
||||||
endfunction "}}}
|
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')
|
||||||
|
" Check the math placeholder (default: displaymath)
|
||||||
|
let b:vimwiki_mathEnv = matchstr(class, '^%\zs\S\+\ze%')
|
||||||
|
if b:vimwiki_mathEnv != ""
|
||||||
|
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 b:vimwiki_mathEnv != ""
|
||||||
|
call add(lines, "\\end{".b:vimwiki_mathEnv."}")
|
||||||
|
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) "{{{
|
function! s:process_tag_quote(line, quote) "{{{
|
||||||
let lines = []
|
let lines = []
|
||||||
let quote = a:quote
|
let quote = a:quote
|
||||||
@@ -800,7 +850,8 @@ function! s:process_tag_list(line, lists) "{{{
|
|||||||
if chk[1] =~ '[.*\\^$~]'
|
if chk[1] =~ '[.*\\^$~]'
|
||||||
let chk[1] ='\'.chk[1]
|
let chk[1] ='\'.chk[1]
|
||||||
endif
|
endif
|
||||||
let completion = match(g:vimwiki_listsyms, '\C' . chk[1])
|
" let completion = match(g:vimwiki_listsyms, '\C' . chk[1])
|
||||||
|
let completion = s:get_completion_index(chk[1])
|
||||||
if completion >= 0 && completion <=4
|
if completion >= 0 && completion <=4
|
||||||
let st_tag = '<li class="done'.completion.'">'
|
let st_tag = '<li class="done'.completion.'">'
|
||||||
endif
|
endif
|
||||||
@@ -935,18 +986,9 @@ function! s:process_tag_h(line, id) "{{{
|
|||||||
let h_level = 0
|
let h_level = 0
|
||||||
let h_text = ''
|
let h_text = ''
|
||||||
let h_id = ''
|
let h_id = ''
|
||||||
if a:line =~ g:vimwiki_rxH6
|
|
||||||
let h_level = 6
|
if a:line =~ g:vimwiki_rxHeader
|
||||||
elseif a:line =~ g:vimwiki_rxH5
|
let h_level = vimwiki#u#count_first_sym(a:line)
|
||||||
let h_level = 5
|
|
||||||
elseif a:line =~ g:vimwiki_rxH4
|
|
||||||
let h_level = 4
|
|
||||||
elseif a:line =~ g:vimwiki_rxH3
|
|
||||||
let h_level = 3
|
|
||||||
elseif a:line =~ g:vimwiki_rxH2
|
|
||||||
let h_level = 2
|
|
||||||
elseif a:line =~ g:vimwiki_rxH1
|
|
||||||
let h_level = 1
|
|
||||||
endif
|
endif
|
||||||
if h_level > 0
|
if h_level > 0
|
||||||
let a:id[h_level] += 1
|
let a:id[h_level] += 1
|
||||||
@@ -960,8 +1002,6 @@ function! s:process_tag_h(line, id) "{{{
|
|||||||
let centered = 1
|
let centered = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let line = s:trim(line)
|
|
||||||
|
|
||||||
let h_number = ''
|
let h_number = ''
|
||||||
for l in range(1, h_level-1)
|
for l in range(1, h_level-1)
|
||||||
let h_number .= a:id[l].'.'
|
let h_number .= a:id[l].'.'
|
||||||
@@ -978,7 +1018,8 @@ function! s:process_tag_h(line, id) "{{{
|
|||||||
let h_part .= '>'
|
let h_part .= '>'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let h_text = s:trim(strpart(line, h_level, len(line) - h_level * 2))
|
let h_text = vimwiki#u#trim(matchstr(line, g:vimwiki_rxHeader))
|
||||||
|
|
||||||
if g:vimwiki_html_header_numbering
|
if g:vimwiki_html_header_numbering
|
||||||
let num = matchstr(h_number,
|
let num = matchstr(h_number,
|
||||||
\ '^\(\d.\)\{'.(g:vimwiki_html_header_numbering-1).'}\zs.*')
|
\ '^\(\d.\)\{'.(g:vimwiki_html_header_numbering-1).'}\zs.*')
|
||||||
@@ -1046,14 +1087,15 @@ function! s:process_tag_table(line, table) "{{{
|
|||||||
let lines = []
|
let lines = []
|
||||||
let processed = 0
|
let processed = 0
|
||||||
|
|
||||||
if a:line =~ '^\s*|[-+]\+|\s*$'
|
if vimwiki#tbl#is_separator(a:line)
|
||||||
call extend(table, s:table_add_row(a:table, a:line))
|
call extend(table, s:table_add_row(a:table, a:line))
|
||||||
let processed = 1
|
let processed = 1
|
||||||
elseif a:line =~ '^\s*|.\+|\s*$'
|
elseif vimwiki#tbl#is_table(a:line)
|
||||||
call extend(table, s:table_add_row(a:table, a:line))
|
call extend(table, s:table_add_row(a:table, a:line))
|
||||||
|
|
||||||
let processed = 1
|
let processed = 1
|
||||||
let cells = split(a:line, '\s*|\s*', 1)[1: -2]
|
" 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 map(cells, 's:table_empty_cell(v:val)')
|
||||||
call extend(table[-1], cells)
|
call extend(table[-1], cells)
|
||||||
else
|
else
|
||||||
@@ -1072,6 +1114,7 @@ function! s:parse_line(line, state) " {{{
|
|||||||
let state.para = a:state.para
|
let state.para = a:state.para
|
||||||
let state.quote = a:state.quote
|
let state.quote = a:state.quote
|
||||||
let state.pre = a:state.pre[:]
|
let state.pre = a:state.pre[:]
|
||||||
|
let state.math = a:state.math[:]
|
||||||
let state.table = a:state.table[:]
|
let state.table = a:state.table[:]
|
||||||
let state.lists = a:state.lists[:]
|
let state.lists = a:state.lists[:]
|
||||||
let state.deflist = a:state.deflist
|
let state.deflist = a:state.deflist
|
||||||
@@ -1135,6 +1178,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
" if processed && len(state.lists)
|
" if processed && len(state.lists)
|
||||||
" call s:close_tag_list(state.lists, lines)
|
" call s:close_tag_list(state.lists, lines)
|
||||||
" endif
|
" endif
|
||||||
|
if !processed
|
||||||
|
let [processed, lines, state.math] = s:process_tag_math(line, state.math)
|
||||||
|
endif
|
||||||
if processed && len(state.table)
|
if processed && len(state.table)
|
||||||
let state.table = s:close_tag_table(state.table, lines)
|
let state.table = s:close_tag_table(state.table, lines)
|
||||||
endif
|
endif
|
||||||
@@ -1160,6 +1206,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
if processed && state.pre[0]
|
if processed && state.pre[0]
|
||||||
let state.pre = s:close_tag_pre(state.pre, lines)
|
let state.pre = s:close_tag_pre(state.pre, lines)
|
||||||
endif
|
endif
|
||||||
|
if processed && state.math[0]
|
||||||
|
let state.math = s:close_tag_math(state.math, lines)
|
||||||
|
endif
|
||||||
if processed && len(state.table)
|
if processed && len(state.table)
|
||||||
let state.table = s:close_tag_table(state.table, lines)
|
let state.table = s:close_tag_table(state.table, lines)
|
||||||
endif
|
endif
|
||||||
@@ -1183,6 +1232,7 @@ function! s:parse_line(line, state) " {{{
|
|||||||
call s:close_tag_list(state.lists, res_lines)
|
call s:close_tag_list(state.lists, res_lines)
|
||||||
let state.table = s:close_tag_table(state.table, res_lines)
|
let state.table = s:close_tag_table(state.table, res_lines)
|
||||||
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
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.quote = s:close_tag_quote(state.quote, res_lines)
|
||||||
let state.para = s:close_tag_para(state.para, res_lines)
|
let state.para = s:close_tag_para(state.para, res_lines)
|
||||||
|
|
||||||
@@ -1218,6 +1268,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
if processed && state.pre[0]
|
if processed && state.pre[0]
|
||||||
let state.pre = s:close_tag_pre(state.pre, lines)
|
let state.pre = s:close_tag_pre(state.pre, lines)
|
||||||
endif
|
endif
|
||||||
|
if processed && state.math[0]
|
||||||
|
let state.math = s:close_tag_math(state.math, lines)
|
||||||
|
endif
|
||||||
if processed && state.para
|
if processed && state.para
|
||||||
let state.para = s:close_tag_para(state.para, lines)
|
let state.para = s:close_tag_para(state.para, lines)
|
||||||
endif
|
endif
|
||||||
@@ -1235,6 +1288,7 @@ function! s:parse_line(line, state) " {{{
|
|||||||
call s:close_tag_list(state.lists, res_lines)
|
call s:close_tag_list(state.lists, res_lines)
|
||||||
let state.table = s:close_tag_table(state.table, res_lines)
|
let state.table = s:close_tag_table(state.table, res_lines)
|
||||||
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
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)
|
call add(res_lines, line)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@@ -1262,6 +1316,9 @@ function! s:parse_line(line, state) " {{{
|
|||||||
if processed && state.pre[0]
|
if processed && state.pre[0]
|
||||||
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
let state.pre = s:close_tag_pre(state.pre, res_lines)
|
||||||
endif
|
endif
|
||||||
|
if processed && state.math[0]
|
||||||
|
let state.math = s:close_tag_math(state.math, res_lines)
|
||||||
|
endif
|
||||||
if processed && len(state.table)
|
if processed && len(state.table)
|
||||||
let state.table = s:close_tag_table(state.table, res_lines)
|
let state.table = s:close_tag_table(state.table, res_lines)
|
||||||
endif
|
endif
|
||||||
@@ -1281,25 +1338,48 @@ function! s:parse_line(line, state) " {{{
|
|||||||
|
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
function! s:use_custom_wiki2html() "{{{
|
||||||
|
let custom_wiki2html = VimwikiGet('custom_wiki2html')
|
||||||
|
return !empty(custom_wiki2html) && s:file_exists(custom_wiki2html)
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) "{{{
|
||||||
|
call vimwiki#base#mkdir(a:path)
|
||||||
|
execute '!'.VimwikiGet('custom_wiki2html'). ' '
|
||||||
|
\ a:force. ' '.
|
||||||
|
\ VimwikiGet('syntax'). ' '.
|
||||||
|
\ strpart(VimwikiGet('ext'), 1). ' '.
|
||||||
|
\ a:path. ' '.
|
||||||
|
\ a:wikifile. ' '.
|
||||||
|
\ s:default_CSS_full_name(a:path)
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! vimwiki#html#Wiki2HTML(path_html, wikifile) "{{{
|
||||||
|
|
||||||
let starttime = reltime() " start the clock
|
let starttime = reltime() " start the clock
|
||||||
echo 'Generating HTML ... '
|
|
||||||
if !s:syntax_supported()
|
let done = 0
|
||||||
echomsg 'vimwiki: Only vimwiki_default syntax supported!!!'
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let wikifile = fnamemodify(a:wikifile, ":p")
|
let wikifile = fnamemodify(a:wikifile, ":p")
|
||||||
let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile)
|
|
||||||
|
|
||||||
let path = expand(a:path).subdir
|
let path_html = expand(a:path_html).VimwikiGet('subdir')
|
||||||
let htmlfile = fnamemodify(wikifile, ":t:r").'.html'
|
let htmlfile = fnamemodify(wikifile, ":t:r").'.html'
|
||||||
|
|
||||||
|
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 lsource = readfile(wikifile)
|
||||||
let ldest = []
|
let ldest = []
|
||||||
|
|
||||||
call vimwiki#base#mkdir(path)
|
"if g:vimwiki_debug
|
||||||
|
" echo 'Generating HTML ... '
|
||||||
|
"endif
|
||||||
|
|
||||||
|
call vimwiki#base#mkdir(path_html)
|
||||||
|
|
||||||
" nohtml placeholder -- to skip html generation.
|
" nohtml placeholder -- to skip html generation.
|
||||||
let nohtml = 0
|
let nohtml = 0
|
||||||
@@ -1315,6 +1395,7 @@ function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
|||||||
let state.para = 0
|
let state.para = 0
|
||||||
let state.quote = 0
|
let state.quote = 0
|
||||||
let state.pre = [0, 0] " [in_pre, indent_pre]
|
let state.pre = [0, 0] " [in_pre, indent_pre]
|
||||||
|
let state.math = [0, 0] " [in_math, indent_math]
|
||||||
let state.table = []
|
let state.table = []
|
||||||
let state.deflist = 0
|
let state.deflist = 0
|
||||||
let state.lists = []
|
let state.lists = []
|
||||||
@@ -1322,6 +1403,15 @@ function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
|||||||
let state.toc = []
|
let state.toc = []
|
||||||
let state.toc_id = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0 }
|
let state.toc_id = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0 }
|
||||||
|
|
||||||
|
" prepare constants for s:safe_html()
|
||||||
|
let s:lt_pattern = '<'
|
||||||
|
let s:gt_pattern = '>'
|
||||||
|
if g:vimwiki_valid_html_tags != ''
|
||||||
|
let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
||||||
|
let s:lt_pattern = '<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!'
|
||||||
|
let s:gt_pattern = '\%(</\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?\)\@<!>'
|
||||||
|
endif
|
||||||
|
|
||||||
for line in lsource
|
for line in lsource
|
||||||
let oldquote = state.quote
|
let oldquote = state.quote
|
||||||
let [lines, state] = s:parse_line(line, state)
|
let [lines, state] = s:parse_line(line, state)
|
||||||
@@ -1364,6 +1454,7 @@ function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
|||||||
call s:close_tag_quote(state.quote, lines)
|
call s:close_tag_quote(state.quote, lines)
|
||||||
call s:close_tag_para(state.para, lines)
|
call s:close_tag_para(state.para, lines)
|
||||||
call s:close_tag_pre(state.pre, 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_list(state.lists, lines)
|
||||||
call s:close_tag_def_list(state.deflist, lines)
|
call s:close_tag_def_list(state.deflist, lines)
|
||||||
call s:close_tag_table(state.table, lines)
|
call s:close_tag_table(state.table, lines)
|
||||||
@@ -1376,7 +1467,7 @@ function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
|||||||
" processing template variables (refactor to a function)
|
" processing template variables (refactor to a function)
|
||||||
call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")')
|
call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")')
|
||||||
call map(html_lines, 'substitute(v:val, "%root_path%", "'.
|
call map(html_lines, 'substitute(v:val, "%root_path%", "'.
|
||||||
\ s:root_path(subdir) .'", "g")')
|
\ s:root_path(VimwikiGet('subdir')) .'", "g")')
|
||||||
|
|
||||||
let css_name = expand(VimwikiGet('css_name'))
|
let css_name = expand(VimwikiGet('css_name'))
|
||||||
let css_name = substitute(css_name, '\', '/', 'g')
|
let css_name = substitute(css_name, '\', '/', 'g')
|
||||||
@@ -1391,18 +1482,30 @@ function! vimwiki#html#Wiki2HTML(path, wikifile) "{{{
|
|||||||
let html_lines = s:html_insert_contents(html_lines, ldest) " %contents%
|
let html_lines = s:html_insert_contents(html_lines, ldest) " %contents%
|
||||||
|
|
||||||
"" make html file.
|
"" make html file.
|
||||||
call writefile(html_lines, path.htmlfile)
|
call writefile(html_lines, path_html.htmlfile)
|
||||||
|
let done = 1
|
||||||
|
|
||||||
" measure the elapsed time and cut away miliseconds and smaller
|
endif
|
||||||
let elapsedtimestr = matchstr(reltimestr(reltime(starttime)),'\d\+\(\.\d\d\)\=')
|
|
||||||
echon "\r".htmlfile.' written (time: '.elapsedtimestr.'s)'
|
if done == 0
|
||||||
return path.htmlfile
|
echomsg 'vimwiki: conversion to HTML is not supported for this syntax!!!'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" measure the elapsed time
|
||||||
|
let time1 = vimwiki#u#time(starttime) "XXX
|
||||||
|
call VimwikiLog_extend('html',[htmlfile,time1])
|
||||||
|
"if g:vimwiki_debug
|
||||||
|
" echon "\r".htmlfile.' written (time: '.time1.'s)'
|
||||||
|
"endif
|
||||||
|
|
||||||
|
return path_html.htmlfile
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
function! vimwiki#html#WikiAll2HTML(path) "{{{
|
function! vimwiki#html#WikiAll2HTML(path_html) "{{{
|
||||||
if !s:syntax_supported()
|
if !s:syntax_supported() && !s:use_custom_wiki2html()
|
||||||
echomsg 'vimwiki: Only vimwiki_default syntax supported!!!'
|
echomsg 'vimwiki: conversion to HTML is not supported for this syntax!!!'
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -1414,28 +1517,63 @@ function! vimwiki#html#WikiAll2HTML(path) "{{{
|
|||||||
exe 'buffer '.cur_buf
|
exe 'buffer '.cur_buf
|
||||||
let &eventignore = save_eventignore
|
let &eventignore = save_eventignore
|
||||||
|
|
||||||
let path = expand(a:path)
|
let path_html = expand(a:path_html)
|
||||||
call vimwiki#base#mkdir(path)
|
call vimwiki#base#mkdir(path_html)
|
||||||
|
|
||||||
echomsg 'Deleting non-wiki html files...'
|
echomsg 'Deleting non-wiki html files...'
|
||||||
call s:delete_html_files(path)
|
call s:delete_html_files(path_html)
|
||||||
|
|
||||||
echomsg 'Converting wiki to html files...'
|
echomsg 'Converting wiki to html files...'
|
||||||
let setting_more = &more
|
let setting_more = &more
|
||||||
setlocal nomore
|
setlocal nomore
|
||||||
|
|
||||||
|
" temporarily adjust current_subdir global state variable
|
||||||
|
let current_subdir = VimwikiGet('subdir')
|
||||||
|
let current_invsubdir = VimwikiGet('invsubdir')
|
||||||
|
|
||||||
let wikifiles = split(glob(VimwikiGet('path').'**/*'.VimwikiGet('ext')), '\n')
|
let wikifiles = split(glob(VimwikiGet('path').'**/*'.VimwikiGet('ext')), '\n')
|
||||||
for wikifile in wikifiles
|
for wikifile in wikifiles
|
||||||
|
let wikifile = fnamemodify(wikifile, ":p")
|
||||||
|
|
||||||
|
" temporarily adjust 'subdir' and 'invsubdir' state variables
|
||||||
|
let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile)
|
||||||
|
call VimwikiSet('subdir', subdir)
|
||||||
|
call VimwikiSet('invsubdir', vimwiki#base#invsubdir(subdir))
|
||||||
|
|
||||||
if !s:is_html_uptodate(wikifile)
|
if !s:is_html_uptodate(wikifile)
|
||||||
echomsg 'Processing '.wikifile
|
echomsg 'Processing '.wikifile
|
||||||
call vimwiki#html#Wiki2HTML(path, wikifile)
|
|
||||||
|
call vimwiki#html#Wiki2HTML(path_html, wikifile)
|
||||||
else
|
else
|
||||||
echomsg 'Skipping '.wikifile
|
echomsg 'Skipping '.wikifile
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
call s:create_default_CSS(path)
|
" reset 'subdir' state variable
|
||||||
|
call VimwikiSet('subdir', current_subdir)
|
||||||
|
call VimwikiSet('invsubdir', current_invsubdir)
|
||||||
|
|
||||||
|
call s:create_default_CSS(path_html)
|
||||||
echomsg 'Done!'
|
echomsg 'Done!'
|
||||||
|
|
||||||
let &more = setting_more
|
let &more = setting_more
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:file_exists(fname) "{{{
|
||||||
|
return !empty(getftype(a:fname))
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" uses VimwikiGet('path')
|
||||||
|
function! vimwiki#html#get_wikifile_url(wikifile) "{{{
|
||||||
|
return VimwikiGet('path_html').
|
||||||
|
\ vimwiki#base#subdir(VimwikiGet('path'), a:wikifile).
|
||||||
|
\ fnamemodify(a:wikifile, ":t:r").'.html'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#html#PasteUrl(wikifile) "{{{
|
||||||
|
execute 'r !echo file://'.vimwiki#html#get_wikifile_url(a:wikifile)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#html#CatUrl(wikifile) "{{{
|
||||||
|
execute '!echo file://'.vimwiki#html#get_wikifile_url(a:wikifile)
|
||||||
|
endfunction "}}}
|
||||||
"}}}
|
"}}}
|
||||||
@@ -15,24 +15,36 @@ let s:rx_li_box = '\[.\?\]'
|
|||||||
|
|
||||||
" Script functions {{{
|
" Script functions {{{
|
||||||
|
|
||||||
|
" Get unicode string symbol at index
|
||||||
|
function! s:str_idx(str, idx) "{{{
|
||||||
|
" Unfortunatly vimscript cannot get symbol at index in unicode string such as
|
||||||
|
" '✗○◐●✓'
|
||||||
|
return matchstr(a:str, '\%'.a:idx.'v.')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
" Get checkbox regexp
|
" Get checkbox regexp
|
||||||
function! s:rx_li_symbol(rate) "{{{
|
function! s:rx_li_symbol(rate) "{{{
|
||||||
let result = ''
|
let result = ''
|
||||||
if a:rate == 100
|
if a:rate == 100
|
||||||
let result = g:vimwiki_listsyms[4]
|
let result = s:str_idx(g:vimwiki_listsyms, 5)
|
||||||
elseif a:rate == 0
|
elseif a:rate == 0
|
||||||
let result = g:vimwiki_listsyms[0]
|
let result = s:str_idx(g:vimwiki_listsyms, 1)
|
||||||
elseif a:rate >= 67
|
elseif a:rate >= 67
|
||||||
let result = g:vimwiki_listsyms[3]
|
let result = s:str_idx(g:vimwiki_listsyms, 4)
|
||||||
elseif a:rate >= 34
|
elseif a:rate >= 34
|
||||||
let result = g:vimwiki_listsyms[2]
|
let result = s:str_idx(g:vimwiki_listsyms, 3)
|
||||||
else
|
else
|
||||||
let result = g:vimwiki_listsyms[1]
|
let result = s:str_idx(g:vimwiki_listsyms, 2)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return '\['.result.'\]'
|
return '\['.result.'\]'
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Get blank checkbox
|
||||||
|
function! s:blank_checkbox() "{{{
|
||||||
|
return '['.s:str_idx(g:vimwiki_listsyms, 1).'] '
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
" Get regexp of the list item.
|
" Get regexp of the list item.
|
||||||
function! s:rx_list_item() "{{{
|
function! s:rx_list_item() "{{{
|
||||||
return '\('.g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.'\)'
|
return '\('.g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.'\)'
|
||||||
@@ -46,7 +58,7 @@ endfunction "}}}
|
|||||||
" Get level of the list item.
|
" Get level of the list item.
|
||||||
function! s:get_level(lnum) "{{{
|
function! s:get_level(lnum) "{{{
|
||||||
if VimwikiGet('syntax') == 'media'
|
if VimwikiGet('syntax') == 'media'
|
||||||
let level = vimwiki#base#count_first_sym(getline(a:lnum))
|
let level = vimwiki#u#count_first_sym(getline(a:lnum))
|
||||||
else
|
else
|
||||||
let level = indent(a:lnum)
|
let level = indent(a:lnum)
|
||||||
endif
|
endif
|
||||||
@@ -222,7 +234,7 @@ function! s:create_cb_list_item(lnum) "{{{
|
|||||||
let m = matchstr(line, s:rx_list_item())
|
let m = matchstr(line, s:rx_list_item())
|
||||||
if m != ''
|
if m != ''
|
||||||
let li_content = substitute(strpart(line, len(m)), '^\s*', '', '')
|
let li_content = substitute(strpart(line, len(m)), '^\s*', '', '')
|
||||||
let line = substitute(m, '\s*$', ' ', '').'[ ] '.li_content
|
let line = substitute(m, '\s*$', ' ', '').s:blank_checkbox().li_content
|
||||||
call setline(a:lnum, line)
|
call setline(a:lnum, line)
|
||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@@ -320,7 +332,7 @@ function! vimwiki#lst#kbd_cr() "{{{
|
|||||||
" This function is heavily relies on proper 'set comments' option.
|
" This function is heavily relies on proper 'set comments' option.
|
||||||
let cr = "\<CR>"
|
let cr = "\<CR>"
|
||||||
if getline('.') =~ s:rx_cb_list_item()
|
if getline('.') =~ s:rx_cb_list_item()
|
||||||
let cr .= '[ ] '
|
let cr .= s:blank_checkbox()
|
||||||
endif
|
endif
|
||||||
return cr
|
return cr
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
@@ -341,11 +353,10 @@ function! vimwiki#lst#kbd_oO(cmd) "{{{
|
|||||||
let lnum = line('.')
|
let lnum = line('.')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" let line = substitute(m, '\s*$', ' ', '').'[ ] '.li_content
|
|
||||||
let m = matchstr(line, s:rx_list_item())
|
let m = matchstr(line, s:rx_list_item())
|
||||||
let res = ''
|
let res = ''
|
||||||
if line =~ s:rx_cb_list_item()
|
if line =~ s:rx_cb_list_item()
|
||||||
let res = substitute(m, '\s*$', ' ', '').'[ ] '
|
let res = substitute(m, '\s*$', ' ', '').s:blank_checkbox()
|
||||||
elseif line =~ s:rx_list_item()
|
elseif line =~ s:rx_list_item()
|
||||||
let res = substitute(m, '\s*$', ' ', '')
|
let res = substitute(m, '\s*$', ' ', '')
|
||||||
elseif &autoindent || &smartindent
|
elseif &autoindent || &smartindent
|
||||||
@@ -367,3 +378,178 @@ function! vimwiki#lst#kbd_oO(cmd) "{{{
|
|||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#lst#default_symbol() "{{{
|
||||||
|
" TODO: initialize default symbol from syntax/vimwiki_xxx.vim
|
||||||
|
if VimwikiGet('syntax') == 'default'
|
||||||
|
return '-'
|
||||||
|
else
|
||||||
|
return '*'
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function vimwiki#lst#get_list_margin() "{{{
|
||||||
|
if VimwikiGet('list_margin') < 0
|
||||||
|
return &sw
|
||||||
|
else
|
||||||
|
return VimwikiGet('list_margin')
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:get_list_sw() "{{{
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
return &sw
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:get_list_nesting_level(lnum) "{{{
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
if getline(a:lnum) !~ s:rx_list_item()
|
||||||
|
let level = 0
|
||||||
|
else
|
||||||
|
let level = vimwiki#u#count_first_sym(getline(a:lnum)) - 1
|
||||||
|
let level = level < 0 ? 0 : level
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let level = indent(a:lnum)
|
||||||
|
endif
|
||||||
|
return level
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:get_list_indent(lnum) "{{{
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
return indent(a:lnum)
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:compose_list_item(n_indent, n_nesting, sym_nest, sym_bullet, li_content, ...) "{{{
|
||||||
|
if a:0
|
||||||
|
let sep = a:1
|
||||||
|
else
|
||||||
|
let sep = ''
|
||||||
|
endif
|
||||||
|
let li_indent = repeat(' ', max([0,a:n_indent])).sep
|
||||||
|
let li_nesting = repeat(a:sym_nest, max([0,a:n_nesting])).sep
|
||||||
|
if len(a:sym_bullet) > 0
|
||||||
|
let li_bullet = a:sym_bullet.' '.sep
|
||||||
|
else
|
||||||
|
let li_bullet = ''.sep
|
||||||
|
endif
|
||||||
|
return li_indent.li_nesting.li_bullet.a:li_content
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function s:compose_cb_bullet(prev_cb_bullet, sym) "{{{
|
||||||
|
return a:sym.matchstr(a:prev_cb_bullet, '\S*\zs\s\+.*')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#lst#change_level(...) "{{{
|
||||||
|
let default_sym = vimwiki#lst#default_symbol()
|
||||||
|
let cmd = '>>'
|
||||||
|
let sym = default_sym
|
||||||
|
|
||||||
|
" parse argument
|
||||||
|
if a:0
|
||||||
|
if a:1 != '<<' && a:1 != '>>'
|
||||||
|
let cmd = '--'
|
||||||
|
let sym = a:1
|
||||||
|
else
|
||||||
|
let cmd = a:1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" is symbol valid
|
||||||
|
if sym.' ' !~ s:rx_cb_list_item() && sym.' ' !~ s:rx_list_item()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" parsing setup
|
||||||
|
let lnum = line('.')
|
||||||
|
let line = getline('.')
|
||||||
|
|
||||||
|
let list_margin = vimwiki#lst#get_list_margin()
|
||||||
|
let list_sw = s:get_list_sw()
|
||||||
|
let n_nesting = s:get_list_nesting_level(lnum)
|
||||||
|
let n_indent = s:get_list_indent(lnum)
|
||||||
|
|
||||||
|
" remove indent and nesting
|
||||||
|
let li_bullet_and_content = strpart(line, n_nesting + n_indent)
|
||||||
|
|
||||||
|
" list bullet and checkbox
|
||||||
|
let cb_bullet = matchstr(li_bullet_and_content, s:rx_list_item()).
|
||||||
|
\ matchstr(li_bullet_and_content, s:rx_cb_list_item())
|
||||||
|
|
||||||
|
" XXX: it could be not unicode proof --> if checkboxes are set up with unicode syms
|
||||||
|
" content
|
||||||
|
let li_content = strpart(li_bullet_and_content, len(cb_bullet))
|
||||||
|
|
||||||
|
" trim
|
||||||
|
let cb_bullet = vimwiki#u#trim(cb_bullet)
|
||||||
|
let li_content = vimwiki#u#trim(li_content)
|
||||||
|
|
||||||
|
" nesting symbol
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
if len(cb_bullet) > 0
|
||||||
|
let sym_nest = cb_bullet[0]
|
||||||
|
else
|
||||||
|
let sym_nest = sym
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let sym_nest = ' '
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:vimwiki_debug
|
||||||
|
echomsg "PARSE: Sw [".list_sw."]"
|
||||||
|
echomsg s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content, '|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" change level
|
||||||
|
if cmd == '--'
|
||||||
|
let cb_bullet = s:compose_cb_bullet(cb_bullet, sym)
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
let sym_nest = sym
|
||||||
|
endif
|
||||||
|
elseif cmd == '>>'
|
||||||
|
if cb_bullet == ''
|
||||||
|
let cb_bullet = sym
|
||||||
|
else
|
||||||
|
let n_nesting = n_nesting + list_sw
|
||||||
|
endif
|
||||||
|
elseif cmd == '<<'
|
||||||
|
let n_nesting = n_nesting - list_sw
|
||||||
|
if VimwikiGet('syntax') == 'media'
|
||||||
|
if n_nesting < 0
|
||||||
|
let cb_bullet = ''
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if n_nesting < list_margin
|
||||||
|
let cb_bullet = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
let n_nesting = max([0, n_nesting])
|
||||||
|
|
||||||
|
if g:vimwiki_debug
|
||||||
|
echomsg "SHIFT:"
|
||||||
|
echomsg s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content, '|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" XXX: this is the code that adds the initial indent
|
||||||
|
let add_nesting = VimwikiGet('syntax') != 'media'
|
||||||
|
if n_indent + n_nesting*(add_nesting) < list_margin
|
||||||
|
let n_indent = list_margin - n_nesting*(add_nesting)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:vimwiki_debug
|
||||||
|
echomsg "INDENT:"
|
||||||
|
echomsg s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content, '|')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = s:compose_list_item(n_indent, n_nesting, sym_nest, cb_bullet, li_content)
|
||||||
|
|
||||||
|
" replace
|
||||||
|
call setline(lnum, line)
|
||||||
|
call cursor(lnum, match(line, '\S') + 1)
|
||||||
|
endfunction "}}}
|
||||||
111
bundle/git_vimwiki/autoload/vimwiki/markdown_base.vim
Normal file
111
bundle/git_vimwiki/autoload/vimwiki/markdown_base.vim
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki autoload plugin file
|
||||||
|
" Desc: Link functions for markdown syntax
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
|
||||||
|
function! s:normalize_link_syntax_n() " {{{
|
||||||
|
let lnum = line('.')
|
||||||
|
|
||||||
|
" try WikiIncl
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiIncl)
|
||||||
|
if !empty(lnk)
|
||||||
|
" NO-OP !!
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WikiIncl: ".lnk." Sub: ".lnk
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try WikiLink0: replace with WikiLink1
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink0)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr,
|
||||||
|
\ g:vimwiki_WikiLink1Template2)
|
||||||
|
call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink0, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WikiLink: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try WikiLink1: replace with WikiLink0
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink1)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr,
|
||||||
|
\ g:vimwiki_WikiLinkTemplate2)
|
||||||
|
call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink1, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WikiLink: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" try Weblink
|
||||||
|
let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWeblink)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWeblinkMatchUrl, g:vimwiki_rxWeblinkMatchDescr,
|
||||||
|
\ g:vimwiki_Weblink1Template)
|
||||||
|
call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWeblink, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "WebLink: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
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(g:vimwiki_rxWord)
|
||||||
|
if !empty(lnk)
|
||||||
|
let sub = vimwiki#base#normalize_link_helper(lnk,
|
||||||
|
\ g:vimwiki_rxWord, '',
|
||||||
|
\ g:vimwiki_WikiLinkTemplate1)
|
||||||
|
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echomsg "Word: ".lnk." Sub: ".sub
|
||||||
|
endif
|
||||||
|
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 visual_selection = substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', '\='."'".visual_selection."'", '')
|
||||||
|
|
||||||
|
call setreg('"', visual_selection, 'v')
|
||||||
|
|
||||||
|
" paste result
|
||||||
|
norm! `>pgvd
|
||||||
|
|
||||||
|
finally
|
||||||
|
call setreg('"', rv, rt)
|
||||||
|
let &selection = sel_save
|
||||||
|
endtry
|
||||||
|
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
" normalize_link
|
||||||
|
function! vimwiki#markdown_base#normalize_link(is_visual_mode) "{{{
|
||||||
|
if !a:is_visual_mode
|
||||||
|
call s:normalize_link_syntax_n()
|
||||||
|
elseif visualmode() ==# 'v' && line("'<") == line("'>")
|
||||||
|
" action undefined for 'line-wise' or 'multi-line' visual mode selections
|
||||||
|
call s:normalize_link_syntax_v()
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
79
bundle/git_vimwiki/autoload/vimwiki/style.css
Normal file
79
bundle/git_vimwiki/autoload/vimwiki/style.css
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
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;}
|
||||||
|
|
||||||
|
/* classes for items of todo lists */
|
||||||
|
.done0 {
|
||||||
|
/* list-style: none; */
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAA7SURBVCiR7dMxEgAgCANBI3yVRzF5KxNbW6wsuH7LQ2YKQK1mkswBVERYF5Os3UV3gwd/jF2SkXy66gAZkxS6BniubAAAAABJRU5ErkJggg==);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 .2em;
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
.done1 {
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABtSURBVCiR1ZO7DYAwDER9BDmTeZQMFXmUbGYpOjrEryA0wOvO8itOslFrJYAug5BMM4BeSkmjsrv3aVTa8p48Xw1JSkSsWVUFwD05IqS1tmYzk5zzae9jnVVVzGyXb8sALjse+euRkEzu/uirFomVIdDGOLjuAAAAAElFTkSuQmCC);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 .15em;
|
||||||
|
margin-left: -2em;
|
||||||
|
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;
|
||||||
|
margin-left: -2em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
}
|
||||||
|
.done3 {
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAxQAAAMUBHc26qAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABoSURBVCiR7dOxDcAgDATA/0DtUdiKoZC3YhLkHjkVKF3idJHiztKfvrHZWnOSE8Fx95RJzlprimJVnXktvXeY2S0SEZRSAAAbmxnGGKH2I5T+8VfxPhIReQSuuY3XyYWa3T2p6quvOgGrvSFGlewuUAAAAABJRU5ErkJggg==);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 .15em;
|
||||||
|
margin-left: -2em;
|
||||||
|
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;
|
||||||
|
margin-left: -2em;
|
||||||
|
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;
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
" Vimwiki autoload plugin file
|
" Vimwiki autoload plugin file
|
||||||
" Desc: Tables
|
" Desc: Tables
|
||||||
" | Easily | manageable | text | tables | ! |
|
" | Easily | manageable | text | tables | ! |
|
||||||
" |--------+------------+-------+--------+---------|
|
" |--------|------------|-------|--------|---------|
|
||||||
" | Have | fun! | Drink | tea | Period. |
|
" | Have | fun! | Drink | tea | Period. |
|
||||||
"
|
"
|
||||||
" Author: Maxim Kim <habamax@gmail.com>
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
@@ -16,6 +16,8 @@ let g:loaded_vimwiki_tbl_auto = 1
|
|||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
let s:textwidth = &tw
|
let s:textwidth = &tw
|
||||||
|
let s:rxSep = g:vimwiki_rxTableSep
|
||||||
|
|
||||||
|
|
||||||
" Misc functions {{{
|
" Misc functions {{{
|
||||||
function! s:wide_len(str) "{{{
|
function! s:wide_len(str) "{{{
|
||||||
@@ -40,21 +42,37 @@ function! s:wide_len(str) "{{{
|
|||||||
return ret
|
return ret
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:cell_splitter() "{{{
|
||||||
|
return '\s*'.s:rxSep.'\s*'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:sep_splitter() "{{{
|
||||||
|
return '-'.s:rxSep.'-'
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_table(line) "{{{
|
function! s:is_table(line) "{{{
|
||||||
return a:line =~ '^\s*\%(|[^|]\+\)\+|\s*$' || s:is_separator(a:line)
|
return s:is_separator(a:line) || (a:line !~ s:rxSep.s:rxSep && a:line =~ '^\s*'.s:rxSep.'.\+'.s:rxSep.'\s*$')
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_separator(line) "{{{
|
function! s:is_separator(line) "{{{
|
||||||
return a:line =~ '^\s*[|+]\s*--[-|+]\+'
|
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 "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_last_column(lnum, cnum) "{{{
|
function! s:is_last_column(lnum, cnum) "{{{
|
||||||
return strpart(getline(a:lnum), a:cnum - 1) =~ '^[^|]*|\s*$'
|
let line = strpart(getline(a:lnum), a:cnum - 1)
|
||||||
|
"echomsg "DEBUG is_last_column> ".(line =~ s:rxSep.'\s*$' && line !~ s:rxSep.'.*'.s:rxSep.'\s*$')
|
||||||
|
return line =~ s:rxSep.'\s*$' && line !~ s:rxSep.'.*'.s:rxSep.'\s*$'
|
||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:is_first_column(lnum, cnum) "{{{
|
function! s:is_first_column(lnum, cnum) "{{{
|
||||||
let line = strpart(getline(a:lnum), 0, a:cnum - 1)
|
let line = strpart(getline(a:lnum), 0, a:cnum - 1)
|
||||||
return line =~ '^\s*|[^|]*$' || line =~ '^\s*$'
|
"echomsg "DEBUG is_first_column> ".(line =~ '^\s*'.s:rxSep && line !~ '^\s*'.s:rxSep.'.*'.s:rxSep)
|
||||||
|
return line =~ '^\s*$' || (line =~ '^\s*'.s:rxSep && line !~ '^\s*'.s:rxSep.'.*'.s:rxSep)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:count_separators_up(lnum) "{{{
|
function! s:count_separators_up(lnum) "{{{
|
||||||
@@ -82,11 +100,10 @@ function! s:count_separators_down(lnum) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:create_empty_row(cols) "{{{
|
function! s:create_empty_row(cols) "{{{
|
||||||
let first_cell = "| |"
|
let row = s:rxSep
|
||||||
let cell = " |"
|
let cell = " ".s:rxSep
|
||||||
let row = first_cell
|
|
||||||
|
|
||||||
for c in range(a:cols - 1)
|
for c in range(a:cols)
|
||||||
let row .= cell
|
let row .= cell
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
@@ -94,36 +111,71 @@ function! s:create_empty_row(cols) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:create_row_sep(cols) "{{{
|
function! s:create_row_sep(cols) "{{{
|
||||||
let first_cell = "|---+"
|
let row = s:rxSep
|
||||||
let cell = "---+"
|
let cell = "---".s:rxSep
|
||||||
let last_cell = "---|"
|
|
||||||
|
|
||||||
if a:cols < 2
|
for c in range(a:cols)
|
||||||
return "|---|"
|
|
||||||
endif
|
|
||||||
|
|
||||||
let row = first_cell
|
|
||||||
|
|
||||||
for c in range(a:cols - 2)
|
|
||||||
let row .= cell
|
let row .= cell
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
let row .= last_cell
|
|
||||||
|
|
||||||
return row
|
return row
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_values(line) "{{{
|
function! vimwiki#tbl#get_cells(line) "{{{
|
||||||
return split(a:line, '\s*|\s*', 1)[1:-2]
|
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 "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:col_count(lnum) "{{{
|
function! s:col_count(lnum) "{{{
|
||||||
let line = getline(a:lnum)
|
return len(vimwiki#tbl#get_cells(getline(a:lnum)))
|
||||||
if !s:is_separator(line)
|
|
||||||
return len(split(line, '\s*|\s*', 1)[1:-2])
|
|
||||||
else
|
|
||||||
return len(split(line, '-+-', 1))
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_indent(lnum) "{{{
|
function! s:get_indent(lnum) "{{{
|
||||||
@@ -155,7 +207,7 @@ function! s:get_rows(lnum) "{{{
|
|||||||
let lower_rows = []
|
let lower_rows = []
|
||||||
|
|
||||||
let lnum = a:lnum - 1
|
let lnum = a:lnum - 1
|
||||||
while lnum > 1
|
while lnum >= 1
|
||||||
let line = getline(lnum)
|
let line = getline(lnum)
|
||||||
if s:is_table(line)
|
if s:is_table(line)
|
||||||
call add(upper_rows, [lnum, line])
|
call add(upper_rows, [lnum, line])
|
||||||
@@ -186,7 +238,7 @@ function! s:get_cell_max_lens(lnum) "{{{
|
|||||||
if s:is_separator(row)
|
if s:is_separator(row)
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
let cells = s:get_values(row)
|
let cells = vimwiki#tbl#get_cells(row)
|
||||||
for idx in range(len(cells))
|
for idx in range(len(cells))
|
||||||
let value = cells[idx]
|
let value = cells[idx]
|
||||||
if has_key(max_lens, idx)
|
if has_key(max_lens, idx)
|
||||||
@@ -219,17 +271,13 @@ function! s:cur_column() "{{{
|
|||||||
if !s:is_table(line)
|
if !s:is_table(line)
|
||||||
return -1
|
return -1
|
||||||
endif
|
endif
|
||||||
if s:is_separator(line)
|
" TODO: do we need conditional: if s:is_separator(line)
|
||||||
let sep = '[+|]'
|
|
||||||
else
|
|
||||||
let sep = '|'
|
|
||||||
endif
|
|
||||||
|
|
||||||
let curs_pos = col('.')
|
let curs_pos = col('.')
|
||||||
let mpos = match(line, '|', 0)
|
let mpos = match(line, s:rxSep, 0)
|
||||||
let col = -1
|
let col = -1
|
||||||
while mpos < curs_pos && mpos != -1
|
while mpos < curs_pos && mpos != -1
|
||||||
let mpos = match(line, sep, mpos+1)
|
let mpos = match(line, s:rxSep, mpos+1)
|
||||||
if mpos != -1
|
if mpos != -1
|
||||||
let col += 1
|
let col += 1
|
||||||
endif
|
endif
|
||||||
@@ -253,8 +301,8 @@ function! s:fmt_cell(cell, max_len) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
||||||
let new_line = '|'
|
let new_line = s:rxSep
|
||||||
let cells = s:get_values(a:line)
|
let cells = vimwiki#tbl#get_cells(a:line)
|
||||||
for idx in range(len(cells))
|
for idx in range(len(cells))
|
||||||
if idx == a:col1
|
if idx == a:col1
|
||||||
let idx = a:col2
|
let idx = a:col2
|
||||||
@@ -262,12 +310,12 @@ function! s:fmt_row(line, max_lens, col1, col2) "{{{
|
|||||||
let idx = a:col1
|
let idx = a:col1
|
||||||
endif
|
endif
|
||||||
let value = cells[idx]
|
let value = cells[idx]
|
||||||
let new_line .= s:fmt_cell(value, a:max_lens[idx]).'|'
|
let new_line .= s:fmt_cell(value, a:max_lens[idx]).s:rxSep
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
let idx = len(cells)
|
let idx = len(cells)
|
||||||
while idx < len(a:max_lens)
|
while idx < len(a:max_lens)
|
||||||
let new_line .= s:fmt_cell('', a:max_lens[idx]).'|'
|
let new_line .= s:fmt_cell('', a:max_lens[idx]).s:rxSep
|
||||||
let idx += 1
|
let idx += 1
|
||||||
endwhile
|
endwhile
|
||||||
return new_line
|
return new_line
|
||||||
@@ -282,17 +330,16 @@ function! s:fmt_cell_sep(max_len) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:fmt_sep(max_lens, col1, col2) "{{{
|
function! s:fmt_sep(max_lens, col1, col2) "{{{
|
||||||
let sep = '|'
|
let new_line = s:rxSep
|
||||||
for idx in range(len(a:max_lens))
|
for idx in range(len(a:max_lens))
|
||||||
if idx == a:col1
|
if idx == a:col1
|
||||||
let idx = a:col2
|
let idx = a:col2
|
||||||
elseif idx == a:col2
|
elseif idx == a:col2
|
||||||
let idx = a:col1
|
let idx = a:col1
|
||||||
endif
|
endif
|
||||||
let sep .= s:fmt_cell_sep(a:max_lens[idx]).'+'
|
let new_line .= s:fmt_cell_sep(a:max_lens[idx]).s:rxSep
|
||||||
endfor
|
endfor
|
||||||
let sep = substitute(sep, '+$', '|', '')
|
return new_line
|
||||||
return sep
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
@@ -300,41 +347,94 @@ endfunction "}}}
|
|||||||
function! s:kbd_create_new_row(cols, goto_first) "{{{
|
function! s:kbd_create_new_row(cols, goto_first) "{{{
|
||||||
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
let cmd = "\<ESC>o".s:create_empty_row(a:cols)
|
||||||
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
|
let cmd .= "\<ESC>:call vimwiki#tbl#format(line('.'))\<CR>"
|
||||||
|
let cmd .= "\<ESC>0"
|
||||||
if a:goto_first
|
if a:goto_first
|
||||||
let cmd .= "\<ESC>0:call search('|', 'c', line('.'))\<CR>la"
|
let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'c', line('.'))\<CR>"
|
||||||
else
|
else
|
||||||
let cmd .= "0".(col('.')-1)."lT|a"
|
let cmd .= (col('.')-1)."l"
|
||||||
|
let cmd .= ":call search('\\(".s:rxSep."\\)\\zs', 'bc', line('.'))\<CR>"
|
||||||
endif
|
endif
|
||||||
|
let cmd .= "a"
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_next_row() "{{{
|
function! s:kbd_goto_next_row() "{{{
|
||||||
let cmd = "\<ESC>jt|T|a"
|
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
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_prev_row() "{{{
|
function! s:kbd_goto_prev_row() "{{{
|
||||||
let cmd = "\<ESC>jt|T|a"
|
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
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_next_col(last) "{{{
|
" Used in s:kbd_goto_next_col
|
||||||
if a:last
|
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 seps = s:count_separators_down(line('.'))
|
||||||
let cmd = "\<ESC>".seps."j0:call search('|', 'c', line('.'))\<CR>la"
|
let cmd .= seps."j0"
|
||||||
else
|
|
||||||
let cmd = "\<ESC>:call search('|', 'c', line('.'))\<CR>la"
|
|
||||||
endif
|
endif
|
||||||
|
let cmd .= ":call vimwiki#tbl#goto_next_col()\<CR>a"
|
||||||
return cmd
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:kbd_goto_prev_col(first) "{{{
|
" Used in s:kbd_goto_prev_col
|
||||||
if a:first
|
function! vimwiki#tbl#goto_prev_col() "{{{
|
||||||
let seps = s:count_separators_up(line('.'))
|
let curcol = virtcol('.')
|
||||||
let cmd = "\<ESC>".seps."k$:call search('|', 'b', line('.'))\<CR>la"
|
let lnum = line('.')
|
||||||
else
|
let newcol = s:get_indent(lnum)
|
||||||
let cmd = "\<ESC>2F|la"
|
let max_lens = s:get_cell_max_lens(lnum)
|
||||||
|
let prev_cell_len = 0
|
||||||
|
echom string(max_lens)
|
||||||
|
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
|
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
|
return cmd
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
@@ -348,7 +448,7 @@ function! vimwiki#tbl#kbd_cr() "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1))
|
if s:is_separator(getline(lnum+1)) || !s:is_table(getline(lnum+1))
|
||||||
let cols = len(s:get_values(getline(lnum)))
|
let cols = len(vimwiki#tbl#get_cells(getline(lnum)))
|
||||||
return s:kbd_create_new_row(cols, 0)
|
return s:kbd_create_new_row(cols, 0)
|
||||||
else
|
else
|
||||||
return s:kbd_goto_next_row()
|
return s:kbd_goto_next_row()
|
||||||
@@ -362,11 +462,13 @@ function! vimwiki#tbl#kbd_tab() "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let last = s:is_last_column(lnum, col('.'))
|
let last = s:is_last_column(lnum, col('.'))
|
||||||
if last && !s:is_table(getline(lnum+1))
|
let is_sep = s:is_separator_tail(getline(lnum))
|
||||||
let cols = len(s:get_values(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)
|
return s:kbd_create_new_row(cols, 1)
|
||||||
endif
|
endif
|
||||||
return s:kbd_goto_next_col(last)
|
return s:kbd_goto_next_col(is_sep || last)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#kbd_shift_tab() "{{{
|
function! vimwiki#tbl#kbd_shift_tab() "{{{
|
||||||
@@ -376,10 +478,12 @@ function! vimwiki#tbl#kbd_shift_tab() "{{{
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let first = s:is_first_column(lnum, col('.'))
|
let first = s:is_first_column(lnum, col('.'))
|
||||||
if first && !s:is_table(getline(lnum-1))
|
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 ""
|
return ""
|
||||||
endif
|
endif
|
||||||
return s:kbd_goto_prev_col(first)
|
return s:kbd_goto_prev_col(is_sep || first)
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#format(lnum, ...) "{{{
|
function! vimwiki#tbl#format(lnum, ...) "{{{
|
||||||
@@ -462,7 +566,12 @@ endfunction "}}}
|
|||||||
" TODO: move_column_left and move_column_right are good candidates to be
|
" TODO: move_column_left and move_column_right are good candidates to be
|
||||||
" refactored.
|
" refactored.
|
||||||
function! vimwiki#tbl#move_column_left() "{{{
|
function! vimwiki#tbl#move_column_left() "{{{
|
||||||
if !s:is_table(getline('.'))
|
|
||||||
|
"echomsg "DEBUG move_column_left: "
|
||||||
|
|
||||||
|
let line = getline('.')
|
||||||
|
|
||||||
|
if !s:is_table(line)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -474,16 +583,28 @@ function! vimwiki#tbl#move_column_left() "{{{
|
|||||||
if cur_col > 0
|
if cur_col > 0
|
||||||
call vimwiki#tbl#format(line('.'), cur_col-1, cur_col)
|
call vimwiki#tbl#format(line('.'), cur_col-1, cur_col)
|
||||||
call cursor(line('.'), 1)
|
call cursor(line('.'), 1)
|
||||||
if !s:is_separator(getline('.'))
|
|
||||||
call search('\%(|[^|]\+\)\{'.(cur_col-1).'}| .', 'eW')
|
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
|
else
|
||||||
call search('|\%([^+]\++\)\{'.(cur_col-1).'}--', 'eW')
|
break
|
||||||
endif
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#move_column_right() "{{{
|
function! vimwiki#tbl#move_column_right() "{{{
|
||||||
if !s:is_table(getline('.'))
|
|
||||||
|
let line = getline('.')
|
||||||
|
|
||||||
|
if !s:is_table(line)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -495,16 +616,41 @@ function! vimwiki#tbl#move_column_right() "{{{
|
|||||||
if cur_col < s:col_count(line('.'))-1
|
if cur_col < s:col_count(line('.'))-1
|
||||||
call vimwiki#tbl#format(line('.'), cur_col, cur_col+1)
|
call vimwiki#tbl#format(line('.'), cur_col, cur_col+1)
|
||||||
call cursor(line('.'), 1)
|
call cursor(line('.'), 1)
|
||||||
if !s:is_separator(getline('.'))
|
|
||||||
call search('\%(|[^|]\+\)\{'.(cur_col+1).'}| .', 'eW')
|
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
|
else
|
||||||
call search('|\%([^+]\++\)\{'.(cur_col+1).'}--', 'eW')
|
break
|
||||||
endif
|
endif
|
||||||
|
endwhile
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! vimwiki#tbl#get_rows(lnum) "{{{
|
function! vimwiki#tbl#get_rows(lnum) "{{{
|
||||||
return s:get_rows(a:lnum)
|
return s:get_rows(a:lnum)
|
||||||
endfunction "}}}
|
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 "}}}
|
||||||
|
|
||||||
"}}}
|
"}}}
|
||||||
77
bundle/git_vimwiki/autoload/vimwiki/u.vim
Normal file
77
bundle/git_vimwiki/autoload/vimwiki/u.vim
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki autoload plugin file
|
||||||
|
" Utility functions
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/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#chomp_slash(str) "{{{
|
||||||
|
return substitute(a:str, '[/\\]\+$', '', '')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#time(starttime) "{{{
|
||||||
|
" measure the elapsed time and cut away miliseconds and smaller
|
||||||
|
return matchstr(reltimestr(reltime(a:starttime)),'\d\+\(\.\d\d\)\=')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#path_norm(path) "{{{
|
||||||
|
" /-slashes
|
||||||
|
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)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! vimwiki#u#is_link_to_dir(link) "{{{
|
||||||
|
" Check if link is to a directory.
|
||||||
|
" It should be ended with \ or /.
|
||||||
|
if a:link =~ '.\+[/\\]$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! vimwiki#u#count_first_sym(line) "{{{
|
||||||
|
let first_sym = matchstr(a:line, '\S')
|
||||||
|
return len(matchstr(a:line, first_sym.'\+'))
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" return longest common path prefix of 2 given paths.
|
||||||
|
" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
|
||||||
|
function! vimwiki#u#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) && (p1[idx] ==? p2[idx])
|
||||||
|
let idx = idx + 1
|
||||||
|
endwhile
|
||||||
|
if idx == 0
|
||||||
|
return ''
|
||||||
|
else
|
||||||
|
return join(p1[: idx-1], '/')
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -35,13 +35,17 @@ setlocal isfname-=[,]
|
|||||||
|
|
||||||
" Autocreate list items {{{
|
" Autocreate list items {{{
|
||||||
" for list items, and list items with checkboxes
|
" for list items, and list items with checkboxes
|
||||||
|
setlocal formatoptions+=tnro
|
||||||
|
setlocal formatoptions-=cq
|
||||||
if VimwikiGet('syntax') == 'default'
|
if VimwikiGet('syntax') == 'default'
|
||||||
setl comments=b:*,b:#,b:-
|
setl comments=b:*,b:#,b:-
|
||||||
setl formatlistpat=^\\s*[*#-]\\s*
|
setl formatlistpat=^\\s*[*#-]\\s*
|
||||||
|
elseif VimwikiGet('syntax') == 'markdown'
|
||||||
|
setlocal comments=fb:*,fb:-,fb:+,nb:> commentstring=\ >\ %s
|
||||||
|
setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+j
|
||||||
else
|
else
|
||||||
setl comments=n:*,n:#
|
setl comments=n:*,n:#
|
||||||
endif
|
endif
|
||||||
setlocal formatoptions=tnro
|
|
||||||
|
|
||||||
if !empty(&langmap)
|
if !empty(&langmap)
|
||||||
" Valid only if langmap is a comma separated pairs of chars
|
" Valid only if langmap is a comma separated pairs of chars
|
||||||
@@ -64,23 +68,15 @@ function! VimwikiFoldLevel(lnum) "{{{
|
|||||||
|
|
||||||
" Header folding...
|
" Header folding...
|
||||||
if line =~ g:vimwiki_rxHeader
|
if line =~ g:vimwiki_rxHeader
|
||||||
let n = vimwiki#base#count_first_sym(line)
|
let n = vimwiki#u#count_first_sym(line)
|
||||||
return '>'.n
|
return '>'.n
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:vimwiki_fold_trailing_empty_lines == 0 && line =~ '^\s*$'
|
let base_level = s:get_base_level(a:lnum)
|
||||||
let nnline = getline(nextnonblank(a:lnum + 1))
|
|
||||||
else
|
|
||||||
let nnline = getline(a:lnum + 1)
|
|
||||||
endif
|
|
||||||
if nnline =~ g:vimwiki_rxHeader
|
|
||||||
let n = vimwiki#base#count_first_sym(nnline)
|
|
||||||
return '<'.n
|
|
||||||
endif
|
|
||||||
|
|
||||||
" List item folding...
|
" List item folding...
|
||||||
if g:vimwiki_fold_lists
|
if g:vimwiki_fold_lists
|
||||||
let base_level = s:get_base_level(a:lnum)
|
let nnline = getline(a:lnum + 1)
|
||||||
|
|
||||||
let rx_list_item = '\('.
|
let rx_list_item = '\('.
|
||||||
\ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.
|
\ g:vimwiki_rxListBullet.'\|'.g:vimwiki_rxListNumber.
|
||||||
@@ -95,6 +91,10 @@ function! VimwikiFoldLevel(lnum) "{{{
|
|||||||
|
|
||||||
if leveln > level
|
if leveln > level
|
||||||
return ">".(base_level+leveln-adj)
|
return ">".(base_level+leveln-adj)
|
||||||
|
" check if multilined list item
|
||||||
|
elseif (nnum-a:lnum) > 1
|
||||||
|
\ && nline =~ rx_list_item && nnline !~ '^\s*$'
|
||||||
|
return ">".(base_level+level+1-adj)
|
||||||
else
|
else
|
||||||
return (base_level+level-adj)
|
return (base_level+level-adj)
|
||||||
endif
|
endif
|
||||||
@@ -102,34 +102,23 @@ function! VimwikiFoldLevel(lnum) "{{{
|
|||||||
" process multilined list items
|
" process multilined list items
|
||||||
let [pnum, pline] = s:find_backward(rx_list_item, a:lnum)
|
let [pnum, pline] = s:find_backward(rx_list_item, a:lnum)
|
||||||
if pline =~ rx_list_item
|
if pline =~ rx_list_item
|
||||||
if indent(a:lnum) > indent(pnum)
|
if indent(a:lnum) >= indent(pnum) && line !~ '^\s*$'
|
||||||
let level = s:get_li_level(pnum)
|
let level = s:get_li_level(pnum)
|
||||||
let adj = s:get_li_level(s:get_start_list(rx_list_item, pnum))
|
let adj = s:get_li_level(s:get_start_list(rx_list_item, pnum))
|
||||||
|
return (base_level+level+1-adj)
|
||||||
let [nnum, nline] = s:find_forward(rx_list_item, a:lnum)
|
|
||||||
if nline =~ rx_list_item
|
|
||||||
let leveln = s:get_li_level(nnum)
|
|
||||||
if leveln > level
|
|
||||||
return (base_level+leveln-adj)
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return (base_level+level-adj)
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return base_level
|
return base_level
|
||||||
endif
|
|
||||||
|
|
||||||
return -1
|
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! s:get_base_level(lnum) "{{{
|
function! s:get_base_level(lnum) "{{{
|
||||||
let lnum = a:lnum - 1
|
let lnum = a:lnum - 1
|
||||||
while lnum > 0
|
while lnum > 0
|
||||||
if getline(lnum) =~ g:vimwiki_rxHeader
|
if getline(lnum) =~ g:vimwiki_rxHeader
|
||||||
return vimwiki#base#count_first_sym(getline(lnum))
|
return vimwiki#u#count_first_sym(getline(lnum))
|
||||||
endif
|
endif
|
||||||
let lnum -= 1
|
let lnum -= 1
|
||||||
endwhile
|
endwhile
|
||||||
@@ -169,7 +158,7 @@ endfunction "}}}
|
|||||||
|
|
||||||
function! s:get_li_level(lnum) "{{{
|
function! s:get_li_level(lnum) "{{{
|
||||||
if VimwikiGet('syntax') == 'media'
|
if VimwikiGet('syntax') == 'media'
|
||||||
let level = vimwiki#base#count_first_sym(getline(a:lnum))
|
let level = vimwiki#u#count_first_sym(getline(a:lnum))
|
||||||
else
|
else
|
||||||
let level = (indent(a:lnum) / &sw)
|
let level = (indent(a:lnum) / &sw)
|
||||||
endif
|
endif
|
||||||
@@ -198,11 +187,15 @@ endfunction "}}}
|
|||||||
|
|
||||||
" COMMANDS {{{
|
" COMMANDS {{{
|
||||||
command! -buffer Vimwiki2HTML
|
command! -buffer Vimwiki2HTML
|
||||||
\ w <bar> call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
\ silent w <bar>
|
||||||
|
\ let res = vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
||||||
\ expand('%'))
|
\ expand('%'))
|
||||||
|
\<bar>
|
||||||
|
\ if res != '' | echo 'Vimwiki: HTML conversion is done.' | endif
|
||||||
command! -buffer Vimwiki2HTMLBrowse
|
command! -buffer Vimwiki2HTMLBrowse
|
||||||
\ w <bar> call VimwikiWeblinkHandler(
|
\ silent w <bar>
|
||||||
\ vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
\ call vimwiki#base#system_open_link(vimwiki#html#Wiki2HTML(
|
||||||
|
\ expand(VimwikiGet('path_html')),
|
||||||
\ expand('%')))
|
\ expand('%')))
|
||||||
command! -buffer VimwikiAll2HTML
|
command! -buffer VimwikiAll2HTML
|
||||||
\ call vimwiki#html#WikiAll2HTML(expand(VimwikiGet('path_html')))
|
\ call vimwiki#html#WikiAll2HTML(expand(VimwikiGet('path_html')))
|
||||||
@@ -216,12 +209,17 @@ command! -buffer VimwikiGoBackLink call vimwiki#base#go_back_link()
|
|||||||
command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('split')
|
command! -buffer VimwikiSplitLink call vimwiki#base#follow_link('split')
|
||||||
command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit')
|
command! -buffer VimwikiVSplitLink call vimwiki#base#follow_link('vsplit')
|
||||||
|
|
||||||
|
command! -buffer -nargs=? VimwikiNormalizeLink call vimwiki#base#normalize_link(<f-args>)
|
||||||
|
|
||||||
command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tabnew')
|
command! -buffer VimwikiTabnewLink call vimwiki#base#follow_link('tabnew')
|
||||||
|
|
||||||
command! -buffer -range VimwikiToggleListItem call vimwiki#lst#ToggleListItem(<line1>, <line2>)
|
command! -buffer -range VimwikiToggleListItem call vimwiki#lst#ToggleListItem(<line1>, <line2>)
|
||||||
|
|
||||||
command! -buffer VimwikiGenerateLinks call vimwiki#base#generate_links()
|
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> '.
|
exe 'command! -buffer -nargs=* VimwikiSearch lvimgrep <args> '.
|
||||||
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
|
\ escape(VimwikiGet('path').'**/*'.VimwikiGet('ext'), ' ')
|
||||||
|
|
||||||
@@ -230,6 +228,10 @@ exe 'command! -buffer -nargs=* VWS lvimgrep <args> '.
|
|||||||
|
|
||||||
command! -buffer -nargs=1 VimwikiGoto call vimwiki#base#goto("<args>")
|
command! -buffer -nargs=1 VimwikiGoto call vimwiki#base#goto("<args>")
|
||||||
|
|
||||||
|
|
||||||
|
" list commands
|
||||||
|
command! -buffer -nargs=* VimwikiListChangeLevel call vimwiki#lst#change_level(<f-args>)
|
||||||
|
|
||||||
" table commands
|
" table commands
|
||||||
command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create(<f-args>)
|
command! -buffer -nargs=* VimwikiTable call vimwiki#tbl#create(<f-args>)
|
||||||
command! -buffer VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq')
|
command! -buffer VimwikiTableAlignQ call vimwiki#tbl#align_or_cmd('gqq')
|
||||||
@@ -247,7 +249,7 @@ command! -buffer VimwikiDiaryPrevDay call vimwiki#diary#goto_prev_day()
|
|||||||
if g:vimwiki_use_mouse
|
if g:vimwiki_use_mouse
|
||||||
nmap <buffer> <S-LeftMouse> <NOP>
|
nmap <buffer> <S-LeftMouse> <NOP>
|
||||||
nmap <buffer> <C-LeftMouse> <NOP>
|
nmap <buffer> <C-LeftMouse> <NOP>
|
||||||
nnoremap <silent><buffer> <2-LeftMouse> :VimwikiFollowLink<CR>
|
nnoremap <silent><buffer> <2-LeftMouse> :call vimwiki#base#follow_link("nosplit", "\<lt>2-LeftMouse>")<CR>
|
||||||
nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR>
|
nnoremap <silent><buffer> <S-2-LeftMouse> <LeftMouse>:VimwikiSplitLink<CR>
|
||||||
nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR>
|
nnoremap <silent><buffer> <C-2-LeftMouse> <LeftMouse>:VimwikiVSplitLink<CR>
|
||||||
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
|
nnoremap <silent><buffer> <RightMouse><LeftMouse> :VimwikiGoBackLink<CR>
|
||||||
@@ -284,6 +286,24 @@ endif
|
|||||||
nnoremap <silent><script><buffer>
|
nnoremap <silent><script><buffer>
|
||||||
\ <Plug>VimwikiVSplitLink :VimwikiVSplitLink<CR>
|
\ <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')
|
if !hasmapto('<Plug>VimwikiTabnewLink')
|
||||||
nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
|
nmap <silent><buffer> <D-CR> <Plug>VimwikiTabnewLink
|
||||||
nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
|
nmap <silent><buffer> <C-S-CR> <Plug>VimwikiTabnewLink
|
||||||
@@ -345,7 +365,7 @@ nnoremap <silent><script><buffer>
|
|||||||
|
|
||||||
function! s:CR() "{{{
|
function! s:CR() "{{{
|
||||||
let res = vimwiki#lst#kbd_cr()
|
let res = vimwiki#lst#kbd_cr()
|
||||||
if res == "\<CR>" && g:vimwiki_table_auto_fmt
|
if res == "\<CR>" && g:vimwiki_table_mappings
|
||||||
let res = vimwiki#tbl#kbd_cr()
|
let res = vimwiki#tbl#kbd_cr()
|
||||||
endif
|
endif
|
||||||
return res
|
return res
|
||||||
@@ -357,9 +377,25 @@ inoremap <buffer> <expr> <CR> <SID>CR()
|
|||||||
" List mappings
|
" List mappings
|
||||||
nnoremap <buffer> o :<C-U>call vimwiki#lst#kbd_oO('o')<CR>
|
nnoremap <buffer> o :<C-U>call vimwiki#lst#kbd_oO('o')<CR>
|
||||||
nnoremap <buffer> O :<C-U>call vimwiki#lst#kbd_oO('O')<CR>
|
nnoremap <buffer> O :<C-U>call vimwiki#lst#kbd_oO('O')<CR>
|
||||||
|
nnoremap <buffer> gll :VimwikiListChangeLevel <<<CR>
|
||||||
|
nnoremap <buffer> glm :VimwikiListChangeLevel >><CR>
|
||||||
|
nnoremap <buffer> gl* :VimwikiListChangeLevel *<CR>
|
||||||
|
nnoremap <buffer> gl8 :VimwikiListChangeLevel *<CR>
|
||||||
|
if VimwikiGet('syntax') == 'default'
|
||||||
|
nnoremap <buffer> gl- :VimwikiListChangeLevel -<CR>
|
||||||
|
nnoremap <buffer> gl# :VimwikiListChangeLevel #<CR>
|
||||||
|
nnoremap <buffer> gl3 :VimwikiListChangeLevel #<CR>
|
||||||
|
elseif VimwikiGet('syntax') == 'markdown'
|
||||||
|
nnoremap <buffer> gl- :VimwikiListChangeLevel -<CR>
|
||||||
|
nnoremap <buffer> gl1 :VimwikiListChangeLevel 1.<CR>
|
||||||
|
elseif VimwikiGet('syntax') == 'media'
|
||||||
|
nnoremap <buffer> gl# :VimwikiListChangeLevel #<CR>
|
||||||
|
nnoremap <buffer> gl3 :VimwikiListChangeLevel #<CR>
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
" Table mappings
|
" Table mappings
|
||||||
if g:vimwiki_table_auto_fmt
|
if g:vimwiki_table_mappings
|
||||||
inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab()
|
inoremap <expr> <buffer> <Tab> vimwiki#tbl#kbd_tab()
|
||||||
inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
|
inoremap <expr> <buffer> <S-Tab> vimwiki#tbl#kbd_shift_tab()
|
||||||
endif
|
endif
|
||||||
@@ -377,8 +413,6 @@ endif
|
|||||||
nnoremap <silent><script><buffer>
|
nnoremap <silent><script><buffer>
|
||||||
\ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR>
|
\ <Plug>VimwikiTableMoveColumnRight :VimwikiTableMoveColumnRight<CR>
|
||||||
|
|
||||||
" Misc mappings
|
|
||||||
inoremap <buffer> <S-CR> <br /><CR>
|
|
||||||
|
|
||||||
|
|
||||||
" Text objects {{{
|
" Text objects {{{
|
||||||
@@ -400,8 +434,18 @@ 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>
|
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>
|
vnoremap <silent><buffer> ic :<C-U>call vimwiki#base#TO_table_col(1, 1)<CR>
|
||||||
|
|
||||||
nnoremap <silent><buffer> = :call vimwiki#base#AddHeaderLevel()<CR>
|
if !hasmapto('<Plug>VimwikiAddHeaderLevel')
|
||||||
nnoremap <silent><buffer> - :call vimwiki#base#RemoveHeaderLevel()<CR>
|
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>
|
||||||
|
|
||||||
|
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
@@ -411,8 +455,21 @@ nnoremap <silent><buffer> - :call vimwiki#base#RemoveHeaderLevel()<CR>
|
|||||||
if VimwikiGet('auto_export')
|
if VimwikiGet('auto_export')
|
||||||
" Automatically generate HTML on page write.
|
" Automatically generate HTML on page write.
|
||||||
augroup vimwiki
|
augroup vimwiki
|
||||||
au BufWritePost <buffer> Vimwiki2HTML
|
au BufWritePost <buffer>
|
||||||
|
\ call vimwiki#html#Wiki2HTML(expand(VimwikiGet('path_html')),
|
||||||
|
\ expand('%'))
|
||||||
augroup END
|
augroup END
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" AUTOCOMMANDS }}}
|
" AUTOCOMMANDS }}}
|
||||||
|
|
||||||
|
" PASTE, CAT URL {{{
|
||||||
|
" html commands
|
||||||
|
command! -buffer VimwikiPasteUrl call vimwiki#html#PasteUrl(expand('%:p'))
|
||||||
|
command! -buffer VimwikiCatUrl call vimwiki#html#CatUrl(expand('%:p'))
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" DEBUGGING {{{
|
||||||
|
command! VimwikiPrintWikiState call vimwiki#base#print_wiki_state()
|
||||||
|
command! VimwikiReadLocalOptions call vimwiki#base#read_wiki_options(1)
|
||||||
|
" }}}
|
||||||
552
bundle/git_vimwiki/plugin/vimwiki.vim
Normal file
552
bundle/git_vimwiki/plugin/vimwiki.vim
Normal file
@@ -0,0 +1,552 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki plugin file
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
" GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki
|
||||||
|
|
||||||
|
if exists("loaded_vimwiki") || &cp
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let loaded_vimwiki = 1
|
||||||
|
|
||||||
|
let s:old_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Logging and performance instrumentation "{{{
|
||||||
|
let g:VimwikiLog = {}
|
||||||
|
let g:VimwikiLog.path = 0 " # of calls to VimwikiGet with path or path_html
|
||||||
|
let g:VimwikiLog.path_html = 0 " # of calls to path_html()
|
||||||
|
let g:VimwikiLog.normalize_path = 0 " # of calls to normalize_path()
|
||||||
|
let g:VimwikiLog.subdir = 0 " # of calls to vimwiki#base#subdir()
|
||||||
|
let g:VimwikiLog.timing = [] " various timing measurements
|
||||||
|
let g:VimwikiLog.html = [] " html conversion timing
|
||||||
|
function! VimwikiLog_extend(what,...) "{{{
|
||||||
|
call extend(g:VimwikiLog[a:what],a:000)
|
||||||
|
endfunction "}}}
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" HELPER functions {{{
|
||||||
|
function! s:default(varname, value) "{{{
|
||||||
|
if !exists('g:vimwiki_'.a:varname)
|
||||||
|
let g:vimwiki_{a:varname} = a:value
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:find_wiki(path) "{{{
|
||||||
|
" XXX: find_wiki() does not (yet) take into consideration the ext
|
||||||
|
let path = vimwiki#u#path_norm(vimwiki#u#chomp_slash(a:path))
|
||||||
|
let idx = 0
|
||||||
|
while idx < len(g:vimwiki_list)
|
||||||
|
let idx_path = expand(VimwikiGet('path', idx))
|
||||||
|
let idx_path = vimwiki#u#path_norm(vimwiki#u#chomp_slash(idx_path))
|
||||||
|
if vimwiki#u#path_common_pfx(idx_path, path) == idx_path
|
||||||
|
return idx
|
||||||
|
endif
|
||||||
|
let idx += 1
|
||||||
|
endwhile
|
||||||
|
return -1
|
||||||
|
" an orphan page has been detected
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
function! s:vimwiki_idx() " {{{
|
||||||
|
if exists('b:vimwiki_idx')
|
||||||
|
return b:vimwiki_idx
|
||||||
|
else
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! s:setup_buffer_leave() "{{{
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom "Setup_buffer_leave g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
if &filetype == 'vimwiki'
|
||||||
|
" cache global vars of current state XXX: SLOW!?
|
||||||
|
call vimwiki#base#cache_buffer_state()
|
||||||
|
endif
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_leave g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set up menu
|
||||||
|
if g:vimwiki_menu != ""
|
||||||
|
exe 'nmenu disable '.g:vimwiki_menu.'.Table'
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:setup_filetype() "{{{
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom "Setup_filetype g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
let time0 = reltime() " start the clock "XXX
|
||||||
|
" Find what wiki current buffer belongs to.
|
||||||
|
let path = expand('%:p:h')
|
||||||
|
" XXX: find_wiki() does not (yet) take into consideration the ext
|
||||||
|
let idx = s:find_wiki(path)
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_filetype g:curr_idx=".g:vimwiki_current_idx." find_idx=".idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
|
||||||
|
if idx == -1 && g:vimwiki_global_ext == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
"XXX when idx = -1? (an orphan page has been detected)
|
||||||
|
|
||||||
|
"TODO: refactor (same code in setup_buffer_enter)
|
||||||
|
" The buffer's file is not in the path and user *does* want his wiki
|
||||||
|
" extension(s) to be global -- Add new wiki.
|
||||||
|
if idx == -1
|
||||||
|
let ext = '.'.expand('%:e')
|
||||||
|
" lookup syntax using g:vimwiki_ext2syntax
|
||||||
|
if has_key(g:vimwiki_ext2syntax, ext)
|
||||||
|
let syn = g:vimwiki_ext2syntax[ext]
|
||||||
|
else
|
||||||
|
let syn = s:vimwiki_defaults.syntax
|
||||||
|
endif
|
||||||
|
call add(g:vimwiki_list, {'path': path, 'ext': ext, 'syntax': syn, 'temp': 1})
|
||||||
|
let idx = len(g:vimwiki_list) - 1
|
||||||
|
endif
|
||||||
|
call vimwiki#base#validate_wiki_options(idx)
|
||||||
|
" initialize and cache global vars of current state
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_filetype g:curr_idx=".g:vimwiki_current_idx." (reset_wiki_state) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
|
||||||
|
unlet! b:vimwiki_fs_rescan
|
||||||
|
set filetype=vimwiki
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_filetype g:curr_idx=".g:vimwiki_current_idx." (set ft=vimwiki) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
let time1 = vimwiki#u#time(time0) "XXX
|
||||||
|
call VimwikiLog_extend('timing',['plugin:setup_filetype:time1',time1])
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:setup_buffer_enter() "{{{
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom "Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
let time0 = reltime() " start the clock "XXX
|
||||||
|
if !vimwiki#base#recall_buffer_state()
|
||||||
|
" Find what wiki current buffer belongs to.
|
||||||
|
" If wiki does not exist in g:vimwiki_list -- add new wiki there with
|
||||||
|
" buffer's path and ext.
|
||||||
|
" Else set g:vimwiki_current_idx to that wiki index.
|
||||||
|
let path = expand('%:p:h')
|
||||||
|
" XXX: find_wiki() does not (yet) take into consideration the ext
|
||||||
|
let idx = s:find_wiki(path)
|
||||||
|
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." find_idx=".idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
" The buffer's file is not in the path and user *does NOT* want his wiki
|
||||||
|
" extension to be global -- Do not add new wiki.
|
||||||
|
if idx == -1 && g:vimwiki_global_ext == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
"TODO: refactor (same code in setup_filetype)
|
||||||
|
" The buffer's file is not in the path and user *does* want his wiki
|
||||||
|
" extension(s) to be global -- Add new wiki.
|
||||||
|
if idx == -1
|
||||||
|
let ext = '.'.expand('%:e')
|
||||||
|
" lookup syntax using g:vimwiki_ext2syntax
|
||||||
|
if has_key(g:vimwiki_ext2syntax, ext)
|
||||||
|
let syn = g:vimwiki_ext2syntax[ext]
|
||||||
|
else
|
||||||
|
let syn = s:vimwiki_defaults.syntax
|
||||||
|
endif
|
||||||
|
call add(g:vimwiki_list, {'path': path, 'ext': ext, 'syntax': syn, 'temp': 1})
|
||||||
|
let idx = len(g:vimwiki_list) - 1
|
||||||
|
endif
|
||||||
|
call vimwiki#base#validate_wiki_options(idx)
|
||||||
|
" initialize and cache global vars of current state
|
||||||
|
call vimwiki#base#setup_buffer_state(idx)
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." (reset_wiki_state) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If you have
|
||||||
|
" au GUIEnter * VimwikiIndex
|
||||||
|
" Then change it to
|
||||||
|
" au GUIEnter * nested VimwikiIndex
|
||||||
|
if &filetype == ''
|
||||||
|
set filetype=vimwiki
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." (set ft vimwiki) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
elseif &syntax == 'vimwiki'
|
||||||
|
" to force a rescan of the filesystem which may have changed
|
||||||
|
" and update VimwikiLinks syntax group that depends on it;
|
||||||
|
" b:vimwiki_fs_rescan indicates that setup_filetype() has not been run
|
||||||
|
if exists("b:vimwiki_fs_rescan") && VimwikiGet('maxhi')
|
||||||
|
set syntax=vimwiki
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_enter g:curr_idx=".g:vimwiki_current_idx." (set syntax=vimwiki) b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let b:vimwiki_fs_rescan = 1
|
||||||
|
endif
|
||||||
|
let time1 = vimwiki#u#time(time0) "XXX
|
||||||
|
|
||||||
|
" 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.
|
||||||
|
if g:vimwiki_folding == 1 && &fdm != 'expr'
|
||||||
|
setlocal fdm=expr
|
||||||
|
setlocal foldexpr=VimwikiFoldLevel(v:lnum)
|
||||||
|
setlocal foldtext=VimwikiFoldText()
|
||||||
|
endif
|
||||||
|
|
||||||
|
" And conceal level too.
|
||||||
|
if g:vimwiki_conceallevel && exists("+conceallevel")
|
||||||
|
let &conceallevel = g:vimwiki_conceallevel
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Set up menu
|
||||||
|
if g:vimwiki_menu != ""
|
||||||
|
exe 'nmenu enable '.g:vimwiki_menu.'.Table'
|
||||||
|
endif
|
||||||
|
"let time2 = vimwiki#u#time(time0) "XXX
|
||||||
|
call VimwikiLog_extend('timing',['plugin:setup_buffer_enter:time1',time1])
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! s:setup_buffer_reenter() "{{{
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom "Setup_buffer_reenter g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
if !vimwiki#base#recall_buffer_state()
|
||||||
|
" Do not repeat work of s:setup_buffer_enter() and s:setup_filetype()
|
||||||
|
" Once should be enough ...
|
||||||
|
endif
|
||||||
|
if g:vimwiki_debug ==3
|
||||||
|
echom " Setup_buffer_reenter g:curr_idx=".g:vimwiki_current_idx." b:curr_idx=".s:vimwiki_idx().""
|
||||||
|
endif
|
||||||
|
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 g:vimwiki_hl_headers == 1
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='.g:vimwiki_hcolor_guifg_{&bg}[i-1].' gui=bold ctermfg='.g:vimwiki_hcolor_ctermfg_{&bg}[i-1].' term=bold cterm=bold'
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" OPTION get/set functions {{{
|
||||||
|
" return complete list of options
|
||||||
|
function! VimwikiGetOptionNames() "{{{
|
||||||
|
return keys(s:vimwiki_defaults)
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
function! VimwikiGetOptions(...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
let option_dict = {}
|
||||||
|
for kk in keys(s:vimwiki_defaults)
|
||||||
|
let option_dict[kk] = VimwikiGet(kk, idx)
|
||||||
|
endfor
|
||||||
|
return option_dict
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Return value of option for current wiki or if second parameter exists for
|
||||||
|
" wiki with a given index.
|
||||||
|
" If the option is not found, it is assumed to have been previously cached in a
|
||||||
|
" buffer local dictionary, that acts as a cache.
|
||||||
|
" If the option is not found in the buffer local dictionary, an error is thrown
|
||||||
|
function! VimwikiGet(option, ...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
|
||||||
|
if has_key(g:vimwiki_list[idx], a:option)
|
||||||
|
let val = g:vimwiki_list[idx][a:option]
|
||||||
|
elseif has_key(s:vimwiki_defaults, a:option)
|
||||||
|
let val = s:vimwiki_defaults[a:option]
|
||||||
|
let g:vimwiki_list[idx][a:option] = val
|
||||||
|
else
|
||||||
|
let val = b:vimwiki_list[a:option]
|
||||||
|
endif
|
||||||
|
|
||||||
|
" XXX no call to vimwiki#base here or else the whole autoload/base gets loaded!
|
||||||
|
return val
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
" Set option for current wiki or if third parameter exists for
|
||||||
|
" wiki with a given index.
|
||||||
|
" If the option is not found or recognized (i.e. does not exist in
|
||||||
|
" s:vimwiki_defaults), it is saved in a buffer local dictionary, that acts
|
||||||
|
" as a cache.
|
||||||
|
" If the option is not found in the buffer local dictionary, an error is thrown
|
||||||
|
function! VimwikiSet(option, value, ...) "{{{
|
||||||
|
let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1
|
||||||
|
|
||||||
|
if has_key(s:vimwiki_defaults, a:option) ||
|
||||||
|
\ has_key(g:vimwiki_list[idx], a:option)
|
||||||
|
let g:vimwiki_list[idx][a:option] = a:value
|
||||||
|
elseif exists('b:vimwiki_list')
|
||||||
|
let b:vimwiki_list[a:option] = a:value
|
||||||
|
else
|
||||||
|
let b:vimwiki_list = {}
|
||||||
|
let b:vimwiki_list[a:option] = a:value
|
||||||
|
endif
|
||||||
|
|
||||||
|
endfunction "}}}
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" CALLBACK functions "{{{
|
||||||
|
" User can redefine it.
|
||||||
|
if !exists("*VimwikiLinkHandler") "{{{
|
||||||
|
function VimwikiLinkHandler(url)
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
endif "}}}
|
||||||
|
|
||||||
|
if !exists("*VimwikiWikiIncludeHandler") "{{{
|
||||||
|
function! VimwikiWikiIncludeHandler(value) "{{{
|
||||||
|
" Return the empty string when unable to process link
|
||||||
|
return ''
|
||||||
|
endfunction "}}}
|
||||||
|
endif "}}}
|
||||||
|
" CALLBACK }}}
|
||||||
|
|
||||||
|
" DEFAULT wiki {{{
|
||||||
|
let s:vimwiki_defaults = {}
|
||||||
|
let s:vimwiki_defaults.path = '~/vimwiki/'
|
||||||
|
let s:vimwiki_defaults.path_html = '' " '' is replaced by derived path.'_html/'
|
||||||
|
let s:vimwiki_defaults.css_name = 'style.css'
|
||||||
|
let s:vimwiki_defaults.index = 'index'
|
||||||
|
let s:vimwiki_defaults.ext = '.wiki'
|
||||||
|
let s:vimwiki_defaults.maxhi = 0
|
||||||
|
let s:vimwiki_defaults.syntax = 'default'
|
||||||
|
|
||||||
|
let s:vimwiki_defaults.template_path = ''
|
||||||
|
let s:vimwiki_defaults.template_default = ''
|
||||||
|
let s:vimwiki_defaults.template_ext = ''
|
||||||
|
|
||||||
|
let s:vimwiki_defaults.nested_syntaxes = {}
|
||||||
|
let s:vimwiki_defaults.auto_export = 0
|
||||||
|
" is wiki temporary -- was added to g:vimwiki_list by opening arbitrary wiki
|
||||||
|
" file.
|
||||||
|
let s:vimwiki_defaults.temp = 0
|
||||||
|
|
||||||
|
" diary
|
||||||
|
let s:vimwiki_defaults.diary_rel_path = 'diary/'
|
||||||
|
let s:vimwiki_defaults.diary_index = 'diary'
|
||||||
|
let s:vimwiki_defaults.diary_header = 'Diary'
|
||||||
|
let s:vimwiki_defaults.diary_sort = 'desc'
|
||||||
|
|
||||||
|
" Do not change this! Will wait till vim become more datetime awareable.
|
||||||
|
let s:vimwiki_defaults.diary_link_fmt = '%Y-%m-%d'
|
||||||
|
|
||||||
|
" NEW! in v2.0
|
||||||
|
" custom_wiki2html
|
||||||
|
let s:vimwiki_defaults.custom_wiki2html = ''
|
||||||
|
"
|
||||||
|
let s:vimwiki_defaults.list_margin = -1
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" DEFAULT options {{{
|
||||||
|
call s:default('list', [s:vimwiki_defaults])
|
||||||
|
call s:default('auto_checkbox', 1)
|
||||||
|
call s:default('use_mouse', 0)
|
||||||
|
call s:default('folding', 0)
|
||||||
|
call s:default('fold_trailing_empty_lines', 0)
|
||||||
|
call s:default('fold_lists', 0)
|
||||||
|
call s:default('menu', 'Vimwiki')
|
||||||
|
call s:default('global_ext', 1)
|
||||||
|
call s:default('ext2syntax', {'.md': 'markdown'}) " syntax map keyed on extension
|
||||||
|
call s:default('hl_headers', 0)
|
||||||
|
call s:default('hl_cb_checked', 0)
|
||||||
|
call s:default('list_ignore_newline', 1)
|
||||||
|
call s:default('listsyms', ' .oOX')
|
||||||
|
call s:default('use_calendar', 1)
|
||||||
|
call s:default('table_mappings', 1)
|
||||||
|
call s:default('table_auto_fmt', 1)
|
||||||
|
call s:default('w32_dir_enc', '')
|
||||||
|
call s:default('CJK_length', 0)
|
||||||
|
call s:default('dir_link', '')
|
||||||
|
call s:default('valid_html_tags', 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em')
|
||||||
|
call s:default('user_htmls', '')
|
||||||
|
|
||||||
|
call s:default('html_header_numbering', 0)
|
||||||
|
call s:default('html_header_numbering_sym', '')
|
||||||
|
call s:default('conceallevel', 2)
|
||||||
|
call s:default('url_mingain', 12)
|
||||||
|
call s:default('url_maxsave', 15)
|
||||||
|
call s:default('debug', 0)
|
||||||
|
|
||||||
|
call s:default('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'
|
||||||
|
\ })
|
||||||
|
|
||||||
|
|
||||||
|
call s:default('current_idx', 0)
|
||||||
|
|
||||||
|
" Scheme regexes should 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
|
||||||
|
" Scheme regexes {{{
|
||||||
|
call s:default('schemes', 'wiki\d\+,diary,local')
|
||||||
|
call s:default('web_schemes1', 'http,https,file,ftp,gopher,telnet,nntp,ldap,'.
|
||||||
|
\ 'rsync,imap,pop,irc,ircs,cvs,svn,svn+ssh,git,ssh,fish,sftp')
|
||||||
|
call s:default('web_schemes2', 'mailto,news,xmpp,sip,sips,doi,urn,tel')
|
||||||
|
|
||||||
|
let rxSchemes = '\%('.
|
||||||
|
\ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes2, '\s*,\s*'), '\|').
|
||||||
|
\ '\)'
|
||||||
|
|
||||||
|
call s:default('rxSchemeUrl', rxSchemes.':.*')
|
||||||
|
call s:default('rxSchemeUrlMatchScheme', '\zs'.rxSchemes.'\ze:.*')
|
||||||
|
call s:default('rxSchemeUrlMatchUrl', rxSchemes.':\zs.*\ze')
|
||||||
|
" scheme regexes }}}
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" AUTOCOMMANDS for all known wiki extensions {{{
|
||||||
|
" Getting all extensions that different wikis could have
|
||||||
|
let extensions = {}
|
||||||
|
for wiki in g:vimwiki_list
|
||||||
|
if has_key(wiki, 'ext')
|
||||||
|
let extensions[wiki.ext] = 1
|
||||||
|
else
|
||||||
|
let extensions['.wiki'] = 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
" append map g:vimwiki_ext2syntax
|
||||||
|
for ext in keys(g:vimwiki_ext2syntax)
|
||||||
|
let extensions[ext] = 1
|
||||||
|
endfor
|
||||||
|
|
||||||
|
augroup filetypedetect
|
||||||
|
" clear FlexWiki's stuff
|
||||||
|
au! * *.wiki
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
augroup vimwiki
|
||||||
|
autocmd!
|
||||||
|
for ext in keys(extensions)
|
||||||
|
exe 'autocmd BufEnter *'.ext.' call s:setup_buffer_reenter()'
|
||||||
|
exe 'autocmd BufWinEnter *'.ext.' call s:setup_buffer_enter()'
|
||||||
|
exe 'autocmd BufLeave,BufHidden *'.ext.' call s:setup_buffer_leave()'
|
||||||
|
exe 'autocmd BufNewFile,BufRead, *'.ext.' call s:setup_filetype()'
|
||||||
|
exe 'autocmd ColorScheme *'.ext.' call s:setup_cleared_syntax()'
|
||||||
|
" Format tables when exit from insert mode. Do not use textwidth to
|
||||||
|
" autowrap tables.
|
||||||
|
if g:vimwiki_table_auto_fmt
|
||||||
|
exe 'autocmd InsertLeave *'.ext.' call vimwiki#tbl#format(line("."))'
|
||||||
|
exe 'autocmd InsertEnter *'.ext.' call vimwiki#tbl#reset_tw(line("."))'
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
augroup END
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" COMMANDS {{{
|
||||||
|
command! VimwikiUISelect call vimwiki#base#ui_select()
|
||||||
|
" XXX: why not using <count> instead of v:count1?
|
||||||
|
" See Issue 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:count1)
|
||||||
|
command! -count=1 VimwikiTabMakeDiaryNote
|
||||||
|
\ call vimwiki#diary#make_note(v:count1, 1)
|
||||||
|
|
||||||
|
command! VimwikiDiaryGenerateLinks
|
||||||
|
\ call vimwiki#diary#generate_diary_section()
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" MAPPINGS {{{
|
||||||
|
if !hasmapto('<Plug>VimwikiIndex')
|
||||||
|
nmap <silent><unique> <Leader>ww <Plug>VimwikiIndex
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiIndex :VimwikiIndex<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiTabIndex')
|
||||||
|
nmap <silent><unique> <Leader>wt <Plug>VimwikiTabIndex
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiTabIndex :VimwikiTabIndex<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiUISelect')
|
||||||
|
nmap <silent><unique> <Leader>ws <Plug>VimwikiUISelect
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiUISelect :VimwikiUISelect<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiDiaryIndex')
|
||||||
|
nmap <silent><unique> <Leader>wi <Plug>VimwikiDiaryIndex
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiDiaryIndex :VimwikiDiaryIndex<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiDiaryGenerateLinks')
|
||||||
|
nmap <silent><unique> <Leader>w<Leader>i <Plug>VimwikiDiaryGenerateLinks
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiDiaryGenerateLinks :VimwikiDiaryGenerateLinks<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiMakeDiaryNote')
|
||||||
|
nmap <silent><unique> <Leader>w<Leader>w <Plug>VimwikiMakeDiaryNote
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiMakeDiaryNote :VimwikiMakeDiaryNote<CR>
|
||||||
|
|
||||||
|
if !hasmapto('<Plug>VimwikiTabMakeDiaryNote')
|
||||||
|
nmap <silent><unique> <Leader>w<Leader>t <Plug>VimwikiTabMakeDiaryNote
|
||||||
|
endif
|
||||||
|
nnoremap <unique><script> <Plug>VimwikiTabMakeDiaryNote
|
||||||
|
\ :VimwikiTabMakeDiaryNote<CR>
|
||||||
|
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" MENU {{{
|
||||||
|
function! s:build_menu(topmenu)
|
||||||
|
let idx = 0
|
||||||
|
while idx < len(g:vimwiki_list)
|
||||||
|
let norm_path = fnamemodify(VimwikiGet('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>'
|
||||||
|
let idx += 1
|
||||||
|
endwhile
|
||||||
|
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
|
||||||
|
|
||||||
|
"XXX make sure anything below does not cause autoload/base to be loaded
|
||||||
|
if !empty(g:vimwiki_menu)
|
||||||
|
call s:build_menu(g:vimwiki_menu)
|
||||||
|
call s:build_table_menu(g:vimwiki_menu)
|
||||||
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" CALENDAR Hook "{{{
|
||||||
|
if g:vimwiki_use_calendar
|
||||||
|
let g:calendar_action = 'vimwiki#diary#calendar_action'
|
||||||
|
let g:calendar_sign = 'vimwiki#diary#calendar_sign'
|
||||||
|
endif
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:old_cpo
|
||||||
598
bundle/git_vimwiki/syntax/vimwiki.vim
Normal file
598
bundle/git_vimwiki/syntax/vimwiki.vim
Normal file
@@ -0,0 +1,598 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki syntax file
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" Quit if syntax file is already loaded
|
||||||
|
if version < 600
|
||||||
|
syntax clear
|
||||||
|
elseif exists("b:current_syntax")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
"TODO do nothing if ...? (?)
|
||||||
|
let starttime = reltime() " start the clock
|
||||||
|
if VimwikiGet('maxhi')
|
||||||
|
let b:existing_wikifiles = vimwiki#base#get_links('*'.VimwikiGet('ext'))
|
||||||
|
let b:existing_wikidirs = vimwiki#base#get_links('*/')
|
||||||
|
endif
|
||||||
|
let timescans = vimwiki#u#time(starttime) "XXX
|
||||||
|
"let b:xxx = 1
|
||||||
|
"TODO ? update wikilink syntax group here if really needed (?) for :e and such
|
||||||
|
"if VimwikiGet('maxhi')
|
||||||
|
" ...
|
||||||
|
"endif
|
||||||
|
|
||||||
|
" LINKS: assume this is common to all syntaxes "{{{
|
||||||
|
|
||||||
|
" LINKS: WebLinks {{{
|
||||||
|
" match URL for common protocols;
|
||||||
|
" see http://en.wikipedia.org/wiki/URI_scheme http://tools.ietf.org/html/rfc3986
|
||||||
|
let g:vimwiki_rxWebProtocols = ''.
|
||||||
|
\ '\%('.
|
||||||
|
\ '\%('.
|
||||||
|
\ '\%('.join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').'\):'.
|
||||||
|
\ '\%(//\)'.
|
||||||
|
\ '\)'.
|
||||||
|
\ '\|'.
|
||||||
|
\ '\%('.join(split(g:vimwiki_web_schemes2, '\s*,\s*'), '\|').'\):'.
|
||||||
|
\ '\)'
|
||||||
|
"
|
||||||
|
let g:vimwiki_rxWeblinkUrl = g:vimwiki_rxWebProtocols .
|
||||||
|
\ '\S\{-1,}'. '\%(([^ \t()]*)\)\='
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
" Load concrete Wiki syntax: sets regexes and templates for headers and links
|
||||||
|
execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'.vim'
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
let time0 = vimwiki#u#time(starttime) "XXX
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of larger regexes {{{
|
||||||
|
|
||||||
|
" LINKS: setup wikilink regexps {{{
|
||||||
|
let g:vimwiki_rxWikiLinkPrefix = '[['
|
||||||
|
let g:vimwiki_rxWikiLinkSuffix = ']]'
|
||||||
|
let g:vimwiki_rxWikiLinkSeparator = '|'
|
||||||
|
" [[URL]]
|
||||||
|
let g:vimwiki_WikiLinkTemplate1 = g:vimwiki_rxWikiLinkPrefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_WikiLinkTemplate2 = g:vimwiki_rxWikiLinkPrefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLinkSeparator. '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWikiLinkSuffix
|
||||||
|
"
|
||||||
|
let magic_chars = '.*[]\^$'
|
||||||
|
let valid_chars = '[^\\]'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLinkPrefix = escape(g:vimwiki_rxWikiLinkPrefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLinkSuffix = escape(g:vimwiki_rxWikiLinkSuffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLinkSeparator = escape(g:vimwiki_rxWikiLinkSeparator, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLinkUrl = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiLinkDescr = valid_chars.'\{-}'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWord = '[^[:blank:]()\\]\+'
|
||||||
|
|
||||||
|
"
|
||||||
|
" [[URL]], or [[URL|DESCRIPTION]]
|
||||||
|
" a) match [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLinkUrl.'\%('.g:vimwiki_rxWikiLinkSeparator.
|
||||||
|
\ g:vimwiki_rxWikiLinkDescr.'\)\?'.g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" b) match URL within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLinkMatchUrl = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLinkUrl.'\ze\%('. g:vimwiki_rxWikiLinkSeparator.
|
||||||
|
\ g:vimwiki_rxWikiLinkDescr.'\)\?'.g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" c) match DESCRIPTION within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLinkMatchDescr = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLinkUrl.g:vimwiki_rxWikiLinkSeparator.'\%('.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLinkDescr. '\ze\)\?'. g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
let g:vimwiki_rxWikiLinkPrefix1 = g:vimwiki_rxWikiLinkPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLinkUrl.g:vimwiki_rxWikiLinkSeparator
|
||||||
|
let g:vimwiki_rxWikiLinkSuffix1 = g:vimwiki_rxWikiLinkSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of wikiincl regexps {{{
|
||||||
|
let g:vimwiki_rxWikiInclPrefix = '{{'
|
||||||
|
let g:vimwiki_rxWikiInclSuffix = '}}'
|
||||||
|
let g:vimwiki_rxWikiInclSeparator = '|'
|
||||||
|
"
|
||||||
|
" '{{__LinkUrl__}}'
|
||||||
|
let g:vimwiki_WikiInclTemplate1 = g:vimwiki_rxWikiInclPrefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiInclSuffix
|
||||||
|
" '{{__LinkUrl____LinkDescription__}}'
|
||||||
|
let g:vimwiki_WikiInclTemplate2 = g:vimwiki_rxWikiInclPrefix . '__LinkUrl__'.
|
||||||
|
\ '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWikiInclSuffix
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiInclPrefix = escape(g:vimwiki_rxWikiInclPrefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiInclSuffix = escape(g:vimwiki_rxWikiInclSuffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiInclSeparator = escape(g:vimwiki_rxWikiInclSeparator, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiInclUrl = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiInclArg = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiInclArgs = '\%('. g:vimwiki_rxWikiInclSeparator. g:vimwiki_rxWikiInclArg. '\)'.'\{-}'
|
||||||
|
"
|
||||||
|
"
|
||||||
|
" *. {{URL}[{...}]} - i.e. {{URL}}, {{URL|ARG1}}, {{URL|ARG1|ARG2}}, etc.
|
||||||
|
" *a) match {{URL}[{...}]}
|
||||||
|
let g:vimwiki_rxWikiIncl = g:vimwiki_rxWikiInclPrefix.
|
||||||
|
\ g:vimwiki_rxWikiInclUrl.
|
||||||
|
\ g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix
|
||||||
|
" *b) match URL within {{URL}[{...}]}
|
||||||
|
let g:vimwiki_rxWikiInclMatchUrl = g:vimwiki_rxWikiInclPrefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiInclUrl. '\ze'.
|
||||||
|
\ g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
let g:vimwiki_rxWikiInclPrefix1 = g:vimwiki_rxWikiInclPrefix.
|
||||||
|
\ g:vimwiki_rxWikiInclUrl.g:vimwiki_rxWikiInclSeparator
|
||||||
|
let g:vimwiki_rxWikiInclSuffix1 = g:vimwiki_rxWikiInclArgs.
|
||||||
|
\ g:vimwiki_rxWikiInclSuffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Setup weblink regexps {{{
|
||||||
|
" 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L))
|
||||||
|
" let g:vimwiki_rxWeblink = '[\["(|]\@<!'. g:vimwiki_rxWeblinkUrl .
|
||||||
|
" \ '\%([),:;.!?]\=\%([ \t]\|$\)\)\@='
|
||||||
|
" Maxim:
|
||||||
|
" Simplify free-standing links: URL starts with non(letter|digit)scheme till
|
||||||
|
" the whitespace.
|
||||||
|
" Stuart, could you check it with markdown templated links? [](http://...), as
|
||||||
|
" the last bracket is the part of URL now?
|
||||||
|
let g:vimwiki_rxWeblink = '[[:alnum:]]\@<!'. g:vimwiki_rxWeblinkUrl . '\S*'
|
||||||
|
" 0a) match URL within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchUrl = g:vimwiki_rxWeblink
|
||||||
|
" 0b) match DESCRIPTION within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchDescr = ''
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: Setup anylink regexps {{{
|
||||||
|
let g:vimwiki_rxAnyLink = g:vimwiki_rxWikiLink.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiIncl.'\|'.g:vimwiki_rxWeblink
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" }}} end of Links
|
||||||
|
|
||||||
|
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
|
||||||
|
function! s:add_target_syntax_ON(target, type) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
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) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
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(b:existing_wikifiles)
|
||||||
|
" Wikilink Dirs set up upon BufEnter (see plugin/...)
|
||||||
|
let safe_dirs = vimwiki#base#file_pattern(b:existing_wikidirs)
|
||||||
|
|
||||||
|
" match [[URL]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate1,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match [[URL|DESCRIPTION]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate2,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
|
||||||
|
" match {{URL}}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate1,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match {{URL|...}}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate2,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match [[DIRURL]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate1,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" match [[DIRURL|DESCRIPTION]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate2,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
|
" use max highlighting - could be quite slow if there are too many wikifiles
|
||||||
|
if VimwikiGet('maxhi')
|
||||||
|
" WikiLink
|
||||||
|
call s:add_target_syntax_OFF(g:vimwiki_rxWikiLink)
|
||||||
|
" WikiIncl
|
||||||
|
call s:add_target_syntax_OFF(g:vimwiki_rxWikiIncl)
|
||||||
|
|
||||||
|
" Subsequently, links verified on vimwiki's path are highlighted as existing
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
call s:highlight_existing_links()
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
else
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
" Wikilink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWikiLink, 'VimwikiLink')
|
||||||
|
" WikiIncl
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWikiIncl, 'VimwikiLink')
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Weblink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWeblink, 'VimwikiLink')
|
||||||
|
|
||||||
|
" WikiLink
|
||||||
|
" All remaining schemes are highlighted automatically
|
||||||
|
let rxSchemes = '\%('.
|
||||||
|
\ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').
|
||||||
|
\ '\):'
|
||||||
|
|
||||||
|
" a) match [[nonwiki-scheme-URL]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate1,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLinkUrl, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" b) match [[nonwiki-scheme-URL|DESCRIPTION]]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLinkTemplate2,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLinkUrl, g:vimwiki_rxWikiLinkDescr, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
|
||||||
|
" a) match {{nonwiki-scheme-URL}}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate1,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiInclUrl, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
" b) match {{nonwiki-scheme-URL}[{...}]}
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiInclTemplate2,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiInclUrl, g:vimwiki_rxWikiInclArgs, '')
|
||||||
|
call s:add_target_syntax_ON(target, 'VimwikiLink')
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" generic headers "{{{
|
||||||
|
if g:vimwiki_symH
|
||||||
|
"" symmetric
|
||||||
|
for i in range(1,6)
|
||||||
|
let g:vimwiki_rxH{i}_Template = repeat(g:vimwiki_rxH, i).' __Header__ '.repeat(g:vimwiki_rxH, i)
|
||||||
|
let g:vimwiki_rxH{i} = '^\s*'.g:vimwiki_rxH.'\{'.i.'}[^'.g:vimwiki_rxH.'].*[^'.g:vimwiki_rxH.']'.g:vimwiki_rxH.'\{'.i.'}\s*$'
|
||||||
|
endfor
|
||||||
|
let g:vimwiki_rxHeader = '^\s*\('.g:vimwiki_rxH.'\{1,6}\)\zs[^'.g:vimwiki_rxH.'].*[^'.g:vimwiki_rxH.']\ze\1\s*$'
|
||||||
|
else
|
||||||
|
" asymmetric
|
||||||
|
for i in range(1,6)
|
||||||
|
let g:vimwiki_rxH{i}_Template = repeat(g:vimwiki_rxH, i).' __Header__'
|
||||||
|
let g:vimwiki_rxH{i} = '^\s*'.g:vimwiki_rxH.'\{'.i.'}[^'.g:vimwiki_rxH.'].*$'
|
||||||
|
endfor
|
||||||
|
let g:vimwiki_rxHeader = '^\s*\('.g:vimwiki_rxH.'\{1,6}\)\zs[^'.g:vimwiki_rxH.'].*\ze$'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Header levels, 1-6
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'syntax match VimwikiHeader'.i.' /'.g:vimwiki_rxH{i}.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,@Spell'
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" concealed chars " {{{
|
||||||
|
if exists("+conceallevel")
|
||||||
|
syntax conceal on
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax spell toplevel
|
||||||
|
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom 'WikiLink Prefix: '.g:vimwiki_rxWikiLinkPrefix1
|
||||||
|
echom 'WikiLink Suffix: '.g:vimwiki_rxWikiLinkSuffix1
|
||||||
|
echom 'WikiIncl Prefix: '.g:vimwiki_rxWikiInclPrefix1
|
||||||
|
echom 'WikiIncl Suffix: '.g:vimwiki_rxWikiInclSuffix1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" VimwikiLinkChar is for syntax markers (and also URL when a description
|
||||||
|
" is present) and may be concealed
|
||||||
|
let options = ' contained transparent contains=NONE'
|
||||||
|
" conceal wikilinks
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkPrefix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkSuffix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkPrefix1.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiLinkSuffix1.'/'.options
|
||||||
|
|
||||||
|
" conceal wikiincls
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclPrefix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclSuffix.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclPrefix1.'/'.options
|
||||||
|
execute 'syn match VimwikiLinkChar /'.g:vimwiki_rxWikiInclSuffix1.'/'.options
|
||||||
|
|
||||||
|
" A shortener for long URLs: LinkRest (a middle part of the URL) is concealed
|
||||||
|
execute 'syn match VimwikiLinkRest contained `\%(///\=[^/ \t]\+/\)\zs\S\{'
|
||||||
|
\.g:vimwiki_url_mingain.',}\ze\%([/#?]\w\|\S\{'
|
||||||
|
\.g:vimwiki_url_maxsave.'}\)` cchar=~ '.options
|
||||||
|
|
||||||
|
execute 'syn match VimwikiEqInChar contained /'.g:vimwiki_char_eqin.'/'
|
||||||
|
execute 'syn match VimwikiBoldChar contained /'.g:vimwiki_char_bold.'/'
|
||||||
|
execute 'syn match VimwikiItalicChar contained /'.g:vimwiki_char_italic.'/'
|
||||||
|
execute 'syn match VimwikiBoldItalicChar contained /'.g:vimwiki_char_bolditalic.'/'
|
||||||
|
execute 'syn match VimwikiItalicBoldChar contained /'.g:vimwiki_char_italicbold.'/'
|
||||||
|
execute 'syn match VimwikiCodeChar contained /'.g:vimwiki_char_code.'/'
|
||||||
|
execute 'syn match VimwikiDelTextChar contained /'.g:vimwiki_char_deltext.'/'
|
||||||
|
execute 'syn match VimwikiSuperScript contained /'.g:vimwiki_char_superscript.'/'
|
||||||
|
execute 'syn match VimwikiSubScript contained /'.g:vimwiki_char_subscript.'/'
|
||||||
|
if exists("+conceallevel")
|
||||||
|
syntax conceal off
|
||||||
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" non concealed chars " {{{
|
||||||
|
execute 'syn match VimwikiHeaderChar contained /\%(^\s*'.g:vimwiki_rxH.'\+\)\|\%('.g:vimwiki_rxH.'\+\s*$\)/'
|
||||||
|
execute 'syn match VimwikiEqInCharT contained /'.g:vimwiki_char_eqin.'/'
|
||||||
|
execute 'syn match VimwikiBoldCharT contained /'.g:vimwiki_char_bold.'/'
|
||||||
|
execute 'syn match VimwikiItalicCharT contained /'.g:vimwiki_char_italic.'/'
|
||||||
|
execute 'syn match VimwikiBoldItalicCharT contained /'.g:vimwiki_char_bolditalic.'/'
|
||||||
|
execute 'syn match VimwikiItalicBoldCharT contained /'.g:vimwiki_char_italicbold.'/'
|
||||||
|
execute 'syn match VimwikiCodeCharT contained /'.g:vimwiki_char_code.'/'
|
||||||
|
execute 'syn match VimwikiDelTextCharT contained /'.g:vimwiki_char_deltext.'/'
|
||||||
|
execute 'syn match VimwikiSuperScriptT contained /'.g:vimwiki_char_superscript.'/'
|
||||||
|
execute 'syn match VimwikiSubScriptT contained /'.g:vimwiki_char_subscript.'/'
|
||||||
|
|
||||||
|
" Emoticons
|
||||||
|
"syntax match VimwikiEmoticons /\%((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/
|
||||||
|
|
||||||
|
let g:vimwiki_rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)'
|
||||||
|
execute 'syntax match VimwikiTodo /'. g:vimwiki_rxTodo .'/'
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" main syntax groups {{{
|
||||||
|
|
||||||
|
" Tables
|
||||||
|
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
||||||
|
\ transparent contains=VimwikiCellSeparator,
|
||||||
|
\ VimwikiLinkT,
|
||||||
|
\ VimwikiNoExistsLinkT,
|
||||||
|
\ VimwikiEmoticons,
|
||||||
|
\ VimwikiTodo,
|
||||||
|
\ VimwikiBoldT,
|
||||||
|
\ VimwikiItalicT,
|
||||||
|
\ VimwikiBoldItalicT,
|
||||||
|
\ VimwikiItalicBoldT,
|
||||||
|
\ VimwikiDelTextT,
|
||||||
|
\ VimwikiSuperScriptT,
|
||||||
|
\ VimwikiSubScriptT,
|
||||||
|
\ VimwikiCodeT,
|
||||||
|
\ VimwikiEqInT,
|
||||||
|
\ @Spell
|
||||||
|
syntax match VimwikiCellSeparator
|
||||||
|
\ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
|
||||||
|
|
||||||
|
" List items
|
||||||
|
execute 'syntax match VimwikiList /'.g:vimwiki_rxListBullet.'/'
|
||||||
|
execute 'syntax match VimwikiList /'.g:vimwiki_rxListNumber.'/'
|
||||||
|
execute 'syntax match VimwikiList /'.g:vimwiki_rxListDefine.'/'
|
||||||
|
" List item checkbox
|
||||||
|
"syntax match VimwikiCheckBox /\[.\?\]/
|
||||||
|
let g:vimwiki_rxCheckBox = '\s*\[['.g:vimwiki_listsyms.']\?\]\s'
|
||||||
|
" Todo lists have a checkbox
|
||||||
|
execute 'syntax match VimwikiListTodo /'.g:vimwiki_rxListBullet.g:vimwiki_rxCheckBox.'/'
|
||||||
|
execute 'syntax match VimwikiListTodo /'.g:vimwiki_rxListNumber.g:vimwiki_rxCheckBox.'/'
|
||||||
|
if g:vimwiki_hl_cb_checked
|
||||||
|
execute 'syntax match VimwikiCheckBoxDone /'.
|
||||||
|
\ g:vimwiki_rxListBullet.'\s*\['.g:vimwiki_listsyms[4].'\]\s.*$/'.
|
||||||
|
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
||||||
|
execute 'syntax match VimwikiCheckBoxDone /'.
|
||||||
|
\ g:vimwiki_rxListNumber.'\s*\['.g:vimwiki_listsyms[4].'\]\s.*$/'.
|
||||||
|
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
||||||
|
endif
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiEqIn /'.g:vimwiki_rxEqIn.'/ contains=VimwikiEqInChar'
|
||||||
|
execute 'syntax match VimwikiEqInT /'.g:vimwiki_rxEqIn.'/ contained contains=VimwikiEqInCharT'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiBold /'.g:vimwiki_rxBold.'/ contains=VimwikiBoldChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiBoldT /'.g:vimwiki_rxBold.'/ contained contains=VimwikiBoldCharT,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiItalic /'.g:vimwiki_rxItalic.'/ contains=VimwikiItalicChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiItalicT /'.g:vimwiki_rxItalic.'/ contained contains=VimwikiItalicCharT,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiBoldItalic /'.g:vimwiki_rxBoldItalic.'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiBoldItalicT /'.g:vimwiki_rxBoldItalic.'/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiItalicBold /'.g:vimwiki_rxItalicBold.'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiItalicBoldT /'.g:vimwiki_rxItalicBold.'/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiDelText /'.g:vimwiki_rxDelText.'/ contains=VimwikiDelTextChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiDelTextT /'.g:vimwiki_rxDelText.'/ contained contains=VimwikiDelTextChar,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiSuperScript /'.g:vimwiki_rxSuperScript.'/ contains=VimwikiSuperScriptChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiSuperScriptT /'.g:vimwiki_rxSuperScript.'/ contained contains=VimwikiSuperScriptCharT,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiSubScript /'.g:vimwiki_rxSubScript.'/ contains=VimwikiSubScriptChar,@Spell'
|
||||||
|
execute 'syntax match VimwikiSubScriptT /'.g:vimwiki_rxSubScript.'/ contained contains=VimwikiSubScriptCharT,@Spell'
|
||||||
|
|
||||||
|
execute 'syntax match VimwikiCode /'.g:vimwiki_rxCode.'/ contains=VimwikiCodeChar'
|
||||||
|
execute 'syntax match VimwikiCodeT /'.g:vimwiki_rxCode.'/ contained contains=VimwikiCodeCharT'
|
||||||
|
|
||||||
|
" <hr> horizontal rule
|
||||||
|
execute 'syntax match VimwikiHR /'.g:vimwiki_rxHR.'/'
|
||||||
|
|
||||||
|
execute 'syntax region VimwikiPre start=/^\s*'.g:vimwiki_rxPreStart.
|
||||||
|
\ '/ end=/^\s*'.g:vimwiki_rxPreEnd.'\s*$/ contains=@Spell'
|
||||||
|
|
||||||
|
execute 'syntax region VimwikiMath start=/^\s*'.g:vimwiki_rxMathStart.
|
||||||
|
\ '/ end=/^\s*'.g:vimwiki_rxMathEnd.'\s*$/ contains=@Spell'
|
||||||
|
|
||||||
|
|
||||||
|
" placeholders
|
||||||
|
syntax match VimwikiPlaceholder /^\s*%toc\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
||||||
|
syntax match VimwikiPlaceholder /^\s*%nohtml\s*$/
|
||||||
|
syntax match VimwikiPlaceholder /^\s*%title\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
||||||
|
syntax match VimwikiPlaceholder /^\s*%template\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
||||||
|
syntax match VimwikiPlaceholderParam /\s.*/ contained
|
||||||
|
|
||||||
|
" html tags
|
||||||
|
if g:vimwiki_valid_html_tags != ''
|
||||||
|
let html_tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
||||||
|
exe 'syntax match VimwikiHTMLtag #\c</\?\%('.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 /'.g:vimwiki_rxComment.'/ contains=@Spell'
|
||||||
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" header groups highlighting "{{{
|
||||||
|
|
||||||
|
if g:vimwiki_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 i in range(1,6)
|
||||||
|
execute 'hi def link VimwikiHeader'.i.' Title'
|
||||||
|
endfor
|
||||||
|
else
|
||||||
|
" default colors when headers of different levels are highlighted differently
|
||||||
|
" not making it yet another option; needed by ColorScheme autocommand
|
||||||
|
let g:vimwiki_hcolor_guifg_light = ['#aa5858','#507030','#1030a0','#103040','#505050','#636363']
|
||||||
|
let g:vimwiki_hcolor_ctermfg_light = ['DarkRed','DarkGreen','DarkBlue','Black','Black','Black']
|
||||||
|
let g:vimwiki_hcolor_guifg_dark = ['#e08090','#80e090','#6090e0','#c0c0f0','#e0e0f0','#f0f0f0']
|
||||||
|
let g:vimwiki_hcolor_ctermfg_dark = ['Red','Green','Blue','White','White','White']
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'hi def VimwikiHeader'.i.' guibg=bg guifg='.g:vimwiki_hcolor_guifg_{&bg}[i-1].' gui=bold ctermfg='.g:vimwiki_hcolor_ctermfg_{&bg}[i-1].' term=bold cterm=bold'
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
" syntax group highlighting "{{{
|
||||||
|
|
||||||
|
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 VimwikiCheckBox VimwikiList
|
||||||
|
hi def link VimwikiCheckBoxDone Comment
|
||||||
|
hi def link VimwikiEmoticons Character
|
||||||
|
hi def link VimwikiHR Identifier
|
||||||
|
|
||||||
|
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
|
||||||
|
execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'_custom.vim'
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
let b:current_syntax="vimwiki"
|
||||||
|
|
||||||
|
" EMBEDDED syntax setup "{{{
|
||||||
|
let nested = VimwikiGet('nested_syntaxes')
|
||||||
|
if !empty(nested)
|
||||||
|
for [hl_syntax, vim_syntax] in items(nested)
|
||||||
|
call vimwiki#base#nested_syntax(vim_syntax,
|
||||||
|
\ '^\s*'.g:vimwiki_rxPreStart.'\%(.*[[:blank:][:punct:]]\)\?'.
|
||||||
|
\ hl_syntax.'\%([[:blank:][:punct:]].*\)\?',
|
||||||
|
\ '^\s*'.g:vimwiki_rxPreEnd, 'VimwikiPre')
|
||||||
|
" call vimwiki#base#nested_syntax(vim_syntax,
|
||||||
|
" \ '^\s*{{\$\%(.*[[:blank:][:punct:]]\)\?'.
|
||||||
|
" \ hl_syntax.'\%([[:blank:][:punct:]].*\)\?',
|
||||||
|
" \ '^\s*}}\$', 'VimwikiMath')
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
let timeend = vimwiki#u#time(starttime) "XXX
|
||||||
|
call VimwikiLog_extend('timing',['syntax:scans',timescans],['syntax:regexloaded',time0],['syntax:beforeHLexisting',time01],['syntax:afterHLexisting',time02],['syntax:end',timeend])
|
||||||
@@ -4,6 +4,13 @@
|
|||||||
" Author: Maxim Kim <habamax@gmail.com>
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" placeholder for math environments
|
||||||
|
let b:vimwiki_mathEnv = ""
|
||||||
|
|
||||||
|
" text: $ equation_inline $
|
||||||
|
let g:vimwiki_rxEqIn = '\$[^$`]\+\$'
|
||||||
|
let g:vimwiki_char_eqin = '\$'
|
||||||
|
|
||||||
" text: *strong*
|
" text: *strong*
|
||||||
" let g:vimwiki_rxBold = '\*[^*]\+\*'
|
" let g:vimwiki_rxBold = '\*[^*]\+\*'
|
||||||
let g:vimwiki_rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
let g:vimwiki_rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
@@ -53,27 +60,20 @@ let g:vimwiki_char_superscript = '^'
|
|||||||
let g:vimwiki_rxSubScript = ',,[^,`]\+,,'
|
let g:vimwiki_rxSubScript = ',,[^,`]\+,,'
|
||||||
let g:vimwiki_char_subscript = ',,'
|
let g:vimwiki_char_subscript = ',,'
|
||||||
|
|
||||||
" Header levels, 1-6
|
" generic headers
|
||||||
let g:vimwiki_rxH1 = '^\s*=\{1}[^=]\+.*[^=]\+=\{1}\s*$'
|
let g:vimwiki_rxH = '='
|
||||||
let g:vimwiki_rxH2 = '^\s*=\{2}[^=]\+.*[^=]\+=\{2}\s*$'
|
let g:vimwiki_symH = 1
|
||||||
let g:vimwiki_rxH3 = '^\s*=\{3}[^=]\+.*[^=]\+=\{3}\s*$'
|
|
||||||
let g:vimwiki_rxH4 = '^\s*=\{4}[^=]\+.*[^=]\+=\{4}\s*$'
|
|
||||||
let g:vimwiki_rxH5 = '^\s*=\{5}[^=]\+.*[^=]\+=\{5}\s*$'
|
|
||||||
let g:vimwiki_rxH6 = '^\s*=\{6}[^=]\+.*[^=]\+=\{6}\s*$'
|
|
||||||
let g:vimwiki_rxHeader = '\%('.g:vimwiki_rxH1.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH2.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH3.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH4.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH5.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH6.'\)'
|
|
||||||
|
|
||||||
let g:vimwiki_char_header = '\%(^\s*=\+\)\|\%(=\+\s*$\)'
|
|
||||||
|
|
||||||
" <hr>, horizontal rule
|
" <hr>, horizontal rule
|
||||||
let g:vimwiki_rxHR = '^----.*$'
|
let g:vimwiki_rxHR = '^-----*$'
|
||||||
|
|
||||||
|
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||||
|
let g:vimwiki_rxTableSep = '|'
|
||||||
|
|
||||||
" List items start with optional whitespace(s) then '* ' or '# '
|
" List items start with optional whitespace(s) then '* ' or '# '
|
||||||
let g:vimwiki_rxListBullet = '^\s*\%(\*\|-\)\s'
|
let g:vimwiki_rxListBullet = '^\s*[*-]\s'
|
||||||
let g:vimwiki_rxListNumber = '^\s*#\s'
|
let g:vimwiki_rxListNumber = '^\s*#\s'
|
||||||
|
|
||||||
let g:vimwiki_rxListDefine = '::\(\s\|$\)'
|
let g:vimwiki_rxListDefine = '::\(\s\|$\)'
|
||||||
@@ -82,4 +82,8 @@ let g:vimwiki_rxListDefine = '::\(\s\|$\)'
|
|||||||
let g:vimwiki_rxPreStart = '{{{'
|
let g:vimwiki_rxPreStart = '{{{'
|
||||||
let g:vimwiki_rxPreEnd = '}}}'
|
let g:vimwiki_rxPreEnd = '}}}'
|
||||||
|
|
||||||
|
" Math block
|
||||||
|
let g:vimwiki_rxMathStart = '{{\$'
|
||||||
|
let g:vimwiki_rxMathEnd = '}}\$'
|
||||||
|
|
||||||
let g:vimwiki_rxComment = '^\s*%%.*$'
|
let g:vimwiki_rxComment = '^\s*%%.*$'
|
||||||
89
bundle/git_vimwiki/syntax/vimwiki_markdown.vim
Normal file
89
bundle/git_vimwiki/syntax/vimwiki_markdown.vim
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki syntax file
|
||||||
|
" Default syntax
|
||||||
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" placeholder for math environments
|
||||||
|
let b:vimwiki_mathEnv = ""
|
||||||
|
|
||||||
|
" text: $ equation_inline $
|
||||||
|
let g:vimwiki_rxEqIn = '\$[^$`]\+\$'
|
||||||
|
let g:vimwiki_char_eqin = '\$'
|
||||||
|
|
||||||
|
" text: *strong*
|
||||||
|
" let g:vimwiki_rxBold = '\*[^*]\+\*'
|
||||||
|
let g:vimwiki_rxBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'\*'.
|
||||||
|
\'\%([^*`[:space:]][^*`]*[^*`[:space:]]\|[^*`[:space:]]\)'.
|
||||||
|
\'\*'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_bold = '*'
|
||||||
|
|
||||||
|
" text: _emphasis_
|
||||||
|
" let g:vimwiki_rxItalic = '_[^_]\+_'
|
||||||
|
let g:vimwiki_rxItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'_'.
|
||||||
|
\'\%([^_`[:space:]][^_`]*[^_`[:space:]]\|[^_`[:space:]]\)'.
|
||||||
|
\'_'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_italic = '_'
|
||||||
|
|
||||||
|
" text: *_bold italic_* or _*italic bold*_
|
||||||
|
let g:vimwiki_rxBoldItalic = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'\*_'.
|
||||||
|
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||||
|
\'_\*'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_bolditalic = '\*_'
|
||||||
|
|
||||||
|
let g:vimwiki_rxItalicBold = '\%(^\|\s\|[[:punct:]]\)\@<='.
|
||||||
|
\'_\*'.
|
||||||
|
\'\%([^*_`[:space:]][^*_`]*[^*_`[:space:]]\|[^*_`[:space:]]\)'.
|
||||||
|
\'\*_'.
|
||||||
|
\'\%([[:punct:]]\|\s\|$\)\@='
|
||||||
|
let g:vimwiki_char_italicbold = '_\*'
|
||||||
|
|
||||||
|
" text: `code`
|
||||||
|
let g:vimwiki_rxCode = '`[^`]\+`'
|
||||||
|
let g:vimwiki_char_code = '`'
|
||||||
|
|
||||||
|
" text: ~~deleted text~~
|
||||||
|
let g:vimwiki_rxDelText = '\~\~[^~`]\+\~\~'
|
||||||
|
let g:vimwiki_char_deltext = '\~\~'
|
||||||
|
|
||||||
|
" text: ^superscript^
|
||||||
|
let g:vimwiki_rxSuperScript = '\^[^^`]\+\^'
|
||||||
|
let g:vimwiki_char_superscript = '^'
|
||||||
|
|
||||||
|
" text: ,,subscript,,
|
||||||
|
let g:vimwiki_rxSubScript = ',,[^,`]\+,,'
|
||||||
|
let g:vimwiki_char_subscript = ',,'
|
||||||
|
|
||||||
|
" generic headers
|
||||||
|
let g:vimwiki_rxH = '#'
|
||||||
|
let g:vimwiki_symH = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" <hr>, horizontal rule
|
||||||
|
let g:vimwiki_rxHR = '^-----*$'
|
||||||
|
|
||||||
|
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||||
|
let g:vimwiki_rxTableSep = '|'
|
||||||
|
|
||||||
|
" List items start with optional whitespace(s) then '* ' or '1. ', '2. ', etc.
|
||||||
|
let g:vimwiki_rxListBullet = '^\s*[*+-]\s'
|
||||||
|
let g:vimwiki_rxListNumber = '^\s*[0-9]\+\.\s'
|
||||||
|
|
||||||
|
let g:vimwiki_rxListDefine = '::\%(\s\|$\)'
|
||||||
|
|
||||||
|
" Preformatted text
|
||||||
|
let g:vimwiki_rxPreStart = '```'
|
||||||
|
let g:vimwiki_rxPreEnd = '```'
|
||||||
|
|
||||||
|
" Math block
|
||||||
|
let g:vimwiki_rxMathStart = '{{\$'
|
||||||
|
let g:vimwiki_rxMathEnd = '}}\$'
|
||||||
|
|
||||||
|
let g:vimwiki_rxComment = '^\s*%%.*$'
|
||||||
367
bundle/git_vimwiki/syntax/vimwiki_markdown_custom.vim
Normal file
367
bundle/git_vimwiki/syntax/vimwiki_markdown_custom.vim
Normal file
@@ -0,0 +1,367 @@
|
|||||||
|
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||||
|
" Vimwiki syntax file
|
||||||
|
" Author: Stuart Andrews <stu.andrews@gmail.com>
|
||||||
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" LINKS: assume this is common to all syntaxes "{{{
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
" Load concrete Wiki syntax: sets regexes and templates for headers and links
|
||||||
|
|
||||||
|
" -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of larger regexes {{{
|
||||||
|
|
||||||
|
" LINKS: setup wikilink0 regexps {{{
|
||||||
|
" 0. [[URL]], or [[URL|DESCRIPTION]]
|
||||||
|
|
||||||
|
" 0a) match [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink0 = g:vimwiki_rxWikiLink
|
||||||
|
" 0b) match URL within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink0MatchUrl = g:vimwiki_rxWikiLinkMatchUrl
|
||||||
|
" 0c) match DESCRIPTION within [[URL|DESCRIPTION]]
|
||||||
|
let g:vimwiki_rxWikiLink0MatchDescr = g:vimwiki_rxWikiLinkMatchDescr
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: setup wikilink1 regexps {{{
|
||||||
|
" 1. [URL][], or [DESCRIPTION][URL]
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix = '['
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix = ']'
|
||||||
|
let g:vimwiki_rxWikiLink1Separator = ']['
|
||||||
|
|
||||||
|
" [URL][]
|
||||||
|
let g:vimwiki_WikiLink1Template1 = g:vimwiki_rxWikiLink1Prefix . '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLink1Separator. g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_WikiLink1Template2 = g:vimwiki_rxWikiLink1Prefix . '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWikiLink1Separator. '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWikiLink1Suffix
|
||||||
|
"
|
||||||
|
let magic_chars = '.*[]\^$'
|
||||||
|
let valid_chars = '[^\\\[\]]'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix = escape(g:vimwiki_rxWikiLink1Prefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix = escape(g:vimwiki_rxWikiLink1Suffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLink1Separator = escape(g:vimwiki_rxWikiLink1Separator, magic_chars)
|
||||||
|
let g:vimwiki_rxWikiLink1Url = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWikiLink1Descr = valid_chars.'\{-}'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWikiLink1InvalidPrefix = '[\]\[]\@<!'
|
||||||
|
let g:vimwiki_rxWikiLink1InvalidSuffix = '[\]\[]\@!'
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix = g:vimwiki_rxWikiLink1InvalidPrefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Prefix
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix = g:vimwiki_rxWikiLink1Suffix.
|
||||||
|
\ g:vimwiki_rxWikiLink1InvalidSuffix
|
||||||
|
|
||||||
|
"
|
||||||
|
" 1. [URL][], [DESCRIPTION][URL]
|
||||||
|
" 1a) match [URL][], [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_rxWikiLink1 = g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Suffix.
|
||||||
|
\ '\|'. g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Descr.g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" 1b) match URL within [URL][], [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_rxWikiLink1MatchUrl = g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLink1Url. '\ze'. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Suffix.
|
||||||
|
\ '\|'. g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ g:vimwiki_rxWikiLink1Descr. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLink1Url. '\ze'. g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" 1c) match DESCRIPTION within [DESCRIPTION][URL]
|
||||||
|
let g:vimwiki_rxWikiLink1MatchDescr = g:vimwiki_rxWikiLink1Prefix.
|
||||||
|
\ '\zs'. g:vimwiki_rxWikiLink1Descr.'\ze'. g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
let g:vimwiki_rxWikiLink1Prefix1 = g:vimwiki_rxWikiLink1Prefix
|
||||||
|
let g:vimwiki_rxWikiLink1Suffix1 = g:vimwiki_rxWikiLink1Separator.
|
||||||
|
\ g:vimwiki_rxWikiLink1Url.g:vimwiki_rxWikiLink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" *. ANY wikilink {{{
|
||||||
|
" *a) match ANY wikilink
|
||||||
|
let g:vimwiki_rxWikiLink = ''.
|
||||||
|
\ g:vimwiki_rxWikiLink0.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiLink1
|
||||||
|
" *b) match URL within ANY wikilink
|
||||||
|
let g:vimwiki_rxWikiLinkMatchUrl = ''.
|
||||||
|
\ g:vimwiki_rxWikiLink0MatchUrl.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiLink1MatchUrl
|
||||||
|
" *c) match DESCRIPTION within ANY wikilink
|
||||||
|
let g:vimwiki_rxWikiLinkMatchDescr = ''.
|
||||||
|
\ g:vimwiki_rxWikiLink0MatchDescr.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiLink1MatchDescr
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: setup of wikiincl regexps {{{
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Syntax helper {{{
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Setup weblink0 regexps {{{
|
||||||
|
" 0. URL : free-standing links: keep URL UR(L) strip trailing punct: URL; URL) UR(L))
|
||||||
|
let g:vimwiki_rxWeblink0 = g:vimwiki_rxWeblink
|
||||||
|
" 0a) match URL within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchUrl0 = g:vimwiki_rxWeblinkMatchUrl
|
||||||
|
" 0b) match DESCRIPTION within URL
|
||||||
|
let g:vimwiki_rxWeblinkMatchDescr0 = g:vimwiki_rxWeblinkMatchDescr
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" LINKS: Setup weblink1 regexps {{{
|
||||||
|
let g:vimwiki_rxWeblink1Prefix = '['
|
||||||
|
let g:vimwiki_rxWeblink1Suffix = ')'
|
||||||
|
let g:vimwiki_rxWeblink1Separator = ']('
|
||||||
|
" [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_Weblink1Template = g:vimwiki_rxWeblink1Prefix . '__LinkDescription__'.
|
||||||
|
\ g:vimwiki_rxWeblink1Separator. '__LinkUrl__'.
|
||||||
|
\ g:vimwiki_rxWeblink1Suffix
|
||||||
|
|
||||||
|
let magic_chars = '.*[]\^$'
|
||||||
|
let valid_chars = '[^\\]'
|
||||||
|
|
||||||
|
let g:vimwiki_rxWeblink1Prefix = escape(g:vimwiki_rxWeblink1Prefix, magic_chars)
|
||||||
|
let g:vimwiki_rxWeblink1Suffix = escape(g:vimwiki_rxWeblink1Suffix, magic_chars)
|
||||||
|
let g:vimwiki_rxWeblink1Separator = escape(g:vimwiki_rxWeblink1Separator, magic_chars)
|
||||||
|
let g:vimwiki_rxWeblink1Url = valid_chars.'\{-}'
|
||||||
|
let g:vimwiki_rxWeblink1Descr = valid_chars.'\{-}'
|
||||||
|
|
||||||
|
"
|
||||||
|
" " 2012-02-04 TODO not starting with [[ or ][ ? ... prefix = '[\[\]]\@<!\['
|
||||||
|
" 1. [DESCRIPTION](URL)
|
||||||
|
" 1a) match [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_rxWeblink1 = g:vimwiki_rxWeblink1Prefix.
|
||||||
|
\ g:vimwiki_rxWeblink1Url.g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ g:vimwiki_rxWeblink1Descr.g:vimwiki_rxWeblink1Suffix
|
||||||
|
" 1b) match URL within [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_rxWeblink1MatchUrl = g:vimwiki_rxWeblink1Prefix.
|
||||||
|
\ g:vimwiki_rxWeblink1Descr. g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ '\zs'.g:vimwiki_rxWeblink1Url.'\ze'. g:vimwiki_rxWeblink1Suffix
|
||||||
|
" 1c) match DESCRIPTION within [DESCRIPTION](URL)
|
||||||
|
let g:vimwiki_rxWeblink1MatchDescr = g:vimwiki_rxWeblink1Prefix.
|
||||||
|
\ '\zs'.g:vimwiki_rxWeblink1Descr.'\ze'. g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ g:vimwiki_rxWeblink1Url. g:vimwiki_rxWeblink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" Syntax helper {{{
|
||||||
|
" TODO: image links too !!
|
||||||
|
" let g:vimwiki_rxWeblink1Prefix1 = '!\?'. g:vimwiki_rxWeblink1Prefix
|
||||||
|
let g:vimwiki_rxWeblink1Prefix1 = g:vimwiki_rxWeblink1Prefix
|
||||||
|
let g:vimwiki_rxWeblink1Suffix1 = g:vimwiki_rxWeblink1Separator.
|
||||||
|
\ g:vimwiki_rxWeblink1Url.g:vimwiki_rxWeblink1Suffix
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" *. ANY weblink {{{
|
||||||
|
" *a) match ANY weblink
|
||||||
|
let g:vimwiki_rxWeblink = ''.
|
||||||
|
\ g:vimwiki_rxWeblink1.'\|'.
|
||||||
|
\ g:vimwiki_rxWeblink0
|
||||||
|
" *b) match URL within ANY weblink
|
||||||
|
let g:vimwiki_rxWeblinkMatchUrl = ''.
|
||||||
|
\ g:vimwiki_rxWeblink1MatchUrl.'\|'.
|
||||||
|
\ g:vimwiki_rxWeblinkMatchUrl0
|
||||||
|
" *c) match DESCRIPTION within ANY weblink
|
||||||
|
let g:vimwiki_rxWeblinkMatchDescr = ''.
|
||||||
|
\ g:vimwiki_rxWeblink1MatchDescr.'\|'.
|
||||||
|
\ g:vimwiki_rxWeblinkMatchDescr0
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" LINKS: Setup anylink regexps {{{
|
||||||
|
let g:vimwiki_rxAnyLink = g:vimwiki_rxWikiLink.'\|'.
|
||||||
|
\ g:vimwiki_rxWikiIncl.'\|'.g:vimwiki_rxWeblink
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" }}} end of Links
|
||||||
|
|
||||||
|
" LINKS: highlighting is complicated due to "nonexistent" links feature {{{
|
||||||
|
function! s:add_target_syntax_ON(target, type) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
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) " {{{
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom '[vimwiki_debug] syntax target > '.a:target
|
||||||
|
endif
|
||||||
|
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 g:vimwiki_rxWikiLink1InvalidPrefix.a:target.
|
||||||
|
\ g:vimwiki_rxWikiLink1InvalidSuffix
|
||||||
|
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(b:existing_wikifiles)
|
||||||
|
" Wikilink1 Dirs set up upon BufEnter (see plugin/...)
|
||||||
|
let safe_dirs = vimwiki#base#file_pattern(b:existing_wikidirs)
|
||||||
|
|
||||||
|
" match [URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" match [DESCRIPTION][URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2,
|
||||||
|
\ safe_links, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
|
||||||
|
" match [DIRURL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1,
|
||||||
|
\ safe_dirs, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" match [DESCRIPTION][DIRURL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2,
|
||||||
|
\ safe_dirs, g:vimwiki_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 VimwikiGet('maxhi')
|
||||||
|
" WikiLink
|
||||||
|
call s:add_target_syntax_OFF(g:vimwiki_rxWikiLink1, 'VimwikiWikiLink1')
|
||||||
|
|
||||||
|
" Subsequently, links verified on vimwiki's path are highlighted as existing
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
call s:highlight_existing_links()
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
else
|
||||||
|
let time01 = vimwiki#u#time(starttime) "XXX
|
||||||
|
" Wikilink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWikiLink1, 'VimwikiWikiLink1')
|
||||||
|
let time02 = vimwiki#u#time(starttime) "XXX
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Weblink
|
||||||
|
call s:add_target_syntax_ON(g:vimwiki_rxWeblink1, 'VimwikiWeblink1')
|
||||||
|
|
||||||
|
" WikiLink
|
||||||
|
" All remaining schemes are highlighted automatically
|
||||||
|
let rxSchemes = '\%('.
|
||||||
|
\ join(split(g:vimwiki_schemes, '\s*,\s*'), '\|').'\|'.
|
||||||
|
\ join(split(g:vimwiki_web_schemes1, '\s*,\s*'), '\|').
|
||||||
|
\ '\):'
|
||||||
|
|
||||||
|
" a) match [nonwiki-scheme-URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template1,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLink1Url, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" b) match [DESCRIPTION][nonwiki-scheme-URL]
|
||||||
|
let target = vimwiki#base#apply_template(g:vimwiki_WikiLink1Template2,
|
||||||
|
\ rxSchemes.g:vimwiki_rxWikiLink1Url, g:vimwiki_rxWikiLink1Descr, '')
|
||||||
|
call s:add_target_syntax_ON(s:wrap_wikilink1_rx(target), 'VimwikiWikiLink1')
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" generic headers "{{{
|
||||||
|
|
||||||
|
" Header levels, 1-6
|
||||||
|
for i in range(1,6)
|
||||||
|
execute 'syntax match VimwikiHeader'.i.' /'.g:vimwiki_rxH{i}.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiCode,VimwikiLink,VimwikiWeblink1,VimwikiWikiLink1,@Spell'
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" concealed chars " {{{
|
||||||
|
if exists("+conceallevel")
|
||||||
|
syntax conceal on
|
||||||
|
endif
|
||||||
|
|
||||||
|
syntax spell toplevel
|
||||||
|
|
||||||
|
if g:vimwiki_debug > 1
|
||||||
|
echom 'WikiLink1 Prefix: '.g:vimwiki_rxWikiLink1Prefix1
|
||||||
|
echom 'WikiLink1 Suffix: '.g:vimwiki_rxWikiLink1Suffix1
|
||||||
|
echom 'Weblink1 Prefix: '.g:vimwiki_rxWeblink1Prefix1
|
||||||
|
echom 'Weblink1 Suffix: '.g:vimwiki_rxWeblink1Suffix1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" VimwikiWikiLink1Char is for syntax markers (and also URL when a description
|
||||||
|
" is present) and may be concealed
|
||||||
|
let options = ' contained transparent contains=NONE'
|
||||||
|
" conceal wikilink1
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Prefix.'/'.options
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Suffix.'/'.options
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Prefix1.'/'.options
|
||||||
|
execute 'syn match VimwikiWikiLink1Char /'.g:vimwiki_rxWikiLink1Suffix1.'/'.options
|
||||||
|
|
||||||
|
" conceal weblink1
|
||||||
|
execute 'syn match VimwikiWeblink1Char "'.g:vimwiki_rxWeblink1Prefix1.'"'.options
|
||||||
|
execute 'syn match VimwikiWeblink1Char "'.g:vimwiki_rxWeblink1Suffix1.'"'.options
|
||||||
|
|
||||||
|
if exists("+conceallevel")
|
||||||
|
syntax conceal off
|
||||||
|
endif
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" non concealed chars " {{{
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" main syntax groups {{{
|
||||||
|
|
||||||
|
" Tables
|
||||||
|
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
||||||
|
\ transparent contains=VimwikiCellSeparator,
|
||||||
|
\ VimwikiLinkT,
|
||||||
|
\ VimwikiWeblink1T,
|
||||||
|
\ VimwikiWikiLink1T,
|
||||||
|
\ VimwikiNoExistsLinkT,
|
||||||
|
\ VimwikiEmoticons,
|
||||||
|
\ VimwikiTodo,
|
||||||
|
\ VimwikiBoldT,
|
||||||
|
\ VimwikiItalicT,
|
||||||
|
\ VimwikiBoldItalicT,
|
||||||
|
\ VimwikiItalicBoldT,
|
||||||
|
\ VimwikiDelTextT,
|
||||||
|
\ VimwikiSuperScriptT,
|
||||||
|
\ VimwikiSubScriptT,
|
||||||
|
\ VimwikiCodeT,
|
||||||
|
\ VimwikiEqInT,
|
||||||
|
\ @Spell
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
" header groups highlighting "{{{
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
" syntax group highlighting "{{{
|
||||||
|
hi def link VimwikiWeblink1 VimwikiLink
|
||||||
|
hi def link VimwikiWeblink1T VimwikiLink
|
||||||
|
|
||||||
|
hi def link VimwikiWikiLink1 VimwikiLink
|
||||||
|
hi def link VimwikiWikiLink1T VimwikiLink
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
" EMBEDDED syntax setup "{{{
|
||||||
|
"}}}
|
||||||
|
"
|
||||||
@@ -4,6 +4,13 @@
|
|||||||
" Author: Maxim Kim <habamax@gmail.com>
|
" Author: Maxim Kim <habamax@gmail.com>
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
" Home: http://code.google.com/p/vimwiki/
|
||||||
|
|
||||||
|
" placeholder for math environments
|
||||||
|
let b:vimwiki_mathEnv = ""
|
||||||
|
|
||||||
|
" text: $ equation_inline $
|
||||||
|
let g:vimwiki_rxEqIn = '\$[^$`]\+\$'
|
||||||
|
let g:vimwiki_char_eqin = '\$'
|
||||||
|
|
||||||
" text: '''strong'''
|
" text: '''strong'''
|
||||||
let g:vimwiki_rxBold = "'''[^']\\+'''"
|
let g:vimwiki_rxBold = "'''[^']\\+'''"
|
||||||
let g:vimwiki_char_bold = "'''"
|
let g:vimwiki_char_bold = "'''"
|
||||||
@@ -34,31 +41,22 @@ let g:vimwiki_char_superscript = '^'
|
|||||||
let g:vimwiki_rxSubScript = ',,[^,]\+,,'
|
let g:vimwiki_rxSubScript = ',,[^,]\+,,'
|
||||||
let g:vimwiki_char_subscript = ',,'
|
let g:vimwiki_char_subscript = ',,'
|
||||||
|
|
||||||
" Header levels, 1-6
|
" generic headers
|
||||||
let g:vimwiki_rxH1 = '^\s*=\{1}[^=]\+.*[^=]\+=\{1}\s*$'
|
let g:vimwiki_rxH = '='
|
||||||
let g:vimwiki_rxH2 = '^\s*=\{2}[^=]\+.*[^=]\+=\{2}\s*$'
|
let g:vimwiki_symH = 1
|
||||||
let g:vimwiki_rxH3 = '^\s*=\{3}[^=]\+.*[^=]\+=\{3}\s*$'
|
|
||||||
let g:vimwiki_rxH4 = '^\s*=\{4}[^=]\+.*[^=]\+=\{4}\s*$'
|
|
||||||
let g:vimwiki_rxH5 = '^\s*=\{5}[^=]\+.*[^=]\+=\{5}\s*$'
|
|
||||||
let g:vimwiki_rxH6 = '^\s*=\{6}[^=]\+.*[^=]\+=\{6}\s*$'
|
|
||||||
let g:vimwiki_rxHeader = '\%('.g:vimwiki_rxH1.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH2.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH3.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH4.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH5.'\)\|'.
|
|
||||||
\ '\%('.g:vimwiki_rxH6.'\)'
|
|
||||||
let g:vimwiki_char_header = '\%(^\s*=\+\)\|\%(=\+\s*$\)'
|
|
||||||
|
|
||||||
" <hr>, horizontal rule
|
" <hr>, horizontal rule
|
||||||
let g:vimwiki_rxHR = '^----.*$'
|
let g:vimwiki_rxHR = '^-----*$'
|
||||||
|
|
||||||
" Tables. Each line starts and ends with '||'; each cell is separated by '||'
|
" Tables. Each line starts and ends with '|'; each cell is separated by '|'
|
||||||
let g:vimwiki_rxTable = '||'
|
let g:vimwiki_rxTableSep = '|'
|
||||||
|
|
||||||
" Bulleted list items start with whitespace(s), then '*'
|
" Bulleted list items start with whitespace(s), then '*'
|
||||||
" highlight only bullets and digits.
|
" highlight only bullets and digits.
|
||||||
let g:vimwiki_rxListBullet = '^\s*\*\+\([^*]*$\)\@='
|
let g:vimwiki_rxListBullet = '^\s*\*\+\s\%([^*]*$\)\@='
|
||||||
let g:vimwiki_rxListNumber = '^\s*#\+'
|
let g:vimwiki_rxListNumber = '^\s*#\+\s'
|
||||||
|
|
||||||
let g:vimwiki_rxListDefine = '^\%(;\|:\)\s'
|
let g:vimwiki_rxListDefine = '^\%(;\|:\)\s'
|
||||||
|
|
||||||
@@ -66,4 +64,8 @@ let g:vimwiki_rxListDefine = '^\%(;\|:\)\s'
|
|||||||
let g:vimwiki_rxPreStart = '<pre>'
|
let g:vimwiki_rxPreStart = '<pre>'
|
||||||
let g:vimwiki_rxPreEnd = '<\/pre>'
|
let g:vimwiki_rxPreEnd = '<\/pre>'
|
||||||
|
|
||||||
|
" Math block
|
||||||
|
let g:vimwiki_rxMathStart = '{{\$'
|
||||||
|
let g:vimwiki_rxMathEnd = '}}\$'
|
||||||
|
|
||||||
let g:vimwiki_rxComment = '^\s*%%.*$'
|
let g:vimwiki_rxComment = '^\s*%%.*$'
|
||||||
@@ -46,6 +46,9 @@ endif"}}}
|
|||||||
if !exists("g:gundo_prefer_python3")"{{{
|
if !exists("g:gundo_prefer_python3")"{{{
|
||||||
let g:gundo_prefer_python3 = 0
|
let g:gundo_prefer_python3 = 0
|
||||||
endif"}}}
|
endif"}}}
|
||||||
|
if !exists("g:gundo_auto_preview")"{{{
|
||||||
|
let g:gundo_auto_preview = 1
|
||||||
|
endif"}}}
|
||||||
|
|
||||||
let s:has_supported_python = 0
|
let s:has_supported_python = 0
|
||||||
if g:gundo_prefer_python3 && has('python3')"{{{
|
if g:gundo_prefer_python3 && has('python3')"{{{
|
||||||
@@ -111,6 +114,7 @@ function! s:GundoMapGraph()"{{{
|
|||||||
nnoremap <script> <silent> <buffer> gg gg:call <sid>GundoMove(1)<CR>
|
nnoremap <script> <silent> <buffer> gg gg:call <sid>GundoMove(1)<CR>
|
||||||
nnoremap <script> <silent> <buffer> P :call <sid>GundoPlayTo()<CR>
|
nnoremap <script> <silent> <buffer> P :call <sid>GundoPlayTo()<CR>
|
||||||
nnoremap <script> <silent> <buffer> p :call <sid>GundoRenderChangePreview()<CR>
|
nnoremap <script> <silent> <buffer> p :call <sid>GundoRenderChangePreview()<CR>
|
||||||
|
nnoremap <script> <silent> <buffer> r :call <sid>GundoRenderPreview()<CR>
|
||||||
nnoremap <script> <silent> <buffer> q :call <sid>GundoClose()<CR>
|
nnoremap <script> <silent> <buffer> q :call <sid>GundoClose()<CR>
|
||||||
cabbrev <script> <silent> <buffer> q call <sid>GundoClose()
|
cabbrev <script> <silent> <buffer> q call <sid>GundoClose()
|
||||||
cabbrev <script> <silent> <buffer> quit call <sid>GundoClose()
|
cabbrev <script> <silent> <buffer> quit call <sid>GundoClose()
|
||||||
@@ -318,11 +322,17 @@ function! s:GundoToggle()"{{{
|
|||||||
endfunction"}}}
|
endfunction"}}}
|
||||||
|
|
||||||
function! s:GundoShow()"{{{
|
function! s:GundoShow()"{{{
|
||||||
|
if !s:GundoIsVisible()
|
||||||
|
let g:gundo_target_n = bufnr('')
|
||||||
|
let g:gundo_target_f = @%
|
||||||
call s:GundoOpen()
|
call s:GundoOpen()
|
||||||
|
endif
|
||||||
endfunction"}}}
|
endfunction"}}}
|
||||||
|
|
||||||
function! s:GundoHide()"{{{
|
function! s:GundoHide()"{{{
|
||||||
|
if s:GundoIsVisible()
|
||||||
call s:GundoClose()
|
call s:GundoClose()
|
||||||
|
endif
|
||||||
endfunction"}}}
|
endfunction"}}}
|
||||||
|
|
||||||
"}}}
|
"}}}
|
||||||
@@ -377,7 +387,9 @@ function! s:GundoMove(direction) range"{{{
|
|||||||
call cursor(0, idx2 + 1)
|
call cursor(0, idx2 + 1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if g:gundo_auto_preview == 1
|
||||||
call s:GundoRenderPreview()
|
call s:GundoRenderPreview()
|
||||||
|
endif
|
||||||
endfunction"}}}
|
endfunction"}}}
|
||||||
|
|
||||||
"}}}
|
"}}}
|
||||||
@@ -436,6 +448,14 @@ function! gundo#GundoToggle()"{{{
|
|||||||
call s:GundoToggle()
|
call s:GundoToggle()
|
||||||
endfunction"}}}
|
endfunction"}}}
|
||||||
|
|
||||||
|
function! gundo#GundoShow()"{{{
|
||||||
|
call s:GundoShow()
|
||||||
|
endfunction"}}}
|
||||||
|
|
||||||
|
function! gundo#GundoHide()"{{{
|
||||||
|
call s:GundoHide()
|
||||||
|
endfunction"}}}
|
||||||
|
|
||||||
function! gundo#GundoRenderGraph()"{{{
|
function! gundo#GundoRenderGraph()"{{{
|
||||||
call s:GundoRenderGraph()
|
call s:GundoRenderGraph()
|
||||||
endfunction"}}}
|
endfunction"}}}
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ Making Vim's undo tree usable by humans.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
CONTENTS *Gundo-contents*
|
CONTENTS *Gundo-contents*
|
||||||
|
|
||||||
1. Intro .......................... |GundoIntro|
|
1. Intro ........................... |GundoIntro|
|
||||||
2. Usage .......................... |GundoUsage|
|
2. Usage ........................... |GundoUsage|
|
||||||
3. Configuration .................. |GundoConfig|
|
3. Configuration ................... |GundoConfig|
|
||||||
3.1 gundo_width ............... |gundo_width|
|
3.1 gundo_width ............... |gundo_width|
|
||||||
3.2 gundo_preview_height ...... |gundo_preview_height|
|
3.2 gundo_preview_height ...... |gundo_preview_height|
|
||||||
3.3 gundo_preview_bottom ...... |gundo_preview_bottom|
|
3.3 gundo_preview_bottom ...... |gundo_preview_bottom|
|
||||||
@@ -19,11 +19,12 @@ CONTENTS *Gundo-contents*
|
|||||||
3.8 gundo_close_on_revert ..... |gundo_close_on_revert|
|
3.8 gundo_close_on_revert ..... |gundo_close_on_revert|
|
||||||
3.9 gundo_preview_statusline .. |gundo_preview_statusline|
|
3.9 gundo_preview_statusline .. |gundo_preview_statusline|
|
||||||
gundo_tree_statusline ..... |gundo_tree_statusline|
|
gundo_tree_statusline ..... |gundo_tree_statusline|
|
||||||
4. License ........................ |GundoLicense|
|
3.10 gundo_auto_preview ........ |gundo_auto_preview|
|
||||||
5. Bugs ........................... |GundoBugs|
|
4. License ......................... |GundoLicense|
|
||||||
6. Contributing ................... |GundoContributing|
|
5. Bugs ............................ |GundoBugs|
|
||||||
7. Changelog ...................... |GundoChangelog|
|
6. Contributing .................... |GundoContributing|
|
||||||
8. Credits ........................ |GundoCredits|
|
7. Changelog ....................... |GundoChangelog|
|
||||||
|
8. Credits ......................... |GundoCredits|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
1. Intro *GundoIntro*
|
1. Intro *GundoIntro*
|
||||||
@@ -206,6 +207,15 @@ Set these to a string to display it as the status line for each Gundo window.
|
|||||||
|
|
||||||
Default: unset (windows use the default statusline)
|
Default: unset (windows use the default statusline)
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
3.10 g:gundo_auto_preview *gundo_auto_preview*
|
||||||
|
|
||||||
|
Set this to 0 to disable automatically rendering preview diffs as you move
|
||||||
|
through the undo tree (you can still render a specific diff with r). This can
|
||||||
|
be useful on large files and undo trees to speed up Gundo.
|
||||||
|
|
||||||
|
Default: 1 (automatically preview diffs)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
4. License *GundoLicense*
|
4. License *GundoLicense*
|
||||||
|
|
||||||
@@ -228,7 +238,10 @@ GitHub: http://github.com/sjl/gundo.vim/
|
|||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
7. Changelog *GundoChangelog*
|
7. Changelog *GundoChangelog*
|
||||||
|
v2.4.0
|
||||||
|
* Add auto preview option.
|
||||||
|
* Add 'r' mapping to preview current state.
|
||||||
|
* Add public gundo#GundoShow() and gundo#GundoHide() functions.
|
||||||
v2.3.0
|
v2.3.0
|
||||||
* Add statusline configuration.
|
* Add statusline configuration.
|
||||||
v2.2.2
|
v2.2.2
|
||||||
|
|||||||
@@ -10,8 +10,13 @@
|
|||||||
" Dependencies:
|
" Dependencies:
|
||||||
" - SearchSpecial.vim autoload script (optional, for improved search messages).
|
" - SearchSpecial.vim autoload script (optional, for improved search messages).
|
||||||
"
|
"
|
||||||
" Version: 2.6.2
|
" Version: 2.6.4
|
||||||
" Changes:
|
" Changes:
|
||||||
|
" 23-Apr-2012, Ingo Karkat + fanhe
|
||||||
|
" - Force case via \c / \C instead of temporarily unsetting 'smartcase'.
|
||||||
|
" - Allow to override 'ignorecase' setting via g:mwIgnoreCase. Thanks to fanhe
|
||||||
|
" for the idea and sending a patch.
|
||||||
|
"
|
||||||
" 26-Mar-2012, Ingo Karkat
|
" 26-Mar-2012, Ingo Karkat
|
||||||
" - ENH: When a [count] exceeding the number of available mark groups is given,
|
" - ENH: When a [count] exceeding the number of available mark groups is given,
|
||||||
" a summary of marks is given and the user is asked to select a mark group.
|
" a summary of marks is given and the user is asked to select a mark group.
|
||||||
@@ -215,6 +220,9 @@ endif
|
|||||||
function! s:EscapeText( text )
|
function! s:EscapeText( text )
|
||||||
return substitute( escape(a:text, '\' . '^$.*[~'), "\n", '\\n', 'ge' )
|
return substitute( escape(a:text, '\' . '^$.*[~'), "\n", '\\n', 'ge' )
|
||||||
endfunction
|
endfunction
|
||||||
|
function! s:IsIgnoreCase( expr )
|
||||||
|
return ((exists('g:mwIgnoreCase') ? g:mwIgnoreCase : &ignorecase) && a:expr !~# '\\\@<!\\C')
|
||||||
|
endfunction
|
||||||
" Mark the current word, like the built-in star command.
|
" Mark the current word, like the built-in star command.
|
||||||
" If the cursor is on an existing mark, remove it.
|
" If the cursor is on an existing mark, remove it.
|
||||||
function! mark#MarkCurrentWord( groupNum )
|
function! mark#MarkCurrentWord( groupNum )
|
||||||
@@ -300,7 +308,7 @@ function! s:MarkMatch( indices, expr )
|
|||||||
" 'ignorecase' and 'smartcase' settings.
|
" 'ignorecase' and 'smartcase' settings.
|
||||||
" Make the match according to the 'ignorecase' setting, like the star command.
|
" Make the match according to the 'ignorecase' setting, like the star command.
|
||||||
" (But honor an explicit case-sensitive regexp via the /\C/ atom.)
|
" (But honor an explicit case-sensitive regexp via the /\C/ atom.)
|
||||||
let l:expr = ((&ignorecase && a:expr !~# '\\\@<!\\C') ? '\c' . a:expr : a:expr)
|
let l:expr = (s:IsIgnoreCase(a:expr) ? '\c' : '') . a:expr
|
||||||
|
|
||||||
" To avoid an arbitrary ordering of highlightings, we assign a different
|
" To avoid an arbitrary ordering of highlightings, we assign a different
|
||||||
" priority based on the highlight group, and ensure that the highest
|
" priority based on the highlight group, and ensure that the highest
|
||||||
@@ -561,11 +569,12 @@ function! mark#CurrentMark()
|
|||||||
let i = s:markNum - 1
|
let i = s:markNum - 1
|
||||||
while i >= 0
|
while i >= 0
|
||||||
if ! empty(s:pattern[i])
|
if ! empty(s:pattern[i])
|
||||||
|
let matchPattern = (s:IsIgnoreCase(s:pattern[i]) ? '\c' : '\C') . s:pattern[i]
|
||||||
" Note: col() is 1-based, all other indexes zero-based!
|
" Note: col() is 1-based, all other indexes zero-based!
|
||||||
let start = 0
|
let start = 0
|
||||||
while start >= 0 && start < strlen(line) && start < col('.')
|
while start >= 0 && start < strlen(line) && start < col('.')
|
||||||
let b = match(line, s:pattern[i], start)
|
let b = match(line, matchPattern, start)
|
||||||
let e = matchend(line, s:pattern[i], start)
|
let e = matchend(line, matchPattern, start)
|
||||||
if b < col('.') && col('.') <= e
|
if b < col('.') && col('.') <= e
|
||||||
return [s:pattern[i], [line('.'), (b + 1)], i]
|
return [s:pattern[i], [line('.'), (b + 1)], i]
|
||||||
endif
|
endif
|
||||||
@@ -617,8 +626,9 @@ function! s:Search( pattern, isBackward, currentMarkPosition, searchType )
|
|||||||
" result from the *-command-alike mappings should not obey 'smartcase' (like
|
" result from the *-command-alike mappings should not obey 'smartcase' (like
|
||||||
" the * command itself), anyway. If the :Mark command wants to support
|
" the * command itself), anyway. If the :Mark command wants to support
|
||||||
" 'smartcase', it'd have to emulate that into the regular expression.
|
" 'smartcase', it'd have to emulate that into the regular expression.
|
||||||
let l:save_smartcase = &smartcase
|
" Instead of temporarily unsetting 'smartcase', we force the correct
|
||||||
set nosmartcase
|
" case-matching behavior through \c / \C.
|
||||||
|
let l:searchPattern = (s:IsIgnoreCase(a:pattern) ? '\c' : '\C') . a:pattern
|
||||||
|
|
||||||
let l:count = v:count1
|
let l:count = v:count1
|
||||||
let l:isWrapped = 0
|
let l:isWrapped = 0
|
||||||
@@ -628,7 +638,7 @@ function! s:Search( pattern, isBackward, currentMarkPosition, searchType )
|
|||||||
let [l:prevLine, l:prevCol] = [line('.'), col('.')]
|
let [l:prevLine, l:prevCol] = [line('.'), col('.')]
|
||||||
|
|
||||||
" Search for next match, 'wrapscan' applies.
|
" Search for next match, 'wrapscan' applies.
|
||||||
let [l:line, l:col] = searchpos( a:pattern, (a:isBackward ? 'b' : '') )
|
let [l:line, l:col] = searchpos( l:searchPattern, (a:isBackward ? 'b' : '') )
|
||||||
|
|
||||||
"****D echomsg '****' a:isBackward string([l:line, l:col]) string(a:currentMarkPosition) l:count
|
"****D echomsg '****' a:isBackward string([l:line, l:col]) string(a:currentMarkPosition) l:count
|
||||||
if a:isBackward && l:line > 0 && [l:line, l:col] == a:currentMarkPosition && l:count == v:count1
|
if a:isBackward && l:line > 0 && [l:line, l:col] == a:currentMarkPosition && l:count == v:count1
|
||||||
@@ -674,7 +684,6 @@ function! s:Search( pattern, isBackward, currentMarkPosition, searchType )
|
|||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
let &smartcase = l:save_smartcase
|
|
||||||
|
|
||||||
" We're not stuck when the search wrapped around and landed on the current
|
" We're not stuck when the search wrapped around and landed on the current
|
||||||
" mark; that's why we exclude a possible wrap-around via v:count1 == 1.
|
" mark; that's why we exclude a possible wrap-around via v:count1 == 1.
|
||||||
|
|||||||
@@ -263,6 +263,12 @@ To turn off the automatic persistence of marks across Vim sessions: >
|
|||||||
let g:mwAutoSaveMarks = 0
|
let g:mwAutoSaveMarks = 0
|
||||||
You can still explicitly save marks via |:MarkSave|.
|
You can still explicitly save marks via |:MarkSave|.
|
||||||
|
|
||||||
|
*g:mwIgnoreCase*
|
||||||
|
If you have set 'ignorecase', but want marks to be case-insensitive, you can
|
||||||
|
override the default behavior of using 'ignorecase' by setting: >
|
||||||
|
let g:mwIgnoreCase = 0
|
||||||
|
<
|
||||||
|
|
||||||
*mark-mappings*
|
*mark-mappings*
|
||||||
You can use different mappings by mapping to the <Plug>Mark... mappings (use
|
You can use different mappings by mapping to the <Plug>Mark... mappings (use
|
||||||
":map <Plug>Mark" to list them all) before this plugin is sourced.
|
":map <Plug>Mark" to list them all) before this plugin is sourced.
|
||||||
@@ -318,6 +324,10 @@ http://vim.wikia.com/wiki/Highlight_multiple_words:
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
HISTORY *mark-history*
|
HISTORY *mark-history*
|
||||||
|
|
||||||
|
2.6.4 23-Apr-2012
|
||||||
|
- Allow to override 'ignorecase' setting via g:mwIgnoreCase. Thanks to fanhe
|
||||||
|
for the idea and sending a patch.
|
||||||
|
|
||||||
2.6.3 27-Mar-2012
|
2.6.3 27-Mar-2012
|
||||||
- ENH: Allow choosing of palette and limiting of default mark highlight groups
|
- ENH: Allow choosing of palette and limiting of default mark highlight groups
|
||||||
via g:mwDefaultHighlightingPalette and g:mwDefaultHighlightingNum.
|
via g:mwDefaultHighlightingPalette and g:mwDefaultHighlightingNum.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,286 +0,0 @@
|
|||||||
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
|
||||||
" Vimwiki autoload plugin file
|
|
||||||
" Desc: Handle diary notes
|
|
||||||
" Author: Maxim Kim <habamax@gmail.com>
|
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
|
||||||
|
|
||||||
" Load only once {{{
|
|
||||||
if exists("g:loaded_vimwiki_diary_auto") || &cp
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:loaded_vimwiki_diary_auto = 1
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
function! s:prefix_zero(num) "{{{
|
|
||||||
if a:num < 10
|
|
||||||
return '0'.a:num
|
|
||||||
endif
|
|
||||||
return a:num
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:desc(d1, d2) "{{{
|
|
||||||
return a:d1 == a:d2 ? 0 : a:d1 < a:d2 ? 1 : -1
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_date_link(fmt) "{{{
|
|
||||||
return strftime(a:fmt)
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:link_exists(lines, link) "{{{
|
|
||||||
let link_exists = 0
|
|
||||||
for line in a:lines
|
|
||||||
if line =~ escape(a:link, '[]\')
|
|
||||||
let link_exists = 1
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
return link_exists
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:diary_path() "{{{
|
|
||||||
return VimwikiGet('path').VimwikiGet('diary_rel_path')
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:diary_index() "{{{
|
|
||||||
return s:diary_path().VimwikiGet('diary_index').VimwikiGet('ext')
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_diary_range(lines, header) "{{{
|
|
||||||
let rx = '\[\[\d\{4}-\d\d-\d\d\]\]'
|
|
||||||
let idx = 0
|
|
||||||
let ln_start = -1
|
|
||||||
let ln_end = -1
|
|
||||||
for line in a:lines
|
|
||||||
if ln_start != -1
|
|
||||||
if line =~ '^\s*\(=\)\+.*\1\s*$' || (line !~ rx && line !~ '^\s*$')
|
|
||||||
break
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
if line =~ '^\s*\(=\)\+\s*'.a:header.'\s*\1\s*$'
|
|
||||||
let ln_start = idx + 1
|
|
||||||
endif
|
|
||||||
let idx += 1
|
|
||||||
endfor
|
|
||||||
|
|
||||||
let ln_end = idx
|
|
||||||
return [ln_start, ln_end]
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:diary_date_link() "{{{
|
|
||||||
return s:get_date_link(VimwikiGet('diary_link_fmt'))
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_file_contents(file_name) "{{{
|
|
||||||
let lines = []
|
|
||||||
let bufnr = bufnr(expand(a:file_name))
|
|
||||||
if bufnr != -1
|
|
||||||
let lines = getbufline(bufnr, 1, '$')
|
|
||||||
else
|
|
||||||
try
|
|
||||||
let lines = readfile(expand(a:file_name))
|
|
||||||
catch
|
|
||||||
endtry
|
|
||||||
endif
|
|
||||||
return [lines, bufnr]
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_links() "{{{
|
|
||||||
let rx = '\d\{4}-\d\d-\d\d'
|
|
||||||
let s_links = glob(VimwikiGet('path').VimwikiGet('diary_rel_path').
|
|
||||||
\ '*'.VimwikiGet('ext'))
|
|
||||||
|
|
||||||
let s_links = substitute(s_links, '\'.VimwikiGet('ext'), "", "g")
|
|
||||||
let links = split(s_links, '\n')
|
|
||||||
|
|
||||||
" remove backup files (.wiki~)
|
|
||||||
call filter(links, 'v:val !~ ''.*\~$''')
|
|
||||||
|
|
||||||
" remove paths
|
|
||||||
call map(links, 'fnamemodify(v:val, ":t")')
|
|
||||||
|
|
||||||
call filter(links, 'v:val =~ "'.escape(rx, '\').'"')
|
|
||||||
return links
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:get_position_links(link) "{{{
|
|
||||||
let idx = -1
|
|
||||||
let links = []
|
|
||||||
if a:link =~ '\d\{4}-\d\d-\d\d'
|
|
||||||
let links = s:get_links()
|
|
||||||
" include 'today' into links
|
|
||||||
if index(links, s:diary_date_link()) == -1
|
|
||||||
call add(links, s:diary_date_link())
|
|
||||||
endif
|
|
||||||
call sort(links)
|
|
||||||
let idx = index(links, a:link)
|
|
||||||
endif
|
|
||||||
return [idx, links]
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:format_links(links) "{{{
|
|
||||||
let lines = []
|
|
||||||
let line = '| '
|
|
||||||
let idx = 0
|
|
||||||
let trigger = 0
|
|
||||||
while idx < len(a:links)
|
|
||||||
if idx/VimwikiGet('diary_link_count') > trigger
|
|
||||||
let trigger = idx/VimwikiGet('diary_link_count')
|
|
||||||
call add(lines, substitute(line, '\s\+$', '', ''))
|
|
||||||
let line = '| '
|
|
||||||
endif
|
|
||||||
let line .= a:links[idx].' | '
|
|
||||||
let idx += 1
|
|
||||||
endwhile
|
|
||||||
call add(lines, substitute(line, '\s\+$', '', ''))
|
|
||||||
call extend(lines, [''])
|
|
||||||
|
|
||||||
return lines
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:add_link(page, header, link) "{{{
|
|
||||||
let [lines, bufnr] = s:get_file_contents(a:page)
|
|
||||||
|
|
||||||
let [ln_start, ln_end] = s:get_diary_range(lines, a:header)
|
|
||||||
|
|
||||||
let link = '[['.a:link.']]'
|
|
||||||
|
|
||||||
let link_exists = s:link_exists(lines[ln_start : ln_end], link)
|
|
||||||
|
|
||||||
if !link_exists
|
|
||||||
|
|
||||||
if ln_start == -1
|
|
||||||
call insert(lines, '= '.a:header.' =')
|
|
||||||
let ln_start = 1
|
|
||||||
let ln_end = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" removing 'old' links
|
|
||||||
let idx = ln_end - ln_start
|
|
||||||
while idx > 0
|
|
||||||
call remove(lines, ln_start)
|
|
||||||
let idx -= 1
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" get all diary links from filesystem
|
|
||||||
let links = s:get_links()
|
|
||||||
call map(links, '"[[".v:val."]]"')
|
|
||||||
|
|
||||||
" add current link
|
|
||||||
if index(links, link) == -1
|
|
||||||
call add(links, link)
|
|
||||||
endif
|
|
||||||
|
|
||||||
let links = sort(links, 's:desc')
|
|
||||||
call extend(lines, s:format_links(links), ln_start)
|
|
||||||
|
|
||||||
if bufnr != -1
|
|
||||||
exe 'buffer '.bufnr
|
|
||||||
if !&readonly
|
|
||||||
1,$delete _
|
|
||||||
call append(1, lines)
|
|
||||||
1,1delete _
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call writefile(lines, expand(a:page))
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:make_date_link(...) "{{{
|
|
||||||
if a:0
|
|
||||||
let link = a:1
|
|
||||||
else
|
|
||||||
let link = s:diary_date_link()
|
|
||||||
endif
|
|
||||||
let header = VimwikiGet('diary_header')
|
|
||||||
call s:add_link(s:diary_index(), header, link)
|
|
||||||
return VimwikiGet('diary_rel_path').link
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! vimwiki#diary#make_note(index, ...) "{{{
|
|
||||||
call vimwiki#base#select(a:index)
|
|
||||||
call vimwiki#base#mkdir(VimwikiGet('path').VimwikiGet('diary_rel_path'))
|
|
||||||
if a:0
|
|
||||||
let link = s:make_date_link(a:1)
|
|
||||||
else
|
|
||||||
let link = s:make_date_link()
|
|
||||||
endif
|
|
||||||
call vimwiki#base#open_link(':e ', link, s:diary_index())
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! vimwiki#diary#goto_index(index) "{{{
|
|
||||||
call vimwiki#base#select(a:index)
|
|
||||||
call vimwiki#base#edit_file(':e', s:diary_index())
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" Calendar.vim callback function.
|
|
||||||
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
|
|
||||||
|
|
||||||
" Create diary note for a selected date in default wiki.
|
|
||||||
call vimwiki#diary#make_note(1, link)
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" Calendar.vim sign function.
|
|
||||||
function vimwiki#diary#calendar_sign(day, month, year) "{{{
|
|
||||||
let day = s:prefix_zero(a:day)
|
|
||||||
let month = s:prefix_zero(a:month)
|
|
||||||
let sfile = VimwikiGet('path').VimwikiGet('diary_rel_path').
|
|
||||||
\ a:year.'-'.month.'-'.day.VimwikiGet('ext')
|
|
||||||
return filereadable(expand(sfile))
|
|
||||||
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 = VimwikiGet('diary_rel_path').links[idx+1]
|
|
||||||
else
|
|
||||||
" goto today
|
|
||||||
let link = VimwikiGet('diary_rel_path').s: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 = VimwikiGet('diary_rel_path').links[idx-1]
|
|
||||||
else
|
|
||||||
" goto today
|
|
||||||
let link = VimwikiGet('diary_rel_path').s:diary_date_link()
|
|
||||||
endif
|
|
||||||
|
|
||||||
if len(link)
|
|
||||||
call vimwiki#base#open_link(':e ', link)
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
@@ -1,39 +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;}
|
|
||||||
/* classes for items of todo lists */
|
|
||||||
.done0:before {content: "\2592\2592\2592\2592"; color: SkyBlue;}
|
|
||||||
.done1:before {content: "\2588\2592\2592\2592"; color: SkyBlue;}
|
|
||||||
.done2:before {content: "\2588\2588\2592\2592"; color: SkyBlue;}
|
|
||||||
.done3:before {content: "\2588\2588\2588\2592"; color: SkyBlue;}
|
|
||||||
.done4:before {content: "\2588\2588\2588\2588"; color: SkyBlue;}
|
|
||||||
/* comment the next four or five lines out *
|
|
||||||
* if you do not want color-coded todo lists */
|
|
||||||
.done0 {color: #c00000;}
|
|
||||||
.done1 {color: #c08000;}
|
|
||||||
.done2 {color: #80a000;}
|
|
||||||
.done3 {color: #00c000;}
|
|
||||||
.done4 {color: #7f7f7f; text-decoration: line-through;}
|
|
||||||
@@ -1,445 +0,0 @@
|
|||||||
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
|
||||||
" Vimwiki plugin file
|
|
||||||
" Author: Maxim Kim <habamax@gmail.com>
|
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
|
||||||
" GetLatestVimScripts: 2226 1 :AutoInstall: vimwiki
|
|
||||||
|
|
||||||
if exists("loaded_vimwiki") || &cp
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let loaded_vimwiki = 1
|
|
||||||
|
|
||||||
let s:old_cpo = &cpo
|
|
||||||
set cpo&vim
|
|
||||||
|
|
||||||
" HELPER functions {{{
|
|
||||||
function! s:default(varname, value) "{{{
|
|
||||||
if !exists('g:vimwiki_'.a:varname)
|
|
||||||
let g:vimwiki_{a:varname} = a:value
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" return longest common path prefix of 2 given paths.
|
|
||||||
" '~/home/usrname/wiki', '~/home/usrname/wiki/shmiki' => '~/home/usrname/wiki'
|
|
||||||
function! s: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) && (p1[idx] ==? p2[idx])
|
|
||||||
let idx = idx + 1
|
|
||||||
endwhile
|
|
||||||
if idx == 0
|
|
||||||
return ''
|
|
||||||
else
|
|
||||||
return join(p1[: idx-1], '/')
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:find_wiki(path) "{{{
|
|
||||||
let idx = 0
|
|
||||||
while idx < len(g:vimwiki_list)
|
|
||||||
let path = vimwiki#base#chomp_slash(expand(VimwikiGet('path', idx)))
|
|
||||||
let path = vimwiki#base#path_norm(path)
|
|
||||||
if s:path_common_pfx(path, a:path) == path
|
|
||||||
return idx
|
|
||||||
endif
|
|
||||||
let idx += 1
|
|
||||||
endwhile
|
|
||||||
return -1
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:setup_buffer_leave()"{{{
|
|
||||||
if &filetype == 'vimwiki' && !exists("b:vimwiki_idx")
|
|
||||||
let b:vimwiki_idx = g:vimwiki_current_idx
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Set up menu
|
|
||||||
if g:vimwiki_menu != ""
|
|
||||||
exe 'nmenu disable '.g:vimwiki_menu.'.Table'
|
|
||||||
endif
|
|
||||||
endfunction"}}}
|
|
||||||
|
|
||||||
function! s:setup_filetype() "{{{
|
|
||||||
" Find what wiki current buffer belongs to.
|
|
||||||
let path = expand('%:p:h')
|
|
||||||
let ext = '.'.expand('%:e')
|
|
||||||
let idx = s:find_wiki(path)
|
|
||||||
|
|
||||||
if idx == -1 && g:vimwiki_global_ext == 0
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
set filetype=vimwiki
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:setup_buffer_enter() "{{{
|
|
||||||
if exists("b:vimwiki_idx")
|
|
||||||
let g:vimwiki_current_idx = b:vimwiki_idx
|
|
||||||
else
|
|
||||||
" Find what wiki current buffer belongs to.
|
|
||||||
" If wiki does not exist in g:vimwiki_list -- add new wiki there with
|
|
||||||
" buffer's path and ext.
|
|
||||||
" Else set g:vimwiki_current_idx to that wiki index.
|
|
||||||
let path = expand('%:p:h')
|
|
||||||
let ext = '.'.expand('%:e')
|
|
||||||
let idx = s:find_wiki(path)
|
|
||||||
|
|
||||||
" The buffer's file is not in the path and user do not want his wiki
|
|
||||||
" extension to be global -- do not add new wiki.
|
|
||||||
if idx == -1 && g:vimwiki_global_ext == 0
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
if idx == -1
|
|
||||||
call add(g:vimwiki_list, {'path': path, 'ext': ext, 'temp': 1})
|
|
||||||
let g:vimwiki_current_idx = len(g:vimwiki_list) - 1
|
|
||||||
else
|
|
||||||
let g:vimwiki_current_idx = idx
|
|
||||||
endif
|
|
||||||
|
|
||||||
let b:vimwiki_idx = g:vimwiki_current_idx
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If you have
|
|
||||||
" au GUIEnter * VimwikiIndex
|
|
||||||
" Then change it to
|
|
||||||
" au GUIEnter * nested VimwikiIndex
|
|
||||||
if &filetype == ''
|
|
||||||
set filetype=vimwiki
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Update existed/non-existed links highlighting.
|
|
||||||
call vimwiki#base#highlight_links()
|
|
||||||
|
|
||||||
" 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.
|
|
||||||
if g:vimwiki_folding == 1 && &fdm != 'expr'
|
|
||||||
setlocal fdm=expr
|
|
||||||
setlocal foldexpr=VimwikiFoldLevel(v:lnum)
|
|
||||||
setlocal foldtext=VimwikiFoldText()
|
|
||||||
endif
|
|
||||||
|
|
||||||
" And conceal level too.
|
|
||||||
if g:vimwiki_conceallevel && exists("+conceallevel")
|
|
||||||
let &conceallevel = g:vimwiki_conceallevel
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Set up menu
|
|
||||||
if g:vimwiki_menu != ""
|
|
||||||
exe 'nmenu enable '.g:vimwiki_menu.'.Table'
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" OPTION get/set functions {{{
|
|
||||||
" return value of option for current wiki or if second parameter exists for
|
|
||||||
" wiki with a given index.
|
|
||||||
function! VimwikiGet(option, ...) "{{{
|
|
||||||
if a:0 == 0
|
|
||||||
let idx = g:vimwiki_current_idx
|
|
||||||
else
|
|
||||||
let idx = a:1
|
|
||||||
endif
|
|
||||||
if !has_key(g:vimwiki_list[idx], a:option) &&
|
|
||||||
\ has_key(s:vimwiki_defaults, a:option)
|
|
||||||
if a:option == 'path_html'
|
|
||||||
let g:vimwiki_list[idx][a:option] =
|
|
||||||
\VimwikiGet('path', idx)[:-2].'_html/'
|
|
||||||
else
|
|
||||||
let g:vimwiki_list[idx][a:option] =
|
|
||||||
\s:vimwiki_defaults[a:option]
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" if path's ending is not a / or \
|
|
||||||
" then add it
|
|
||||||
if a:option == 'path' || a:option == 'path_html'
|
|
||||||
let p = g:vimwiki_list[idx][a:option]
|
|
||||||
" resolve doesn't work quite right with symlinks ended with / or \
|
|
||||||
let p = substitute(p, '[/\\]\+$', '', '')
|
|
||||||
let p = resolve(expand(p))
|
|
||||||
let g:vimwiki_list[idx][a:option] = p.'/'
|
|
||||||
endif
|
|
||||||
|
|
||||||
return g:vimwiki_list[idx][a:option]
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" set option for current wiki or if third parameter exists for
|
|
||||||
" wiki with a given index.
|
|
||||||
function! VimwikiSet(option, value, ...) "{{{
|
|
||||||
if a:0 == 0
|
|
||||||
let idx = g:vimwiki_current_idx
|
|
||||||
else
|
|
||||||
let idx = a:1
|
|
||||||
endif
|
|
||||||
let g:vimwiki_list[idx][a:option] = a:value
|
|
||||||
endfunction "}}}
|
|
||||||
" }}}
|
|
||||||
|
|
||||||
" }}}
|
|
||||||
|
|
||||||
" CALLBACK function "{{{
|
|
||||||
" User can redefine it.
|
|
||||||
if !exists("*VimwikiWeblinkHandler") "{{{
|
|
||||||
function VimwikiWeblinkHandler(weblink)
|
|
||||||
for browser in g:vimwiki_browsers
|
|
||||||
if executable(browser)
|
|
||||||
if has("win32")
|
|
||||||
execute '!start "'.browser.'" "' . a:weblink . '"'
|
|
||||||
else
|
|
||||||
execute '!'.browser.' "' . a:weblink . '"'
|
|
||||||
endif
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
endfunction
|
|
||||||
endif "}}}
|
|
||||||
" CALLBACK }}}
|
|
||||||
|
|
||||||
" DEFAULT wiki {{{
|
|
||||||
let s:vimwiki_defaults = {}
|
|
||||||
let s:vimwiki_defaults.path = '~/vimwiki/'
|
|
||||||
let s:vimwiki_defaults.path_html = '~/vimwiki_html/'
|
|
||||||
let s:vimwiki_defaults.css_name = 'style.css'
|
|
||||||
let s:vimwiki_defaults.index = 'index'
|
|
||||||
let s:vimwiki_defaults.ext = '.wiki'
|
|
||||||
let s:vimwiki_defaults.maxhi = 1
|
|
||||||
let s:vimwiki_defaults.syntax = 'default'
|
|
||||||
|
|
||||||
let s:vimwiki_defaults.template_path = '~/vimwiki/templates/'
|
|
||||||
let s:vimwiki_defaults.template_default = 'default'
|
|
||||||
let s:vimwiki_defaults.template_ext = '.html'
|
|
||||||
|
|
||||||
let s:vimwiki_defaults.nested_syntaxes = {}
|
|
||||||
let s:vimwiki_defaults.auto_export = 0
|
|
||||||
" is wiki temporary -- was added to g:vimwiki_list by opening arbitrary wiki
|
|
||||||
" file.
|
|
||||||
let s:vimwiki_defaults.temp = 0
|
|
||||||
|
|
||||||
" diary
|
|
||||||
let s:vimwiki_defaults.diary_rel_path = 'diary/'
|
|
||||||
let s:vimwiki_defaults.diary_index = 'diary'
|
|
||||||
let s:vimwiki_defaults.diary_header = 'Diary'
|
|
||||||
|
|
||||||
" Do not change this! Will wait till vim become more datetime awareable.
|
|
||||||
let s:vimwiki_defaults.diary_link_fmt = '%Y-%m-%d'
|
|
||||||
|
|
||||||
let s:vimwiki_defaults.diary_link_count = 4
|
|
||||||
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
" DEFAULT options {{{
|
|
||||||
call s:default('list', [s:vimwiki_defaults])
|
|
||||||
if &encoding == 'utf-8'
|
|
||||||
call s:default('upper', 'A-Z\u0410-\u042f')
|
|
||||||
call s:default('lower', 'a-z\u0430-\u044f')
|
|
||||||
else
|
|
||||||
call s:default('upper', 'A-Z')
|
|
||||||
call s:default('lower', 'a-z')
|
|
||||||
endif
|
|
||||||
call s:default('other', '0-9')
|
|
||||||
call s:default('stripsym', '_')
|
|
||||||
call s:default('badsyms', '')
|
|
||||||
call s:default('auto_checkbox', 1)
|
|
||||||
call s:default('use_mouse', 0)
|
|
||||||
call s:default('folding', 0)
|
|
||||||
call s:default('fold_trailing_empty_lines', 0)
|
|
||||||
call s:default('fold_lists', 0)
|
|
||||||
call s:default('menu', 'Vimwiki')
|
|
||||||
call s:default('global_ext', 1)
|
|
||||||
call s:default('hl_headers', 0)
|
|
||||||
call s:default('hl_cb_checked', 0)
|
|
||||||
call s:default('camel_case', 1)
|
|
||||||
call s:default('list_ignore_newline', 1)
|
|
||||||
call s:default('listsyms', ' .oOX')
|
|
||||||
if has("win32")
|
|
||||||
call s:default('browsers',
|
|
||||||
\ [
|
|
||||||
\ expand('~').'\Local Settings\Application Data\Google\Chrome\Application\chrome.exe',
|
|
||||||
\ 'C:\Program Files\Opera\opera.exe',
|
|
||||||
\ 'C:\Program Files\Mozilla Firefox\firefox.exe',
|
|
||||||
\ 'C:\Program Files\Internet Explorer\iexplore.exe',
|
|
||||||
\ ])
|
|
||||||
else
|
|
||||||
call s:default('browsers',
|
|
||||||
\ [
|
|
||||||
\ 'chromium-browser',
|
|
||||||
\ 'opera',
|
|
||||||
\ 'firefox',
|
|
||||||
\ 'konqueror',
|
|
||||||
\ ])
|
|
||||||
endif
|
|
||||||
|
|
||||||
call s:default('use_calendar', 1)
|
|
||||||
call s:default('table_auto_fmt', 1)
|
|
||||||
call s:default('w32_dir_enc', '')
|
|
||||||
call s:default('CJK_length', 0)
|
|
||||||
call s:default('dir_link', '')
|
|
||||||
call s:default('file_exts', 'pdf,txt,doc,rtf,xls,php,zip,rar,7z,html,gz')
|
|
||||||
call s:default('valid_html_tags', 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em')
|
|
||||||
call s:default('user_htmls', '')
|
|
||||||
|
|
||||||
call s:default('html_header_numbering', 0)
|
|
||||||
call s:default('html_header_numbering_sym', '')
|
|
||||||
call s:default('conceallevel', 3)
|
|
||||||
|
|
||||||
call s:default('current_idx', 0)
|
|
||||||
|
|
||||||
let upp = g:vimwiki_upper
|
|
||||||
let low = g:vimwiki_lower
|
|
||||||
let oth = g:vimwiki_other
|
|
||||||
let nup = low.oth
|
|
||||||
let nlo = upp.oth
|
|
||||||
let any = upp.nup
|
|
||||||
|
|
||||||
let wword = '\C\<['.upp.']['.nlo.']*['.low.']['.nup.']*['.upp.']['.any.']*\>'
|
|
||||||
let g:vimwiki_rxWikiWord = '!\@<!'.wword
|
|
||||||
let g:vimwiki_rxNoWikiWord = '!'.wword
|
|
||||||
|
|
||||||
let g:vimwiki_rxWikiLink1 = '\[\[[^\]]\+\]\]'
|
|
||||||
let g:vimwiki_rxWikiLink2 = '\[\[[^\]]\+\]\[[^\]]\+\]\]'
|
|
||||||
if g:vimwiki_camel_case
|
|
||||||
let g:vimwiki_rxWikiLink = g:vimwiki_rxWikiWord.'\|'.
|
|
||||||
\ g:vimwiki_rxWikiLink1.'\|'.g:vimwiki_rxWikiLink2
|
|
||||||
else
|
|
||||||
let g:vimwiki_rxWikiLink = g:vimwiki_rxWikiLink1.'\|'.g:vimwiki_rxWikiLink2
|
|
||||||
endif
|
|
||||||
let g:vimwiki_rxWeblink = '\%("[^"(]\+\((\([^)]\+\))\)\?":\)\?'.
|
|
||||||
\'\%('.
|
|
||||||
\'\%('.
|
|
||||||
\'\%(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):'.
|
|
||||||
\'\%(\%(//\)\|\%(\\\\\)\)'.
|
|
||||||
\'\)'.
|
|
||||||
\'\|\%(mailto:\)'.
|
|
||||||
\'\)'.
|
|
||||||
\'\+\S\+'.
|
|
||||||
\'[().,?\]]\@<!'
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
" AUTOCOMMANDS for all known wiki extensions {{{
|
|
||||||
" Getting all extensions that different wikies could have
|
|
||||||
let extensions = {}
|
|
||||||
for wiki in g:vimwiki_list
|
|
||||||
if has_key(wiki, 'ext')
|
|
||||||
let extensions[wiki.ext] = 1
|
|
||||||
else
|
|
||||||
let extensions['.wiki'] = 1
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
augroup filetypedetect
|
|
||||||
" clear FlexWiki's stuff
|
|
||||||
au! * *.wiki
|
|
||||||
augroup end
|
|
||||||
|
|
||||||
augroup vimwiki
|
|
||||||
autocmd!
|
|
||||||
for ext in keys(extensions)
|
|
||||||
exe 'autocmd BufWinEnter *'.ext.' call s:setup_buffer_enter()'
|
|
||||||
exe 'autocmd BufLeave,BufHidden *'.ext.' call s:setup_buffer_leave()'
|
|
||||||
exe 'autocmd BufNewFile,BufRead, *'.ext.' call s:setup_filetype()'
|
|
||||||
|
|
||||||
" ColorScheme could have or could have not a
|
|
||||||
" VimwikiHeader1..VimwikiHeader6 highlight groups. We need to refresh
|
|
||||||
" syntax after colorscheme change.
|
|
||||||
exe 'autocmd ColorScheme *'.ext.' syntax enable'.
|
|
||||||
\ ' | call vimwiki#base#highlight_links()'
|
|
||||||
|
|
||||||
" Format tables when exit from insert mode. Do not use textwidth to
|
|
||||||
" autowrap tables.
|
|
||||||
if g:vimwiki_table_auto_fmt
|
|
||||||
exe 'autocmd InsertLeave *'.ext.' call vimwiki#tbl#format(line("."))'
|
|
||||||
exe 'autocmd InsertEnter *'.ext.' call vimwiki#tbl#reset_tw(line("."))'
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
augroup END
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
" COMMANDS {{{
|
|
||||||
command! VimwikiUISelect call vimwiki#base#ui_select()
|
|
||||||
command! -count VimwikiIndex
|
|
||||||
\ call vimwiki#base#goto_index(v:count1)
|
|
||||||
command! -count VimwikiTabIndex tabedit <bar>
|
|
||||||
\ call vimwiki#base#goto_index(v:count1)
|
|
||||||
|
|
||||||
command! -count VimwikiDiaryIndex
|
|
||||||
\ call vimwiki#diary#goto_index(v:count1)
|
|
||||||
command! -count VimwikiMakeDiaryNote
|
|
||||||
\ call vimwiki#diary#make_note(v:count1)
|
|
||||||
command! -count VimwikiTabMakeDiaryNote tabedit <bar>
|
|
||||||
\ call vimwiki#diary#make_note(v:count1)
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
" MAPPINGS {{{
|
|
||||||
if !hasmapto('<Plug>VimwikiIndex')
|
|
||||||
nmap <silent><unique> <Leader>ww <Plug>VimwikiIndex
|
|
||||||
endif
|
|
||||||
nnoremap <unique><script> <Plug>VimwikiIndex :VimwikiIndex<CR>
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiTabIndex')
|
|
||||||
nmap <silent><unique> <Leader>wt <Plug>VimwikiTabIndex
|
|
||||||
endif
|
|
||||||
nnoremap <unique><script> <Plug>VimwikiTabIndex :VimwikiTabIndex<CR>
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiUISelect')
|
|
||||||
nmap <silent><unique> <Leader>ws <Plug>VimwikiUISelect
|
|
||||||
endif
|
|
||||||
nnoremap <unique><script> <Plug>VimwikiUISelect :VimwikiUISelect<CR>
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiDiaryIndex')
|
|
||||||
nmap <silent><unique> <Leader>wi <Plug>VimwikiDiaryIndex
|
|
||||||
endif
|
|
||||||
nnoremap <unique><script> <Plug>VimwikiDiaryIndex :VimwikiDiaryIndex<CR>
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiMakeDiaryNote')
|
|
||||||
nmap <silent><unique> <Leader>w<Leader>w <Plug>VimwikiMakeDiaryNote
|
|
||||||
endif
|
|
||||||
nnoremap <unique><script> <Plug>VimwikiMakeDiaryNote :VimwikiMakeDiaryNote<CR>
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>VimwikiTabMakeDiaryNote')
|
|
||||||
nmap <silent><unique> <Leader>w<Leader>t <Plug>VimwikiTabMakeDiaryNote
|
|
||||||
endif
|
|
||||||
nnoremap <unique><script> <Plug>VimwikiTabMakeDiaryNote
|
|
||||||
\ :VimwikiTabMakeDiaryNote<CR>
|
|
||||||
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
" MENU {{{
|
|
||||||
function! s:build_menu(topmenu)
|
|
||||||
let idx = 0
|
|
||||||
while idx < len(g:vimwiki_list)
|
|
||||||
let norm_path = fnamemodify(VimwikiGet('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>'
|
|
||||||
let idx += 1
|
|
||||||
endwhile
|
|
||||||
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(g:vimwiki_menu)
|
|
||||||
call s:build_menu(g:vimwiki_menu)
|
|
||||||
call s:build_table_menu(g:vimwiki_menu)
|
|
||||||
endif
|
|
||||||
" }}}
|
|
||||||
|
|
||||||
" CALENDAR Hook "{{{
|
|
||||||
if g:vimwiki_use_calendar
|
|
||||||
let g:calendar_action = 'vimwiki#diary#calendar_action'
|
|
||||||
let g:calendar_sign = 'vimwiki#diary#calendar_sign'
|
|
||||||
endif
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
let &cpo = s:old_cpo
|
|
||||||
@@ -1,261 +0,0 @@
|
|||||||
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
|
||||||
" Vimwiki syntax file
|
|
||||||
" Author: Maxim Kim <habamax@gmail.com>
|
|
||||||
" Home: http://code.google.com/p/vimwiki/
|
|
||||||
|
|
||||||
" Quit if syntax file is already loaded
|
|
||||||
if version < 600
|
|
||||||
syntax clear
|
|
||||||
elseif exists("b:current_syntax")
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Links highlighting is controlled by vimwiki#base#highlight_links() function.
|
|
||||||
" It is called from setup_buffer_enter() function in the BufEnter autocommand.
|
|
||||||
|
|
||||||
" Load concrete Wiki syntax
|
|
||||||
execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'.vim'
|
|
||||||
|
|
||||||
" Concealed chars
|
|
||||||
if exists("+conceallevel")
|
|
||||||
syntax conceal on
|
|
||||||
endif
|
|
||||||
|
|
||||||
syntax spell toplevel
|
|
||||||
|
|
||||||
syn match VimwikiLinkChar contained /\[\[/
|
|
||||||
syn match VimwikiLinkChar contained /\]\]/
|
|
||||||
syn match VimwikiLinkChar contained /\[\[[^\[\]\|]\{-}|\ze.\{-}]]/
|
|
||||||
syn match VimwikiLinkChar contained /\[\[[^\[\]\|]\{-}]\[\ze.\{-}]]/
|
|
||||||
|
|
||||||
syn match VimwikiNoLinkChar contained /\[\[/
|
|
||||||
syn match VimwikiNoLinkChar contained /\]\]/
|
|
||||||
syn match VimwikiNoLinkChar contained /\[\[[^\[\]\|]\{-}|\ze.*]]/
|
|
||||||
syn match VimwikiNoLinkChar contained /\[\[[^\[\]\|]\{-}]\[\ze.*]]/
|
|
||||||
|
|
||||||
execute 'syn match VimwikiBoldChar contained /'.g:vimwiki_char_bold.'/'
|
|
||||||
execute 'syn match VimwikiItalicChar contained /'.g:vimwiki_char_italic.'/'
|
|
||||||
execute 'syn match VimwikiBoldItalicChar contained /'.g:vimwiki_char_bolditalic.'/'
|
|
||||||
execute 'syn match VimwikiItalicBoldChar contained /'.g:vimwiki_char_italicbold.'/'
|
|
||||||
execute 'syn match VimwikiCodeChar contained /'.g:vimwiki_char_code.'/'
|
|
||||||
execute 'syn match VimwikiDelTextChar contained /'.g:vimwiki_char_deltext.'/'
|
|
||||||
execute 'syn match VimwikiSuperScript contained /'.g:vimwiki_char_superscript.'/'
|
|
||||||
execute 'syn match VimwikiSubScript contained /'.g:vimwiki_char_subscript.'/'
|
|
||||||
if exists("+conceallevel")
|
|
||||||
syntax conceal off
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Non concealed chars
|
|
||||||
syn match VimwikiHeaderChar contained /\%(^\s*=\+\)\|\%(=\+\s*$\)/
|
|
||||||
execute 'syn match VimwikiBoldCharT contained /'.g:vimwiki_char_bold.'/'
|
|
||||||
execute 'syn match VimwikiItalicCharT contained /'.g:vimwiki_char_italic.'/'
|
|
||||||
execute 'syn match VimwikiBoldItalicCharT contained /'.g:vimwiki_char_bolditalic.'/'
|
|
||||||
execute 'syn match VimwikiItalicBoldCharT contained /'.g:vimwiki_char_italicbold.'/'
|
|
||||||
execute 'syn match VimwikiCodeCharT contained /'.g:vimwiki_char_code.'/'
|
|
||||||
execute 'syn match VimwikiDelTextCharT contained /'.g:vimwiki_char_deltext.'/'
|
|
||||||
execute 'syn match VimwikiSuperScriptT contained /'.g:vimwiki_char_superscript.'/'
|
|
||||||
execute 'syn match VimwikiSubScriptT contained /'.g:vimwiki_char_subscript.'/'
|
|
||||||
|
|
||||||
|
|
||||||
" Emoticons
|
|
||||||
syntax match VimwikiEmoticons /\%((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/
|
|
||||||
|
|
||||||
let g:vimwiki_rxTodo = '\C\%(TODO:\|DONE:\|STARTED:\|FIXME:\|FIXED:\|XXX:\)'
|
|
||||||
execute 'syntax match VimwikiTodo /'. g:vimwiki_rxTodo .'/'
|
|
||||||
|
|
||||||
|
|
||||||
" Tables
|
|
||||||
syntax match VimwikiTableRow /^\s*|.\+|\s*$/
|
|
||||||
\ transparent contains=VimwikiCellSeparator,VimwikiLinkT,
|
|
||||||
\ VimwikiNoExistsLinkT,VimwikiEmoticons,VimwikiTodo,
|
|
||||||
\ VimwikiBoldT,VimwikiItalicT,VimwikiBoldItalicT,VimwikiItalicBoldT,
|
|
||||||
\ VimwikiDelTextT,VimwikiSuperScriptT,VimwikiSubScriptT,VimwikiCodeT,
|
|
||||||
\ @Spell
|
|
||||||
syntax match VimwikiCellSeparator
|
|
||||||
\ /\%(|\)\|\%(-\@<=+\-\@=\)\|\%([|+]\@<=-\+\)/ contained
|
|
||||||
|
|
||||||
" List items
|
|
||||||
execute 'syntax match VimwikiList /'.g:vimwiki_rxListBullet.'/'
|
|
||||||
execute 'syntax match VimwikiList /'.g:vimwiki_rxListNumber.'/'
|
|
||||||
execute 'syntax match VimwikiList /'.g:vimwiki_rxListDefine.'/'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiBold /'.g:vimwiki_rxBold.'/ contains=VimwikiBoldChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiBoldT /'.g:vimwiki_rxBold.'/ contained contains=VimwikiBoldCharT,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiItalic /'.g:vimwiki_rxItalic.'/ contains=VimwikiItalicChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiItalicT /'.g:vimwiki_rxItalic.'/ contained contains=VimwikiItalicCharT,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiBoldItalic /'.g:vimwiki_rxBoldItalic.'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiBoldItalicT /'.g:vimwiki_rxBoldItalic.'/ contained contains=VimwikiBoldItalicChatT,VimwikiItalicBoldCharT,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiItalicBold /'.g:vimwiki_rxItalicBold.'/ contains=VimwikiBoldItalicChar,VimwikiItalicBoldChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiItalicBoldT /'.g:vimwiki_rxItalicBold.'/ contained contains=VimwikiBoldItalicCharT,VimsikiItalicBoldCharT,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiDelText /'.g:vimwiki_rxDelText.'/ contains=VimwikiDelTextChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiDelTextT /'.g:vimwiki_rxDelText.'/ contained contains=VimwikiDelTextChar,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiSuperScript /'.g:vimwiki_rxSuperScript.'/ contains=VimwikiSuperScriptChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiSuperScriptT /'.g:vimwiki_rxSuperScript.'/ contained contains=VimwikiSuperScriptCharT,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiSubScript /'.g:vimwiki_rxSubScript.'/ contains=VimwikiSubScriptChar,@Spell'
|
|
||||||
execute 'syntax match VimwikiSubScriptT /'.g:vimwiki_rxSubScript.'/ contained contains=VimwikiSubScriptCharT,@Spell'
|
|
||||||
|
|
||||||
execute 'syntax match VimwikiCode /'.g:vimwiki_rxCode.'/ contains=VimwikiCodeChar'
|
|
||||||
execute 'syntax match VimwikiCodeT /'.g:vimwiki_rxCode.'/ contained contains=VimwikiCodeCharT'
|
|
||||||
|
|
||||||
|
|
||||||
" <hr> horizontal rule
|
|
||||||
execute 'syntax match VimwikiHR /'.g:vimwiki_rxHR.'/'
|
|
||||||
|
|
||||||
execute 'syntax region VimwikiPre start=/^\s*'.g:vimwiki_rxPreStart.
|
|
||||||
\ '/ end=/^\s*'.g:vimwiki_rxPreEnd.'\s*$/ contains=@Spell'
|
|
||||||
|
|
||||||
" List item checkbox
|
|
||||||
syntax match VimwikiCheckBox /\[.\?\]/
|
|
||||||
if g:vimwiki_hl_cb_checked
|
|
||||||
execute 'syntax match VimwikiCheckBoxDone /'.
|
|
||||||
\ g:vimwiki_rxListBullet.'\s*\['.g:vimwiki_listsyms[4].'\].*$/'.
|
|
||||||
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
|
||||||
execute 'syntax match VimwikiCheckBoxDone /'.
|
|
||||||
\ g:vimwiki_rxListNumber.'\s*\['.g:vimwiki_listsyms[4].'\].*$/'.
|
|
||||||
\ ' contains=VimwikiNoExistsLink,VimwikiLink'
|
|
||||||
endif
|
|
||||||
|
|
||||||
" placeholders
|
|
||||||
syntax match VimwikiPlaceholder /^\s*%toc\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
|
||||||
syntax match VimwikiPlaceholder /^\s*%nohtml\s*$/
|
|
||||||
syntax match VimwikiPlaceholder /^\s*%title\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
|
||||||
syntax match VimwikiPlaceholder /^\s*%template\%(\s.*\)\?$/ contains=VimwikiPlaceholderParam
|
|
||||||
syntax match VimwikiPlaceholderParam /\s.*/ contained
|
|
||||||
|
|
||||||
" html tags
|
|
||||||
let html_tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|')
|
|
||||||
exe 'syntax match VimwikiHTMLtag #\c</\?\%('.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 /'.g:vimwiki_rxComment.'/ contains=@Spell'
|
|
||||||
|
|
||||||
" Header levels, 1-6
|
|
||||||
execute 'syntax match VimwikiHeader1 /'.g:vimwiki_rxH1.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader2 /'.g:vimwiki_rxH2.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader3 /'.g:vimwiki_rxH3.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader4 /'.g:vimwiki_rxH4.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader5 /'.g:vimwiki_rxH5.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
execute 'syntax match VimwikiHeader6 /'.g:vimwiki_rxH6.'/ contains=VimwikiTodo,VimwikiHeaderChar,VimwikiNoExistsLink,VimwikiLink,@Spell'
|
|
||||||
|
|
||||||
" group names "{{{
|
|
||||||
|
|
||||||
if g:vimwiki_hl_headers == 0
|
|
||||||
hi link VimwikiHeader1 Title
|
|
||||||
hi link VimwikiHeader2 Title
|
|
||||||
hi link VimwikiHeader3 Title
|
|
||||||
hi link VimwikiHeader4 Title
|
|
||||||
hi link VimwikiHeader5 Title
|
|
||||||
hi link VimwikiHeader6 Title
|
|
||||||
else
|
|
||||||
if &background == 'light'
|
|
||||||
hi def VimwikiHeader1 guibg=bg guifg=#aa5858 gui=bold ctermfg=DarkRed term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader2 guibg=bg guifg=#507030 gui=bold ctermfg=DarkGreen term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader3 guibg=bg guifg=#1030a0 gui=bold ctermfg=DarkBlue term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader4 guibg=bg guifg=#103040 gui=bold ctermfg=Black term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader5 guibg=bg guifg=#505050 gui=bold ctermfg=Black term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader6 guibg=bg guifg=#636363 gui=bold ctermfg=Black term=bold cterm=bold
|
|
||||||
else
|
|
||||||
hi def VimwikiHeader1 guibg=bg guifg=#e08090 gui=bold ctermfg=Red term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader2 guibg=bg guifg=#80e090 gui=bold ctermfg=Green term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader3 guibg=bg guifg=#6090e0 gui=bold ctermfg=Blue term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader4 guibg=bg guifg=#c0c0f0 gui=bold ctermfg=White term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader5 guibg=bg guifg=#e0e0f0 gui=bold ctermfg=White term=bold cterm=bold
|
|
||||||
hi def VimwikiHeader6 guibg=bg guifg=#f0f0f0 gui=bold ctermfg=White term=bold cterm=bold
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
hi def link VimwikiMarkers Normal
|
|
||||||
|
|
||||||
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 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 VimwikiCheckBox VimwikiList
|
|
||||||
hi def link VimwikiCheckBoxDone Comment
|
|
||||||
hi def link VimwikiEmoticons Character
|
|
||||||
|
|
||||||
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 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 VimwikiLinkChar VimwikiLink
|
|
||||||
hi def link VimwikiNoLinkChar VimwikiNoExistsLink
|
|
||||||
|
|
||||||
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 VimwikiNoLinkCharT VimwikiNoExistsLinkT
|
|
||||||
"}}}
|
|
||||||
|
|
||||||
let b:current_syntax="vimwiki"
|
|
||||||
|
|
||||||
" EMBEDDED syntax setup "{{{
|
|
||||||
let nested = VimwikiGet('nested_syntaxes')
|
|
||||||
if !empty(nested)
|
|
||||||
for [hl_syntax, vim_syntax] in items(nested)
|
|
||||||
call vimwiki#base#nested_syntax(vim_syntax,
|
|
||||||
\ '^\s*{{{\%(.*[[:blank:][:punct:]]\)\?'.
|
|
||||||
\ hl_syntax.'\%([[:blank:][:punct:]].*\)\?',
|
|
||||||
\ '^\s*}}}', 'VimwikiPre')
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
"}}}
|
|
||||||
243
syntax/kickass.vim
Normal file
243
syntax/kickass.vim
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: Assembler, KickAssembler
|
||||||
|
" Maintainer: Roman 'gryf' Dobosz <gryf_esm@o2.pl>
|
||||||
|
" Last Change: 2012-06-03
|
||||||
|
" Version: 0.1
|
||||||
|
"
|
||||||
|
" To install this file place it in ~/.vim/syntax (*nix/Mac) or in
|
||||||
|
" $VIMRUNTIME/syntax on Windows and issue command:
|
||||||
|
"
|
||||||
|
" :set filetype=kickass
|
||||||
|
"
|
||||||
|
" You can also add to your vimrc file autocommand:
|
||||||
|
"
|
||||||
|
" autocmd BufRead *.asm set filetype=kickass
|
||||||
|
"
|
||||||
|
" From now on, all files with extension 'asm' will have brand new kickass
|
||||||
|
" syntax.
|
||||||
|
"
|
||||||
|
" Enjoy.
|
||||||
|
|
||||||
|
syn clear
|
||||||
|
syn case ignore
|
||||||
|
|
||||||
|
syn region asmString start=+"+ end=+"+
|
||||||
|
syn region asmSString start=+'+ end=+'+ contains=@Spell
|
||||||
|
|
||||||
|
syn keyword asm6502Mnemonics adc and asl bit brk clc cld cli clv cmp cpx cpy
|
||||||
|
syn keyword asm6502Mnemonics dec dex dey eor inc inx iny lda ldx ldy lsr nop
|
||||||
|
syn keyword asm6502Mnemonics ora pha php pla plp rol ror sbc sec sed sei sta
|
||||||
|
syn keyword asm6502Mnemonics stx sty tax tay tsx txa txs tya
|
||||||
|
|
||||||
|
syn keyword asmDtvMnemonics bra sac sir
|
||||||
|
|
||||||
|
syn match asm6502Index ",\s*[xy]" contains=asm6502Mnemonics,asmDtvMnemonics
|
||||||
|
|
||||||
|
syn keyword asm6502Jumps bcc bcs beq bmi bne bpl bvc bvs jmp jsr rti rts
|
||||||
|
|
||||||
|
syn keyword asm6510Illegal slo rla sre rra sax lax dcp isc anc asr arr sbx
|
||||||
|
syn keyword asm6510Illegal dop top jam
|
||||||
|
|
||||||
|
syn match asmMacroCall ":[a-z_][a-z0-9_]*"
|
||||||
|
|
||||||
|
syn region asmString start=+"+ skip=+\\"+ end=+"+ contains=@Spell
|
||||||
|
syn region asmSString start=+'+ skip=+\\'+ end=+'+ contains=@Spell
|
||||||
|
|
||||||
|
"syn match asmLabel "[\^\s]\!\?\<[a-z0-9_]*\>[:+-]\?[\s$]" kurwa!!!!!!!!
|
||||||
|
syn match asmLabel "^\!\?\<[a-z0-9_]*\>:"
|
||||||
|
"syn match line "asmLabel2
|
||||||
|
|
||||||
|
syn keyword asmTodo TODO FIXME XXX TBD NOTE WARNING BUG
|
||||||
|
syn match asmLineComment "\/\/.*" contains=@Spell,asmTodo
|
||||||
|
syn region asmComment start="/\*" end="\*/" contains=@Spell,asmTodo
|
||||||
|
|
||||||
|
syn match decNumber "\<\d\+\>"
|
||||||
|
syn match hexNumber "\$\x\+\>"
|
||||||
|
syn match binNumber "%[01]\+\>"
|
||||||
|
syn match asmImmediate "#\$\x\+\>"
|
||||||
|
syn match asmImmediate "#\d\+\>"
|
||||||
|
syn match asmImmediate "<\$\x\+\>"
|
||||||
|
syn match asmImmediate "<\d\+\>"
|
||||||
|
syn match asmImmediate ">\$\x\+\>"
|
||||||
|
syn match asmImmediate ">\d\+\>"
|
||||||
|
syn match asmImmediate "#<\$\x\+\>"
|
||||||
|
syn match asmImmediate "#<\d\+\>"
|
||||||
|
syn match asmImmediate "#>\$\x\+\>"
|
||||||
|
syn match asmImmediate "#>\d\+\>"
|
||||||
|
|
||||||
|
" memory and data directives
|
||||||
|
syn match kickAssDirectives "\.\<pc\>"
|
||||||
|
syn match kickAssDirectives "\.\<align\>"
|
||||||
|
syn match kickAssDirectives "\.\<byte\>"
|
||||||
|
syn match kickAssDirectives "\.\<word\>"
|
||||||
|
syn match kickAssDirectives "\.\<dword\>"
|
||||||
|
syn match kickAssDirectives "\.\<text\>"
|
||||||
|
syn match kickAssDirectives "\.\<fill\>"
|
||||||
|
syn match kickAssDirectives "\.\<pseudopc\>"
|
||||||
|
|
||||||
|
" import directive
|
||||||
|
syn match kickAssDirectives "\.\<import\>"
|
||||||
|
|
||||||
|
" console output
|
||||||
|
syn match kickAssDirectives "\.\<print\>"
|
||||||
|
syn match kickAssDirectives "\.\<printnow\>"
|
||||||
|
syn match kickAssDirectives "\.\<error\>"
|
||||||
|
|
||||||
|
" elements of script language
|
||||||
|
syn match kickAssDirectives "\.\<eval\>"
|
||||||
|
|
||||||
|
syn match kickAssDirectives "\.\<var\>"
|
||||||
|
syn match kickAssDirectives "\.\<const\>"
|
||||||
|
syn match kickAssDirectives "\.\<enum\>"
|
||||||
|
syn match kickAssDirectives "\.\<label\>"
|
||||||
|
|
||||||
|
|
||||||
|
syn match kickAssDirectives ":\<BasicUpstart\>"
|
||||||
|
syn match kickAssDirectives "\.\<add\>"
|
||||||
|
syn match kickAssDirectives "\.\<assert\>"
|
||||||
|
syn match kickAssDirectives "\.\<asserterror\>"
|
||||||
|
syn match kickAssDirectives "\.\<define\>"
|
||||||
|
syn match kickAssDirectives "\.\<filenamespace\>"
|
||||||
|
syn match kickAssDirectives "\.\<for\>"
|
||||||
|
syn match kickAssDirectives "\.\<function\>" nextgroup=asmDefName skipwhite
|
||||||
|
syn match kickAssDirectives "\.\<if\>"
|
||||||
|
syn match kickAssDirectives "\.\<macro\>" nextgroup=asmDefName skipwhite
|
||||||
|
syn match kickAssDirectives "\.\<namespace\>"
|
||||||
|
syn match kickAssDirectives "\.\<pseudocommand\>"
|
||||||
|
syn match kickAssDirectives "\.\<return\>"
|
||||||
|
syn match kickAssDirectives "\.\<struct\>"
|
||||||
|
syn match kickAssDirectives "\<else\>"
|
||||||
|
syn match kickAssDirectives "\<LoadSid\>"
|
||||||
|
syn match kickAssDirectives "\<LoadPicture\>"
|
||||||
|
syn match kickAssDirectives "\<createFile\>"
|
||||||
|
|
||||||
|
syn keyword kickAssColors BLACK WHITE RED CYAN PURPLE GREEN BLUE YELLOW ORANGE
|
||||||
|
syn keyword kickAssColors BROWN LIGHT_RED DARK_GRAY GRAY LIGHT_GREEN LIGHT_BLUE
|
||||||
|
syn keyword kickAssColors LIGHT_GRAY
|
||||||
|
|
||||||
|
syn keyword kickAssConstants BD_C64FILE BF_BITMAP_SINGLECOLOR BF_KOALA BF_FLI
|
||||||
|
|
||||||
|
syn match asmDefName "[a-zA-Z_][a-zA-Z0-9_]*" display contained
|
||||||
|
|
||||||
|
syn match kickAssFunctions "\<LoadBinary\>" display contained
|
||||||
|
syn match kickAssFunctions "\<LoadPicture\>" display contained
|
||||||
|
syn match kickAssFunctions "\<LoadSid\>" display contained
|
||||||
|
syn match kickAssFunctions "\<Matrix\>" display contained
|
||||||
|
syn match kickAssFunctions "\<RotationMatrix\>" display contained
|
||||||
|
syn match kickAssFunctions "\<ScaleMatrix\>" display contained
|
||||||
|
syn match kickAssFunctions "\<PerspectiveMatrix\>" display contained
|
||||||
|
syn match kickAssFunctions "\<MoveMatrix\>" display contained
|
||||||
|
syn match kickAssFunctions "\<writeln\>" display contained
|
||||||
|
|
||||||
|
" generic/common methods (same name, different but similar behaviour -
|
||||||
|
" depending on context)
|
||||||
|
syn match kickAssFunctions "\.\<size\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<get\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<remove\>" display contained
|
||||||
|
|
||||||
|
" string methods
|
||||||
|
syn match kickAssFunctions "\.\<string\>" display contained
|
||||||
|
|
||||||
|
syn match kickAssFunctions "\.\<charAt\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<substring\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<asBoolean\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<asNumber\>" display contained
|
||||||
|
|
||||||
|
syn match kickAssFunctions "\<toBinaryString\>" display contained
|
||||||
|
syn match kickAssFunctions "\<toHexString\>" display contained
|
||||||
|
syn match kickAssFunctions "\<toIntString\>" display contained
|
||||||
|
syn match kickAssFunctions "\<toOctalString\>" display contained
|
||||||
|
|
||||||
|
" Math
|
||||||
|
syn keyword kickAssConstants PI E
|
||||||
|
|
||||||
|
syn match kickAssFunName "\<abs\>" contained
|
||||||
|
syn match kickAssFunName "\<acos\>" display contained
|
||||||
|
syn match kickAssFunName "\<asin\>" display contained
|
||||||
|
syn match kickAssFunName "\<atan\>" display contained
|
||||||
|
syn match kickAssFunName "\<atan2\>" display contained
|
||||||
|
syn match kickAssFunName "\<cbrt\>" display contained
|
||||||
|
syn match kickAssFunName "\<ceil\>" display contained
|
||||||
|
syn match kickAssFunName "\<cos\>" display contained
|
||||||
|
syn match kickAssFunName "\<cosh\>" display contained
|
||||||
|
syn match kickAssFunName "\<exp\>" display contained
|
||||||
|
syn match kickAssFunName "\<expml\>" display contained
|
||||||
|
syn match kickAssFunName "\<floor\>" display contained
|
||||||
|
syn match kickAssFunName "\<hypot\>" display contained
|
||||||
|
syn match kickAssFunName "\<IEEEremainder\>" display contained
|
||||||
|
syn match kickAssFunName "\<log\>" display contained
|
||||||
|
syn match kickAssFunName "\<log10\>" display contained
|
||||||
|
syn match kickAssFunName "\<log1p\>" display contained
|
||||||
|
syn match kickAssFunName "\<max\>" display contained
|
||||||
|
syn match kickAssFunName "\<min\>" display contained
|
||||||
|
syn match kickAssFunName "\<mod\>" display contained
|
||||||
|
syn match kickAssFunName "\<pow\>" display contained
|
||||||
|
syn match kickAssFunName "\<random\>" display contained
|
||||||
|
syn match kickAssFunName "\<round\>" display contained
|
||||||
|
syn match kickAssFunName "\<signum\>" display contained
|
||||||
|
syn match kickAssFunName "\<sin\>" display contained
|
||||||
|
syn match kickAssFunName "\<sinh\>" display contained
|
||||||
|
syn match kickAssFunName "\<sqrt\>" display contained
|
||||||
|
syn match kickAssFunName "\<tan\>" display contained
|
||||||
|
syn match kickAssFunName "\<tanh\>" display contained
|
||||||
|
syn match kickAssFunName "\<toDegrees\>" display contained
|
||||||
|
syn match kickAssFunName "\<toRadians\>" display contained
|
||||||
|
|
||||||
|
" List
|
||||||
|
syn match kickAssFunctions "\<List\>" display contained
|
||||||
|
" get
|
||||||
|
syn match kickAssFunctions "\.\<set\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<add\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<shuffle\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<reverse\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<sort\>" display contained
|
||||||
|
|
||||||
|
" Dictionaries (hash tables)
|
||||||
|
syn keyword kickAssFunctions Hashtable contained
|
||||||
|
|
||||||
|
" get
|
||||||
|
syn match kickAssFunctions "\.\<put\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<keys\>" display contained
|
||||||
|
syn match kickAssFunctions "\.\<containsKey\>" display contained
|
||||||
|
|
||||||
|
" Vector/matrix
|
||||||
|
syn match kickAssFunctions /\<Vector\>(/he=e-1
|
||||||
|
" get
|
||||||
|
syn match kickAssFunName "\<getX\>" display contained
|
||||||
|
syn match kickAssFunName "\<getY\>" display contained
|
||||||
|
syn match kickAssFunName "\<getZ\>" display contained
|
||||||
|
syn match kickAssFunName "\<\X\>" display contained
|
||||||
|
|
||||||
|
syn region kickAssFunctionsCall start="[a-z0-9_]\." end="(" contains=kickAssFunName
|
||||||
|
|
||||||
|
if !exists("did_kickasm_syntax_inits")
|
||||||
|
let did_kickasm_syntax_inits = 1
|
||||||
|
|
||||||
|
hi def link kickAssDirectives Special
|
||||||
|
hi def link asm6510Illegal Debug
|
||||||
|
hi def link asm6502Mnemonics Type
|
||||||
|
hi def link asmDtvMnemonics Type
|
||||||
|
hi def link asm6502Index None
|
||||||
|
hi def link asm6502Jumps PreCondit
|
||||||
|
hi def link asmString String
|
||||||
|
hi def link asmSString String
|
||||||
|
hi def link asmComment Comment
|
||||||
|
hi def link asmLineComment Comment
|
||||||
|
hi def link asmMacroCall Function
|
||||||
|
hi def link asmLabel Label
|
||||||
|
hi def link asmTodo Todo
|
||||||
|
|
||||||
|
hi def link asmDefName Function
|
||||||
|
hi def link kickAssFunctions Function
|
||||||
|
hi def link kickAssFunName Function
|
||||||
|
hi def link kickAssColors Constant
|
||||||
|
hi def link kickAssConstants Constant
|
||||||
|
|
||||||
|
hi def link asmImmediate None
|
||||||
|
hi def link hexNumber None
|
||||||
|
hi def link binNumber None
|
||||||
|
hi def link decNumber None
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:current_syntax = "kickasm"
|
||||||
Reference in New Issue
Block a user