I want to be able to navigate the cursor across functions using Vim. Mainly, I want a mand to allow me to go to the next function, like }
allows me to go to the next paragraph. I found this:
Go to the end of the C++ function in Vim
Unfortunately, it doesn't seem to work fine in JavaScript. Also, I believe it would also not work for Python, as Python don't depend much on { and }.
Any help?
I want to be able to navigate the cursor across functions using Vim. Mainly, I want a mand to allow me to go to the next function, like }
allows me to go to the next paragraph. I found this:
Go to the end of the C++ function in Vim
Unfortunately, it doesn't seem to work fine in JavaScript. Also, I believe it would also not work for Python, as Python don't depend much on { and }.
Any help?
Share Improve this question edited May 23, 2017 at 12:26 CommunityBot 11 silver badge asked Jan 24, 2011 at 9:31 RafidRafid 20.4k24 gold badges79 silver badges111 bronze badges 2-
2
/^def
will take you to the next top level function – John La Rooy Commented Jan 24, 2011 at 9:38 - This is only useful in Python, I am also looking for JavaScript and languages with similar syntax. Besides that, it is easier to press few keys, then to have to make a search every time, but it is good, thanks. – Rafid Commented Jan 24, 2011 at 9:55
2 Answers
Reset to default 8In a Python file I find:
}
will take me to the end of a block,]]
will take me to the start of the next function.[[
takes me to the start of the current function, or the one above if I keep pressing.
]}
didn't seem to work though.
I believe the standard vim motions will work for you in javascript. I think the $VIMRUNTIME/ftplugin/javascript.vim file defines function/Class/etc boundaries.
See :h ]m
:
*]m*
]m Go to [count] next start of a method (for Java or
similar structured language). When not before the
start of a method, jump to the start or end of the
class. When no '{' is found after the cursor, this is
an error. |exclusive| motion.
*]M*
]M Go to [count] next end of a method (for Java or
similar structured language). When not before the end
of a method, jump to the start or end of the class.
When no '}' is found after the cursor, this is an
error. |exclusive| motion.
*[m*
[m Go to [count] previous start of a method (for Java or
similar structured language). When not after the
start of a method, jump to the start or end of the
class. When no '{' is found before the cursor this is
an error. |exclusive| motion.
*[M*
[M Go to [count] previous end of a method (for Java or
similar structured language). When not after the
end of a method, jump to the start or end of the
class. When no '}' is found before the cursor this is
an error. |exclusive| motion.
More precise JS movements from this: https://github./okpute/vim-javascript-motions
For python, see $VIMRUNTIME/ftplugin/python.vim:
execute "nnoremap <silent> <buffer> ]] :call <SID>Python_jump('n', '". b:next_toplevel."', 'W', v:count1)<cr>"
execute "nnoremap <silent> <buffer> [[ :call <SID>Python_jump('n', '". b:prev_toplevel."', 'Wb', v:count1)<cr>"
execute "nnoremap <silent> <buffer> ][ :call <SID>Python_jump('n', '". b:next_endtoplevel."', 'W', v:count1, 0)<cr>"
execute "nnoremap <silent> <buffer> [] :call <SID>Python_jump('n', '". b:prev_endtoplevel."', 'Wb', v:count1, 0)<cr>"
execute "nnoremap <silent> <buffer> ]m :call <SID>Python_jump('n', '". b:next."', 'W', v:count1)<cr>"
execute "nnoremap <silent> <buffer> [m :call <SID>Python_jump('n', '". b:prev."', 'Wb', v:count1)<cr>"
execute "nnoremap <silent> <buffer> ]M :call <SID>Python_jump('n', '". b:next_end."', 'W', v:count1, 0)<cr>"
execute "nnoremap <silent> <buffer> [M :call <SID>Python_jump('n', '". b:prev_end."', 'Wb', v:count1, 0)<cr>"