Version 0.1: Initial upload
This commit is contained in:
		
							
								
								
									
										185
									
								
								ftplugin/vimwiki.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								ftplugin/vimwiki.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -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> | ||||
		Reference in New Issue
	
	Block a user