【发布时间】:2011-01-07 17:54:33
【问题描述】:
如题,如果我在函数体中间,而且函数体很长,如何跳回函数体的开头。
【问题讨论】:
标签: vim
如题,如果我在函数体中间,而且函数体很长,如何跳回函数体的开头。
【问题讨论】:
标签: vim
搜索(向后)?^{ 通常应该可以到达那里。
【讨论】:
{} 块内时。
【讨论】:
class {})。 :-( 方法特定问题:stackoverflow.com/questions/12128678/…
[m[{ 的开头,然后你可以将它映射到 [f 之类的东西。
顺便说一句,能够做到这一点的唯一相对确定的方法是修改vim,见this post
[编辑]
这仅适用于由 exuberant ctags 支持的语言。由于我们不适合知道您希望使用哪种语言进行此操作,因此该答案也可能不正确。
[/编辑]
【讨论】:
【讨论】:
C语言[[
如果你的 C 代码是非埃及风格的:
[[
[m 仅在函数周围有一个封闭的{} 时才有效,例如class { method(){} } 用于 Java / C++。
这是一个很好的选择,适用于埃及和非埃及牙套:
?^[^ \t#]
例子:
void egypt() {
#define DONTCARE 1
int indented code = 1;
}
void tpyge()
{
#define DONTCARE 1
int indented code = 1
}
【讨论】:
[{ 可能也有帮助。
-u NONE, ]m 在右大括号处停止。如果函数内部有大括号,情况会变得更糟,例如if {}.
[z / ]z 可能会起作用。
我花了几个小时来制作这个图案:/^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{,它对我很有用。
EDIT:更好的模式(版本 2):/\(\(if\|for\|while\|switch\|catch\)\_s*\)\@64<!(\_[^)]*)\_[^;{}()]*\zs{
你可以在你的.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>
【讨论】:
对于包含在一对花括号 {} 中的函数:
跳转到开头:[{
跳到结尾:]}
用括号或方括号替换使用它们的函数。
【讨论】: