Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vim:转到下一个方法的开始/结束_Java_C++_Vim_Methods - Fatal编程技术网

Java Vim:转到下一个方法的开始/结束

Java Vim:转到下一个方法的开始/结束,java,c++,vim,methods,Java,C++,Vim,Methods,Vim中是否有允许将光标移动到下一个方法开始/结束的本机功能?我已经知道了[[,],[]和][< /代码>,但这些并不能切断工作,因为它们只在列零的括号上工作。因此,它们在导航C++代码方面没有什么用处。是否有这样一个命令已经内置到VIM中?如果不是,你会推荐一个实现它的插件吗? 谢谢你的帮助 编辑:[{和}]不会一直工作,因为你必须在{}的块中(而不是在该块中的某个更深的范围中),然后才能在右侧{或}结束 编辑2:这里有一个[m和朋友不起作用的代码列表 namespace foo { #de

Vim中是否有允许将光标移动到下一个方法开始/结束的本机功能?我已经知道了
[[
]
[]
][< /代码>,但这些并不能切断工作,因为它们只在列零的括号上工作。因此,它们在导航C++代码方面没有什么用处。是否有这样一个命令已经内置到VIM中?如果不是,你会推荐一个实现它的插件吗?
谢谢你的帮助

编辑:
[{
}]
不会一直工作,因为你必须在
{}
的块中(而不是在该块中的某个更深的范围中),然后才能在右侧
{
}
结束

编辑2:这里有一个
[m
和朋友不起作用的代码列表

namespace foo {

#define define_foo         \
    template <class T>     \
    struct foo_traits<X>   \
    {                      \
        using foo = X;     \
    };

template <class T>
struct foo_traits;

define_bar(T*, T*, T*);

template <class T>
struct baz;

template <class T>
struct baz<T&>
{
    static T* apply(T& t) { return &t; }
};

template <class T>
inline T a(T t) { return t; }

}
名称空间foo{
#定义_foo\
模板\
结构foo_特征\
{                      \
使用foo=X\
};
模板
结构特征;
定义_条(T*,T*,T*);
模板
结构baz;
模板
结构baz
{
静态T*apply(T&T){return&T;}
};
模板
内联ta(tt){返回T;}
}

Vim内置了
[m
/
]m
“用于Java或类似结构化语言”


我已经编写了处理和等的自定义版本。这些版本都由my提供支持,可用于编写基于正则表达式的自定义跳转函数。

看起来像是以下内容的副本:

例如,你可以试试这个肮脏的把戏:
9]}

从当前位置跳到第9个
}
(如果你不是太嵌套,应该可以工作…

我花了几个小时来制作这个模式:
/^\s*(\I\+\\\\\\\\\\\\\\\[\t\*]\+\I\\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

编辑:一种更好的模式(第二版):
/\(\(如果为而切换为捕捉)\\u s*\)\@64

在此处查看效果:

您可以在.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>
“跳转到上一个函数
nnoremap[f:调用搜索('^\s*\(\i\+\\\\\\[\t\*]\+\\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
“跳转到下一个函数
nnoremap]f:调用搜索('^\s*\(\i\+\\\\\\[\t\*]\+\\\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
编辑:更好的模式(第2版):

“跳转到上一个函数
nnoremap[f:调用

\搜索(“\”(\(如果\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

在这里:

并将其发送到您的
.vimrc

nmap <silent> <c-up> <plug>(TlistJumpTagUp)     " Map ctrl-up to move one tag up
nmap <silent> <c-down> <plug>(TlistJumpTagDown) " Map ctrl-down to move one tag down
nmap(TlistJumpTagUp)”将ctrl键映射到up以向上移动一个标记
nmap(TlistJumpTagDown)“按ctrl键向下映射以向下移动一个标记

@PeterLawrey知道这一点非常有帮助…@我应该提到的是,这些也不会一直都有效,因为你必须在
{}
@PeterLawrey的范围内。如果这是真的,许多(我敢说大多数)使用Vim的人将不再使用Vim=)那么
]m
]M
[M
]M: <代码> >我不熟悉C++,但我已经使用了Eclipse。它有一个VIM插件,它应该给你很多功能。我发现IDE需要导航的很多东西都消失了。例如,在java中,如果使用一个类、一个字段或一个未被导入/定义的方法,它将在代码中添加它而不必滚动到如果你想在包之间移动一个类,你可以拖放所有的引用(甚至注释、XML和文本文件引用),可以改变。<代码> +>代码>跳转到某个声明。我认为支持C++会需要比正则表达式更强大的功能,因为即使<代码>[M</代码>,<代码> > M> <代码> [M< /Calp>,<代码> > M>代码>不适用于我的C++代码。如果你在100%的解决方案之后,你需要一个完整的C++解析器;但是通常,一个“大部分正确的”解决方案通常可以用ReXEPS;C.VIM的语法高亮实现。
nmap <silent> <c-up> <plug>(TlistJumpTagUp)     " Map ctrl-up to move one tag up
nmap <silent> <c-down> <plug>(TlistJumpTagDown) " Map ctrl-down to move one tag down