如何在Vim中跳转到当前函数体的开头?

时间:2010-01-21 13:30:29

标签: vim

作为标题,如果我在函数体的中间并且函数体很长,我怎样才能跳回到函数体的开头。

6 个答案:

答案 0 :(得分:52)

[m

  

转到[count]上一次开始的方法

适用于Java或类似的结构化语言,也适用于Python。

答案 1 :(得分:5)

对于包含在一对大括号{}中的函数:

跳转到开头:[{

跳转到结束:]}

对于使用大括号的函数,用括号或方括号替换大括号。

答案 2 :(得分:1)

BTW,能够做到这一点的唯一相对肯定的方法是修改vim,参见this post

[编辑]
这只适用于充满活力的ctags支持的语言。既然我们还没有适合知道您希望使用哪种语言,那么这个答案可能也不正确。
[/编辑]

答案 3 :(得分:1)

我花了好几个小时来制作这种模式: /^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{ ,它对我有用。

编辑:更好的模式(版本2): /\(\(if\|for\|while\|switch\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{

在此处查看效果: enter image description here

您可以在.vimrc中映射一些方便的绑定,例如:

" 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>

编辑:更好的模式(版本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>

答案 4 :(得分:0)

一旦你在代码排序中移动了块和段落,你可能希望通过查看vim doc的this part来查看当你处于这些块中间时可以做什么。 / p>

删除块,在块之前插入,在块之后追加等等。

HTH

答案 5 :(得分:-1)

搜索(向后)?^{通常应该让你到那儿。