" 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:更好的模式(版本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>
8条答案
按热度按时间m528fe3b1#
[米
转到方法的上一个起始位置[count]
适用于Java或类似的结构化语言,也适用于Python。
zaqlnxep2#
C语言
如果您的C代码是非埃及语样式:
[m
仅在函数周围有一个封闭的{}
时有效,例如,Java / C++的class { method(){} }
。这是一个适用于埃及语和非埃及语括号的好方法:
示例:
vsdwdz233#
对于包含在一对大括号{}中的函数:
跳到开头:
[{
跳到结尾:
]}
个对于使用圆括号或方括号的函数,请用圆括号或方括号替换这些圆括号。
xmd2e60i4#
我花了几个小时才做出这个图案:
/^\s*\(\i\+\_[ \t\*]\+\)\+\i\+\_s*(\_[^)]*)\_s*{
,这对我很有效。EDIT:更好的模式(版本2):一个月一个月
请在此处查看效果:
您可以在.vimrc中Map一些方便绑定,例如:
EDIT:更好的模式(版本2):
bt1cpqcv5#
2022年,treesitter值得你关注。
内置的
[m
使用词法规则,总是跳到上一个{
位置或最外面的{
位置。相比之下,treesitter利用了语法信息,因此它可以跳转到更精确的位置,并且没有如下所述的限制:
以上两个命令假设档案包含具有方法的类别。类别定义是以'{'和'}'括住。类别中的每个方法也是以'{'和'}'括住。这适用于Java语言。档案看起来像这样:〉
如果您想了解更多信息,请查看https://github.com/nvim-treesitter/nvim-treesitter-textobjects
wtzytmuj6#
顺便说一句,能够做到这一点的唯一相对可靠的方法是修改vim,请参见this post
[编辑]
而且这只适用于由丰富的ctags支持的语言。由于我们还没有被设计成适合知道你希望用哪种语言来做这件事,所以这个答案也可能不正确。
[编辑]
xxls0lw87#
一旦你在代码块和段落之间移动,你可能会想看看当你在这些块中间时,你可以做些什么,通过查看Vim文档的这一部分。
例如删除块、在块前插入、在块后追加等。
高温
kfgdxczn8#
(向后)搜索
?^{
通常可以找到它。