vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 4f28e21f3f7822008ea229a6c0755c064ef015ab
Author: Maxim Kim <habamax@gmail.com>
Date:   Sun,  4 May 2008 00:00:00 +0000

Version 0.1: Initial upload

Diffstat:
AREADME | 112+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aftplugin/vimwiki.vim | 185+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asyntax/vimwiki.vim | 129+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 426 insertions(+), 0 deletions(-)

diff --git a/README b/README @@ -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. + +Vimwiki quick reference card http://habamax.ru/myvim/data/vimwikiqrc.pdf by J.A.J. Pater. +Thx Gager Jacob for the update. + + +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 = + * MyUrgentTasks -- things to be done _yesterday_!!! + * ProjectGutenberg -- good books are power. + * ScratchPad -- various temporary stuff. + + +Notice that ProjectGutenberg, MyUrgentTasks and ScratchPad highlighted as +errors. These are links in CamelCase form that do not exists yet. (CamelCase +form -- capitalized word connected with other capitalized words) + +Place cursor on ProjectGutenberg and press <Enter>. Now you are in +ProjectGutenberg. Edit and save it, then press Backspace to return to parent +wiki page. You should see the difference now -- ProjectGutenberg is +highlighted as a link. + + +For the various options see :h vimwiki-options. + + +Basic Markup +============================================================================== +see :h vimwiki-syntax + +*bold* -- bold +_italic_ -- italic +WikiWord -- link to WikiWord +[[wiki link]] -- link with spaces +[[wiki link][description]] -- link with description +[[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 + diff --git a/ftplugin/vimwiki.vim b/ftplugin/vimwiki.vim @@ -0,0 +1,185 @@ +" Vim filetype plugin file +" Language: Wiki +" Maintainer: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Author: Maxim Kim +" Filenames: *.wiki +" Last Change: (04.05.2008 17:45) +" Version: 0.1 + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 " Don't load another plugin for this buffer + +" Reset the following options to undo this plugin. +let b:undo_ftplugin = "setl tw< wrap< lbr< fenc< ff< sua< isf< awa<" + +setlocal textwidth=0 +setlocal wrap +setlocal linebreak +setlocal fileencoding=utf-8 +setlocal fileformat=unix +setlocal autowriteall +" for gf +setlocal suffixesadd=.wiki +setlocal isfname-=[,] + + +"" Defaults +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +function! s:default(varname,value) + if !exists('g:vimwiki_'.a:varname) + let g:vimwiki_{a:varname} = a:value + endif +endfunction + +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('history',[]) + +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 g:vimwiki_word1 = '['.upp.']['.nlo.']*['.low.']['.nup.']*['.upp.']['.any.']*' +let g:vimwiki_word2 = '\[\[['.upp.low.oth.'[:punct:][:space:]]\+\]\]' + +let s:wiki_word = '\C\<'.g:vimwiki_word1.'\>\|'.g:vimwiki_word2 + + +"" Functions {{{ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +function! s:SearchWord(wikiRx,cmd) + let hl = &hls + let lasts = @/ + let @/ = a:wikiRx + set nohls + try + :silent exe 'normal ' a:cmd + catch /Pattern not found/ + echoh WarningMsg + echo "No WikiWord found." + echoh None + endt + let @/ = lasts + let &hls = hl +endfunction + +function! s:WikiNextWord() + call s:SearchWord(s:wiki_word, 'n') +endfunction + +function! s:WikiPrevWord() + call s:SearchWord(s:wiki_word, 'N') +endfunction + +function! s:WikiGetWordAtCursor(wikiRX) + let col = col('.') - 1 + let line = getline('.') + let ebeg = -1 + let cont = match(line, a:wikiRX, 0) + while (ebeg >= 0 || (0 <= cont) && (cont <= col)) + let contn = matchend(line, a:wikiRX, cont) + if (cont <= col) && (col < contn) + let ebeg = match(line, a:wikiRX, cont) + let elen = contn - ebeg + break + else + let cont = match(line, a:wikiRX, contn) + endif + endwh + if ebeg >= 0 + return strpart(line, ebeg, elen) + else + return "" + endif +endf + +function! s:WikiStripWord(word) + let result = a:word + if strpart(a:word, 0, 2) == "[[" + let result = strpart(a:word, 2, strlen(a:word)-4) + endif + return result +endfunction + + +if !exists('*s:WikiFollowWord') + function! s:WikiFollowWord() + let word = s:WikiStripWord(s:WikiGetWordAtCursor(s:wiki_word)) + " insert doesn't work properly inside :if. Check :help :if. + if word == "" + execute "normal! \n" + return + endif + " 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 + endfunction + + function! s:WikiGoBackWord() + if len(g:vimwiki_history) > 0 + let word = remove(g:vimwiki_history, 0) + " go back to saved WikiWord + execute ":e ".get(word, 0) + call cursor(line('.'), get(word,1)) + endif + endfunction +endif + +function! s:WikiNewLine() + let prevline = getline(line('.')-1) + + if prevline =~ '^\s*\*' + let curline = substitute(getline('.'),'^\s\+',"","g") + if prevline =~ '^\s*\*\s*$' + " there should be easier way ... + execute 'normal kA '."\<ESC>".'"_dF*JX' + return + endif + call setline(line('.'), '* '.curline) + execute "normal ==" + let ind = indent(line('.')) + 3 + call cursor(line('.'), ind) + return + endif + + " delete <space> + execute 'normal X' +endfunction + + +" Functions }}} + +"" Keybindings +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +nmap <buffer> <Up> gk +nmap <buffer> k gk +vmap <buffer> <Up> gk +vmap <buffer> k gk + +nmap <buffer> <Down> gj +nmap <buffer> j gj +vmap <buffer> <Down> gj +vmap <buffer> j gj + +imap <buffer> <Down> <C-o>gj +imap <buffer> <Up> <C-o>gk + +nmap <buffer> <CR> :call <SID>WikiFollowWord()<CR> +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> diff --git a/syntax/vimwiki.vim b/syntax/vimwiki.vim @@ -0,0 +1,129 @@ +" Vim syntax file +" Language: Wiki +" Maintainer: Maxim Kim (habamax at gmail dot com) +" Home: http://code.google.com/p/vimwiki/ +" Author: Maxim Kim +" Filenames: *.wiki +" Last Change: (04.05.2008 17:45) +" Version: 0.1 +" Based on FlexWiki + +" Quit if syntax file is already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" A WikiWord (unqualifiedWikiName) +execute 'syntax match wikiWord /'.g:vimwiki_word1.'/' +" A [bracketed wiki word] +execute 'syntax match wikiWord /'.g:vimwiki_word2.'/' + +" text: "this is a link (optional tooltip)":http://www.microsoft.com +" TODO: check URL syntax against RFC +syntax match wikiLink `\("[^"(]\+\((\([^)]\+\))\)\?":\)\?\(https\?\|ftp\|gopher\|telnet\|file\|notes\|ms-help\):\(\(\(//\)\|\(\\\\\)\)\+[A-Za-z0-9:#@%/;$~_?+-=.&\-\\\\]*\)` + +" text: *strong* +syntax match wikiBold /\(^\|\W\)\zs\*\([^ ].\{-}\)\*/ +" '''bold''' +syntax match wikiBold /'''\([^'].\{-}\)'''/ + +" text: _emphasis_ +syntax match wikiItalic /\(^\|\W\)\zs_\([^ ].\{-}\)_/ +" ''italic'' +syntax match wikiItalic /''\([^'].\{-}\)''/ + +" ``deemphasis`` +syntax match wikiDeEmphasis /``\([^`].\{-}\)``/ + +" 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: ^superscript^ +syntax match wikiSuperScript /\(^\|\W\)\zs^\([^ ].\{-}\)^/ + +" text: ~subscript~ +syntax match wikiSubScript /\(^\|\W\)\zs\~\([^ ].\{-}\)\~/ + +" text: ??citation?? +syntax match wikiCitation /\(^\|\W\)\zs??\([^ ].\{-}\)??/ + +" 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 + +" single-line WikiPropertys +syntax match wikiSingleLineProperty /^:\?[A-Z_][_a-zA-Z0-9]\+:/ + +" Header levels, 1-6 +syntax match wikiH1 /^!.*$/ +syntax match wikiH2 /^!!.*$/ +syntax match wikiH3 /^!!!.*$/ +syntax match wikiH4 /^!!!!.*$/ +syntax match wikiH5 /^!!!!!.*$/ +syntax match wikiH6 /^!!!!!!.*$/ + +" <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*\.\)/ + + + + +" Link FlexWiki syntax items to colors +hi def link wikiH1 Title +hi def link wikiH2 wikiH1 +hi def link wikiH3 wikiH2 +hi def link wikiH4 wikiH3 +hi def link wikiH5 wikiH4 +hi def link wikiH6 wikiH5 +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 wikiWord Underlined + +hi def link wikiEscape Todo +hi def link wikiPre PreProc +hi def link wikiLink Underlined +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 +hi def link wikiCitation Constant + +hi def link wikiSingleLineProperty Identifier + +let b:current_syntax="VimWiki" + +" vim:tw=0: