How to jump to the beginning of the current function body in Vim?

Vim

Vim Problem Overview


As title, if I'm in the middle of function body and the function body is very long, how can I jump back to the beginning of the function body .

Vim Solutions


Solution 1 - Vim

[m

> Go to [count] previous start of a method

Works for Java or similar structured languages, and for Python as well.

Solution 2 - Vim

C language [[

If your C code is in the non-Egyptian style:

[[

[m only works if you have an enclosing {} around the function, e.g. class { method(){} } for Java / C++.

And this is a good bet that works for both Egyptian and non-Egyptian braces:

?^[^ \t#]

Examples:

void egypt() {
#define DONTCARE 1
    int indented code = 1;
}

void tpyge()
{
#define DONTCARE 1
    int indented code = 1
} 

Solution 3 - Vim

For functions contained in a pair of curly-braces {}:

Jump to beginning: [{

Jump to end: ]}

Replace the curly-blackets by parens or square-brackets for functions that use those.

Solution 4 - Vim

I spent hours to make this pattern: /^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{, it works good for me.

EDIT: a better pattern(version 2): /\(\(if\|for\|while\|switch\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{

see the effect here: enter image description here

you can map some convenient bindings in your .vimrc, such as:

" jump to the previous function
nnoremap <silent> [f :call search('^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{', "bw")<CR>
" jump to the next function
nnoremap <silent> ]f :call search('^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{', "w")<CR>

EDIT: a better pattern(version 2):

" jump to the previous function
nnoremap <silent> [f :call
\ search('\(\(if\\|for\\|while\\|switch\\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{', "bw")<CR>
" jump to the next function
nnoremap <silent> ]f :call
\ search('\(\(if\\|for\\|while\\|switch\\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{', "w")<CR>

Solution 5 - Vim

BTW, the only relatively sure way to be able to do this is to modify vim, see this post

[edit]
and this only works with languages supported by exuberant ctags. Since we've not been deigned fit to know which language you wish to do this in, it's possible that this answer will not be correct either.
[/edit]

Solution 6 - Vim

Once you've got moving around blocks and paragraphs in code sorted you might like to look at what you can do when you're in the middle of those blocks by looking at this part of the vim doc's.

Things like delete the block, insert before the block, append after the block, etc.

HTH

Solution 7 - Vim

Searching (backwards) for ?^{ should normally get you there.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHaiyuan ZhangView Question on Stackoverflow
Solution 1 - Vimax.View Answer on Stackoverflow
Solution 2 - VimCiro Santilli Путлер Капут 六四事View Answer on Stackoverflow
Solution 3 - VimGeremiaView Answer on Stackoverflow
Solution 4 - VimZHOU LingView Answer on Stackoverflow
Solution 5 - VimKevinDTimmView Answer on Stackoverflow
Solution 6 - VimRob WellsView Answer on Stackoverflow
Solution 7 - VimhlovdalView Answer on Stackoverflow