" Section Functions {{{ " Window movement shortcuts " move to the window in the direction shown, or create a new window function! WinMove(key) let t:curwin = winnr() exec "wincmd ".a:key if (t:curwin == winnr()) if (match(a:key,'[jk]')) wincmd v else wincmd s endif exec "wincmd ".a:key endif endfunction " recursively search up from dirname, sourcing all .vimrc.local files along the way function! ApplyLocalSettings(dirname) " convert windows paths to unix style let l:curDir = substitute(a:dirname, '\\', '/', 'g') " walk to the top of the dir tree let l:parentDir = strpart(l:curDir, 0, strridx(l:curDir, '/')) if isdirectory(l:parentDir) call ApplyLocalSettings(l:parentDir) endif " now walk back down the path and source .vimsettings as you find them. " child directories can inherit from their parents let l:settingsFile = a:dirname . '/.vimrc.local' if filereadable(l:settingsFile) exec ':source' . l:settingsFile endif endfunction " smart tab completion function! Smart_TabComplete() let line = getline('.') " current line let substr = strpart(line, -1, col('.')+1) " from the start of the current " line to one character right " of the cursor let substr = matchstr(substr, '[^ \t]*$') " word till cursor if (strlen(substr)==0) " nothing to match on empty string return '\' endif let has_period = match(substr, '\.') != -1 " position of period, if any let has_slash = match(substr, '\/') != -1 " position of slash, if any if (!has_period && !has_slash) return '\\' " existing text matching elseif ( has_slash ) return '\\' " file matching else return '\\' " plugin matching endif endfunction " execute a custom command function! RunCustomCommand() up if g:silent_custom_command execute 'silent !' . s:customcommand else execute '!' . s:customcommand endif endfunction function! SetCustomCommand() let s:customcommand = input('Enter Custom Command$ ') endfunction function! TrimWhiteSpace() %s/\s\+$//e endfunction function! HiInterestingWord(n) " Save our location. normal! mz " Yank the current word into the z register. normal! "zyiw " Calculate an arbitrary match ID. Hopefully nothing else is using it. let mid = 86750 + a:n " Clear existing matches, but don't worry if they don't exist. silent! call matchdelete(mid) " Construct a literal pattern that has to match at boundaries. let pat = '\V\<' . escape(@z, '\') . '\>' " Actually match the words. call matchadd("InterestingWord" . a:n, pat, 1, mid) " Move back to our original location. normal! `z endfunction nnoremap 1 :call HiInterestingWord(1) nnoremap 2 :call HiInterestingWord(2) nnoremap 3 :call HiInterestingWord(3) nnoremap 4 :call HiInterestingWord(4) nnoremap 5 :call HiInterestingWord(5) nnoremap 6 :call HiInterestingWord(6) hi def InterestingWord1 guifg=#000000 ctermfg=16 guibg=#ffa724 ctermbg=214 hi def InterestingWord2 guifg=#000000 ctermfg=16 guibg=#aeee00 ctermbg=154 hi def InterestingWord3 guifg=#000000 ctermfg=16 guibg=#8cffba ctermbg=121 hi def InterestingWord4 guifg=#000000 ctermfg=16 guibg=#b88853 ctermbg=137 hi def InterestingWord5 guifg=#000000 ctermfg=16 guibg=#ff9eb8 ctermbg=211 hi def InterestingWord6 guifg=#000000 ctermfg=16 guibg=#ff2c4b ctermbg=195 function! HtmlUnEscape() silent s/<//eg silent s/&/\&/eg endfunction nnoremap u :call HtmlUnEscape() " }}}