diff options
author | bnewbold <bnewbold@robocracy.org> | 2010-03-25 06:29:54 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2010-03-25 06:29:54 -0400 |
commit | 0bf28391b00b1e28c44324bcd7647df416314667 (patch) | |
tree | 6dda90e70218861975deb408eb21b2ff00eb5ef6 /.vim/plugin/crefvim.vim | |
parent | 564a2d0d39c8e1fb79ee800973848b2442833356 (diff) | |
download | openwrt-repro-0bf28391b00b1e28c44324bcd7647df416314667.tar.gz openwrt-repro-0bf28391b00b1e28c44324bcd7647df416314667.zip |
lots and lots of vim stuff for c development...
Diffstat (limited to '.vim/plugin/crefvim.vim')
-rwxr-xr-x | .vim/plugin/crefvim.vim | 356 |
1 files changed, 356 insertions, 0 deletions
diff --git a/.vim/plugin/crefvim.vim b/.vim/plugin/crefvim.vim new file mode 100755 index 0000000..db0c757 --- /dev/null +++ b/.vim/plugin/crefvim.vim @@ -0,0 +1,356 @@ +"***************************************************************************** +"** Name: crefvim.vim - a C-Reference for Vim ** +"** ** +"** Type: global VIM plugin ** +"** ** +"** Author: Christian Habermann ** +"** christian(at)habermann-net(point)de ** +"** ** +"** Copyright: (c) 2002, 2003 by Christian Habermann ** +"** ** +"** License: GNU General Public License 2 (GPL 2) or later ** +"** ** +"** This program is free software; you can redistribute it ** +"** and/or modify it under the terms of the GNU General Public ** +"** License as published by the Free Software Foundation; either ** +"** version 2 of the License, or (at your option) any later ** +"** version. ** +"** ** +"** This program is distributed in the hope that it will be ** +"** useful, but WITHOUT ANY WARRANTY; without even the implied ** +"** warrenty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** +"** PURPOSE. ** +"** See the GNU General Public License for more details. ** +"** ** +"** Version: 1.0.0 ** +"** tested under Linux (vim, gvim 6.1) and Win32 (gvim 6.1) ** +"** ** +"** History: 0.1.0 12. Dec. 2002 - 23. Feb. 2003 ** +"** initial version, not released ** +"** 1.0.0 6. Apr. 2003 ** +"** no changes, first release ** +"** ** +"** ** +"***************************************************************************** +"** Description: ** +"** This script's intention is to provide a C-reference manual that can ** +"** be accessed from within Vim. ** +"** ** +"** For futher information see crefvim.txt or do :help crefvim ** +"** ** +"** ** +"** Happy viming... ** +"***************************************************************************** + +" allow user to avoid loading this plugin and prevent loading twice +if exists ("loaded_crefvim") + finish +endif + +let loaded_crefvim = 1 + + + + +"***************************************************************************** +"************************** C O N F I G U R A T I O N ************************ +"***************************************************************************** + +" the mappings: +if !hasmapto('<Plug>CRV_CRefVimVisual') + vmap <silent> <unique> <Leader>cr <Plug>CRV_CRefVimVisual +endif +if !hasmapto('<Plug>CRV_CRefVimNormal') + nmap <silent> <unique> <Leader>cr <Plug>CRV_CRefVimNormal +endif +if !hasmapto('<Plug>CRV_CRefVimAsk') + map <silent> <unique> <Leader>cw <Plug>CRV_CRefVimAsk +endif +if !hasmapto('<Plug>CRV_CRefVimInvoke') + map <silent> <unique> <Leader>cc <Plug>CRV_CRefVimInvoke +endif + +vmap <silent> <unique> <script> <Plug>CRV_CRefVimVisual y:call <SID>CRV_CRefVimWord('<c-r>"')<CR> +nmap <silent> <unique> <script> <Plug>CRV_CRefVimNormal :call <SID>CRV_CRefVimWord(expand("<cword>"))<CR> +map <silent> <unique> <script> <Plug>CRV_CRefVimAsk :call <SID>CRV_CRefVimAskForWord()<CR> +map <silent> <unique> <script> <Plug>CRV_CRefVimInvoke :call <SID>CRV_CRefVimShowContents()<CR> + + + + +"***************************************************************************** +"************************* I N I T I A L I S A T I O N *********************** +"***************************************************************************** + + +"***************************************************************************** +"****************** I N T E R F A C E T O C O R E ************************** +"***************************************************************************** + +"***************************************************************************** +"** this function separates plugin-core-function from user ** +"***************************************************************************** +function <SID>CRV_CRefVimWord(str) + call s:CRefVim(a:str) +endfunction + + +"***************************************************************************** +"** this function separates plugin-core-function from user ** +"***************************************************************************** +function <SID>CRV_CRefVimAskForWord() + call s:CRefVimAskForWord() +endfunction + + +"***************************************************************************** +"** this function separates plugin-core-function from user ** +"***************************************************************************** +function <SID>CRV_CRefVimShowContents() + " show contents of C-reference manual + call s:LookUp("") +endfunction + + + + + +"***************************************************************************** +"************************ C O R E F U N C T I O N S ************************* +"***************************************************************************** + +"***************************************************************************** +"** ask for a word/phrase and lookup ** +"***************************************************************************** +function s:CRefVimAskForWord() + let l:strng = input("What to lookup: ") + call s:LookUp(l:strng) +endfunction + + + +"***************************************************************************** +"** input: "str" ** +"** output: empty string: "str" is not an operator ** +"** else: name of tag to go to ** +"** ** +"***************************************************************************** +"** remarks: ** +"** This function tests whether or not "str" is an operator. ** +"** If so, the tag to go to is returned. ** +"** ** +"***************************************************************************** +function s:IsItAnOperator(str) + + " get first character + let l:firstChr = strpart(a:str, 0, 1) + + " is the first character of the help-string an operator? + if stridx("!&+-*/%,.:<=>?^|~(){}[]", l:firstChr) >= 0 + return "crv-operators" + else + return "" + endif + +endfunction + + + +"***************************************************************************** +"** input: "str" ** +"** output: empty string: "str" is not an escape-sequence ** +"** else: name of tag to go to ** +"** ** +"***************************************************************************** +"** remarks: ** +"** This function tests whether or not "str" is an escape-sequence. ** +"** If so, the tag to go to is returned. ** +"** Note: currently \' does not work (="\\\'") ** +"** ** +"***************************************************************************** +function s:IsItAnEscSequence(str) + + if (a:str == "\\") || (a:str == "\\\\") || (a:str == "\\0") || (a:str == "\\x") || + \(a:str == "\\a") || (a:str == "\\b") || (a:str == "\\f") || (a:str == "\\n") || + \(a:str == "\\r") || (a:str == "\\t") || (a:str == "\\v") || (a:str == "\\?") || + \(a:str == "\\\'") || (a:str == "\\\"") + return "crv-lngEscSeq" + else + return "" + endif + +endfunction + + + + +"***************************************************************************** +"** input: "str" ** +"** output: empty string: "str" is not a comment ** +"** else: name of tag to go to ** +"** ** +"***************************************************************************** +"** remarks: ** +"** This function tests whether or not "str" is a comment. ** +"** If so, the tag to go to is returned. ** +"** ** +"***************************************************************************** +function s:IsItAComment(str) + + if (a:str == "//") || (a:str == "/*") || (a:str == "*/") + return "crv-lngComment" + else + return "" + endif + +endfunction + + + + +"***************************************************************************** +"** input: "str" ** +"** output: empty string: "str" is not a preprocessor ** +"** else: name of tag to go to ** +"** ** +"***************************************************************************** +"** remarks: ** +"** This function tests whether or not "str" is a preprocessor command ** +"** or a preprocessor operator. ** +"** If so, the tag to go to is returned. ** +"** ** +"** Nothing is done if the help-string is equal to "if" or "else" ** +"** because these are statements too. For "if" and "else" it's assumed ** +"** that the statements are meant. But "#if" and "#else" are treated ** +"** as preprocessor commands. ** +"** ** +"***************************************************************************** +function s:IsItAPreprocessor(str) + + " get first character + let l:firstChr = strpart(a:str, 0, 1) + + " if first character of the help-string is a #, we have the command/operator + " string in an appropriate form, so append this help-string to "crv-" + if l:firstChr == "#" + return "crv-" . a:str + else + " no # in front of the help string, so evaluate which command/operator + " is meant + if (a:str == "defined") + return "crv-defined" + else + if (a:str == "define") || + \(a:str == "undef") || + \(a:str == "ifdef") || + \(a:str == "ifndef") || + \(a:str == "elif") || + \(a:str == "endif") || + \(a:str == "include") || + \(a:str == "line") || + \(a:str == "error") || + \(a:str == "pragma") + return "\#" . a:str + endif + endif + endif + +endfunction + + + + +"***************************************************************************** +"** input: "str" to lookup in C-reference manual ** +"** output: none ** +"***************************************************************************** +"** remarks: ** +"** Lookup string "str". ** +"** Generally this function calls :help crv-"str" where "str" is the ** +"** word for which the user wants some help. ** +"** ** +"** But before activating VIM's help-system some tests and/or ** +"** modifications are done on "str": ** +"** - if help-string is a comment (//, /* or */), go to section ** +"** describing comments ** +"** - if help-string is an escape-sequence, go to section describing ** +"** escape-sequences ** +"** - if help-string is an operator, go to section dealing with operators ** +"** - if help-string is a preprocessor command/operator, go to section ** +"** that describes that command/operator ** +"** - else call :help crv-"str" ** +"** ** +"** If the help-string is empty, go to contents of C-reference manual. ** +"** ** +"***************************************************************************** +function s:LookUp(str) + + if a:str != "" + + let l:helpTag = s:IsItAComment(a:str) + + if l:helpTag == "" + let l:helpTag = s:IsItAnEscSequence(a:str) + + if l:helpTag == "" + let l:helpTag = s:IsItAnOperator(a:str) + + if l:helpTag == "" + let l:helpTag = s:IsItAPreprocessor(a:str) + + if l:helpTag == "" + let l:helpTag = "crv-" . a:str + endif + + endif + + endif + + endif + + + " reset error message + let v:errmsg = "" + + " activate help-system looking for the appropriate topic + " suppress error messages + silent! execute ":help " . l:helpTag + + " if there was an error, print message + if v:errmsg != "" + echo " No help found for \"" .a:str . "\"" + endif + else + " help string is empty, so show contents of manual + execute ":help crefvim" + endif + + +endfunction + + + +"***************************************************************************** +"** input: "str" to lookup in C-reference manual ** +"** output: none ** +"***************************************************************************** +"** remarks: ** +"** lookup string "str". ** +"** If there is no string, ask for word/phrase. ** +"** ** +"***************************************************************************** +function s:CRefVim(str) + + let s:strng = a:str + + if s:strng == "" " is there a string to search for? + call s:CRefVimAskForWord() + else + call s:LookUp(s:strng) + endif + +endfunction + + + +"*** EOF *** |