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