0

I'm developing some C++ code with VSCode+VIM extension. From time to time I need to do this while reading code: say I'm inside a long function and I want to know who called it. The first step to do is to move cursor directly under function's name so that I can invoke some keystrokes to show references.

What I'm current using is to press "[" key twice which will bring me to the opening bracket of the function. Since I have to follow some coding standard, the typical scenario is like this:

ReturnType ClassName::FunctionName(
    ParamType1 param1,
    ParamType2 param2,
    ParamType3 param3)
{ // <-- Cursor here
    ......

}

Then I need to press "k" several times to move cursor under "ReturnType", depending on how many parameters are there. Next, I still have to press "w" 3 times to eventually move cursor from "ReturnType", to "FunctionName".

As you can see, this is a little painful here. I've tried easy motion approach with VSCode VIM extension, this makes my life a little easier, but I'm looking for a even better one.

Any VIM trick or VSCode extension can do this decently? Any help will be appreciated, thanks!

fiddle
  • 25
  • 5

1 Answers1

2

To avoid having to press k a variable number of times it's possible to make use of the fact that the ) is right on the line above, and use % to go to the matching (. The complete key sequence is [[b%b.

However the first b will go to the ( if there's nothing between the parentheses. [[ge%b can be used instead.

If there's something between ) and { (such as a const qualifier) [[?)<cr>%b would work (this solution is complex and perhaps only useful in a key binding?)

[[?(<cr>b works too as long as there's no parameter that contains an open parentheses (such as in FunctionName(int (*function_pointer)(int, int)) { ... })

user202729
  • 3,358
  • 3
  • 25
  • 36
  • (Depends on the particular plugin, it might also be possible to view the list of callers without moving the pointer.) – user202729 Feb 17 '21 at 05:44