abstract
| - I implemented another way to look for the name of the current function in c_stl.vim (http://hermitte.free.fr/vim/ressources/vimfiles/ftplugin/c/). However the search is very slow and time consuming when we try to guess the current function when there is no current function. I guess using :normal [[ could have been more effective. Using the preview windows instead of the statusline could be an option to think about (see previousWord.vim in the same place). I have modified the code from above to cater for test case below. function! FunctionName() "set a mark at our current position normal mz "while foundcontrol == 1, keep looking up the line to find something that "isn't a control statement "find the previous '{' and get the line above it "if the line matches a control statement, set found control to 1 so "we can look farther back in the file for the beginning of the "actual function we are in let foundstr = "" let strArrow = "" let strList = ["while", "for", "if", "else", "try", "catch", "case"] let foundcontrol = 1 while (foundcontrol) "find the { in this {...} normal [{ normal k0 let tempstring = getline(".") let foundcontrol = 0 for item in strList let foundstridx=match(tempstring,item) if(foundstridx >= 0) let foundstr = strpart(tempstring, foundstridx, 30) . strArrow . foundstr let tempstring = "" let strArrow = " @@@ " let foundcontrol = 1 break endif endfor if (foundcontrol == 0) let foundstridx = match(tempstring, "(") if(foundstridx >= 0) "we may found a function "go back to where our original cursor located normal `z let tempstring = tempstring . strArrow . foundstr return tempstring else "may not be a function, just a inner block here let foundcontrol=1 endif endif endwhile return tempstring endfunction Test case: Try place at "hihi" and "hoho" and call the function function() { haha { hoho } case huhu: { hihi } }
|