Version 0.2

* (+) Add part of Google's Wiki syntax.
  * (+) Add auto insert # with ENTER.
  * (+) On/Off auto insert bullet with ENTER.
  * (+) Strip `[[complex wiki name]]` from symbols that cannot be used in file names.
  * (+) Links to non-wiki files. Non wiki files are files with extensions ie `[[hello world.txt]]` or `[[my homesite.html]]`
This commit is contained in:
Maxim Kim 2008-05-05 00:00:00 +00:00 committed by Able Scraper
parent 4f28e21f3f
commit 0b416c2834
2 changed files with 82 additions and 67 deletions

View File

@ -4,8 +4,8 @@
" Home: http://code.google.com/p/vimwiki/
" Author: Maxim Kim
" Filenames: *.wiki
" Last Change: (04.05.2008 17:45)
" Version: 0.1
" Last Change: (05.05.2008 19:30)
" Version: 0.2
if exists("b:did_ftplugin")
finish
@ -35,12 +35,16 @@ function! s:default(varname,value)
endif
endfunction
"" Could be redefined by users
call s:default('index',"")
call s:default('home',"")
call s:default('upper','A-ZА-Я')
call s:default('lower','a-zа-я')
call s:default('other','0-9_')
call s:default('ext','.wiki')
call s:default('smartCR',1)
call s:default('stripsym','_')
call s:default('history',[])
let upp = g:vimwiki_upper
@ -74,6 +78,7 @@ function! s:SearchWord(wikiRx,cmd)
let &hls = hl
endfunction
function! s:WikiNextWord()
call s:SearchWord(s:wiki_word, 'n')
endfunction
@ -104,27 +109,44 @@ function! s:WikiGetWordAtCursor(wikiRX)
endif
endf
function! s:WikiStripWord(word)
function! s:WikiStripWord(word, sym)
function! s:WikiStripWordHelper(word, sym)
return substitute(a:word, '[<>|?*/\:"]', a:sym, 'g')
endfunction
let result = a:word
if strpart(a:word, 0, 2) == "[["
let result = strpart(a:word, 2, strlen(a:word)-4)
let result = s:WikiStripWordHelper(strpart(a:word, 2, strlen(a:word)-4), a:sym)
endif
return result
endfunction
" Check if word is link to a non-wiki file.
" The easiest way is to check if it has extension like .txt or .html
function! s:WikiLinkToNonWikiFile(word)
if a:word =~ '\..\{1,4}$'
return 1
endif
return 0
endfunction
if !exists('*s:WikiFollowWord')
function! s:WikiFollowWord()
let word = s:WikiStripWord(s:WikiGetWordAtCursor(s:wiki_word))
let word = s:WikiStripWord(s:WikiGetWordAtCursor(s:wiki_word), g:vimwiki_stripsym)
" insert doesn't work properly inside :if. Check :help :if.
if word == ""
execute "normal! \n"
return
endif
if s:WikiLinkToNonWikiFile(word)
execute ":e ".word
else
" history is [['WikiWord.wiki', 11], ['AnotherWikiWord', 3] ... etc]
" where numbers are column positions we should return when coming back.
call insert(g:vimwiki_history, [expand('%:p'), col('.')])
execute ":e ".g:vimwiki_home.word.g:vimwiki_ext
endif
endfunction
function! s:WikiGoBackWord()
@ -138,30 +160,40 @@ if !exists('*s:WikiFollowWord')
endif
function! s:WikiNewLine()
function! WikiAutoListItemInsert(listSym)
let sym = escape(a:listSym, '*')
let prevline = getline(line('.')-1)
if prevline =~ '^\s*\*'
if prevline =~ '^\s*'.sym
let curline = substitute(getline('.'),'^\s\+',"","g")
if prevline =~ '^\s*\*\s*$'
if prevline =~ '^\s*'.sym.'\s*$'
" there should be easier way ...
execute 'normal kA '."\<ESC>".'"_dF*JX'
execute 'normal kA '."\<ESC>".'"_dF'.a:listSym.'JX'
return 1
endif
let ind = indent(line('.')-1)
call setline(line('.'), strpart(prevline, 0, ind).a:listSym.' '.curline)
call cursor(line('.'), ind+3)
return 1
endif
return 0
endfunction
if WikiAutoListItemInsert('*')
return
endif
call setline(line('.'), '* '.curline)
execute "normal =="
let ind = indent(line('.')) + 3
call cursor(line('.'), ind)
if WikiAutoListItemInsert('#')
return
endif
" delete <space>
execute 'normal X'
execute 'normal x'
endfunction
" Functions }}}
"" Keybindings
"" Keybindings {{{
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <buffer> <Up> gk
nmap <buffer> k gk
@ -182,4 +214,7 @@ nmap <buffer> <BS> :call <SID>WikiGoBackWord()<CR>
nmap <buffer> <TAB> :call <SID>WikiNextWord()<CR>
nmap <buffer> <S-TAB> :call <SID>WikiPrevWord()<CR>
inoremap <CR> <CR> <C-O>:call <SID>WikiNewLine()<CR>
if g:vimwiki_smartCR
inoremap <CR> <CR> <C-O>:call <SID>WikiNewLine()<CR>
endif
" Keybindings }}}

View File

@ -4,8 +4,8 @@
" Home: http://code.google.com/p/vimwiki/
" Author: Maxim Kim
" Filenames: *.wiki
" Last Change: (04.05.2008 17:45)
" Version: 0.1
" Last Change: (05.05.2008 19:30)
" Version: 0.2
" Based on FlexWiki
" Quit if syntax file is already loaded
@ -26,70 +26,51 @@ syntax match wikiLink `\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ft
" text: *strong*
syntax match wikiBold /\(^\|\W\)\zs\*\([^ ].\{-}\)\*/
" '''bold'''
syntax match wikiBold /'''\([^'].\{-}\)'''/
" text: _emphasis_
syntax match wikiItalic /\(^\|\W\)\zs_\([^ ].\{-}\)_/
" ''italic''
syntax match wikiItalic /''\([^'].\{-}\)''/
syntax match wikiItalic /_.\{-}_/
" ``deemphasis``
syntax match wikiDeEmphasis /``\([^`].\{-}\)``/
" text: `code`
syntax match wikiCode /`.\{-}`/
" text: @code@
syntax match wikiCode /\(^\|\s\|(\|\[\)\zs@\([^@]\+\)@/
" text: -deleted text-
syntax match wikiDelText /\(^\|\s\+\)\zs-\([^ <a ]\|[^ <img ]\|[^ -].*\)-/
" text: +inserted text+
syntax match wikiInsText /\(^\|\W\)\zs+\([^ ].\{-}\)+/
" text: ~~deleted text~~
syntax match wikiDelText /\~\{2}.\{-}\~\{2}/
" text: ^superscript^
syntax match wikiSuperScript /\(^\|\W\)\zs^\([^ ].\{-}\)^/
syntax match wikiSuperScript /\^.\{-}\^/
" text: ~subscript~
syntax match wikiSubScript /\(^\|\W\)\zs\~\([^ ].\{-}\)\~/
" text: ??citation??
syntax match wikiCitation /\(^\|\W\)\zs??\([^ ].\{-}\)??/
" text: ,,subscript,,
syntax match wikiSubScript /,,.\{-},,/
" Emoticons: must come after the Textilisms, as later rules take precedence
" over earlier ones. This match is an approximation for the ~70 distinct
" patterns that FlexWiki knows.
syntax match wikiEmoticons /\((.)\|:[()|$@]\|:-[DOPS()\]|$@]\|;)\|:'(\)/
" Aggregate all the regular text highlighting into flexwikiText
syntax cluster wikiText contains=wikiItalic,wikiBold,wikiCode,wikiDeEmphasis,wikiDelText,wikiInsText,wikiSuperScript,wikiSubScript,wikiCitation,wikiLink,wikiWord,wikiEmoticons
" Aggregate all the regular text highlighting into wikiText
syntax cluster wikiText contains=wikiItalic,wikiBold,wikiCode,wikiDelText,wikiSuperScript,wikiSubScript,wikiLink,wikiWord,wikiEmoticons
" single-line WikiPropertys
syntax match wikiSingleLineProperty /^:\?[A-Z_][_a-zA-Z0-9]\+:/
" Treat all other lines that start with spaces as PRE-formatted text.
syntax match wikiPre /^[ \t]\+.*$/ contains=@wikiText
" Header levels, 1-6
syntax match wikiH1 /^!.*$/
syntax match wikiH2 /^!!.*$/
syntax match wikiH3 /^!!!.*$/
syntax match wikiH4 /^!!!!.*$/
syntax match wikiH5 /^!!!!!.*$/
syntax match wikiH6 /^!!!!!!.*$/
syntax match wikiH1 /\(^!\{1}.*$\|^\s*=\{1}.*=\{1}\s*$\)/
syntax match wikiH2 /\(^!\{2}.*$\|^\s*=\{2}.*=\{2}\s*$\)/
syntax match wikiH3 /\(^!\{3}.*$\|^\s*=\{3}.*=\{3}\s*$\)/
syntax match wikiH4 /\(^!\{4}.*$\|^\s*=\{4}.*=\{4}\s*$\)/
syntax match wikiH5 /\(^!\{5}.*$\|^\s*=\{5}.*=\{5}\s*$\)/
syntax match wikiH6 /\(^!\{6}.*$\|^\s*=\{6}.*=\{6}\s*$\)/
" <hr>, horizontal rule
syntax match wikiHR /^----.*$/
" Formatting can be turned off by ""enclosing it in pairs of double quotes""
syntax match wikiEscape /"".\{-}""/
" Tables. Each line starts and ends with '||'; each cell is separated by '||'
syntax match wikiTable /||/
" Treat all other lines that start with spaces as PRE-formatted text.
syntax match wikiPre /^[ \t]\+.*$/
" Bulleted list items start with whitespace(s), then '*'
" syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\).*$/ contains=@wikiText
" highlight only bullets and digits.
syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\)/
syntax match wikiList /^\s\+\(\*\|[1-9]\+0*\.\|#\)/
@ -106,7 +87,7 @@ hi def link wikiHR wikiH6
hi def wikiBold term=bold cterm=bold gui=bold
hi def wikiItalic term=italic cterm=italic gui=italic
hi def link wikiCode Statement
hi def link wikiCode PreProc
hi def link wikiWord Underlined
hi def link wikiEscape Todo
@ -116,7 +97,6 @@ hi def link wikiList Type
hi def link wikiTable Type
hi def link wikiEmoticons Constant
hi def link wikiDelText Comment
hi def link wikiDeEmphasis Comment
hi def link wikiInsText Constant
hi def link wikiSuperScript Constant
hi def link wikiSubScript Constant