35

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; }

}
4

4 回答 4

72

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

我编写了处理Vim 函数VBScript批处理文件等的自定义版本。这些都由我的CountJump 插件提供支持,该插件可用于编写基于正则表达式的自定义跳转函数。

于 2012-08-26T09:01:48.333 回答
10

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

编辑:更好的模式(版本 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>
于 2018-05-30T07:35:22.017 回答
4

看起来像一个副本:Vim [m motion with c#

例如,您可以尝试这个肮脏的把戏:9]}. 它只是从当前位置跳到第 9 个}(如果你不是太嵌套,应该可以工作......)

于 2012-08-26T09:13:01.860 回答
0

如果您使用 taglist,我添加了一个功能。如果 taglist 支持该语言,您可以使用 Ctrl-up 和 Ctrl-down 从一个标签跳转到另一个标签。

这里:https ://github.com/man9ourah/taglist

这给你的.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
于 2020-06-20T00:04:20.680 回答