Vim 使用 Ctags 更高效地解析成员函数的插件
Vim Plugin to Resolve a Member Function More Efficiently Using Ctags
假设我有 N class' 定义为:
1 class Bar0
2 {
3 public:
4 void func();
5 };
6
7 void Bar0::func()
8 {}
9
10 class Bar1
11 {
12 public:
13 void func()
14 };
15
16 void Bar1::func()
17 {}
假设我正在使用 ctags,我的标签文件已排序,我将它与 vim 一起使用。当我将光标放在第 13 行的 func
上并按下 Ctrl+] 时。 will/could 将我带到第 7 行 Bar0
的成员函数 func
的定义,因为它的字典顺序在 Bar1
之前。为了解决这个问题,我可以使用 g+] ,这将打开一个单独的缓冲区,我可以在其中搜索我想要的缓冲区。但是,假设 func
是一个大约 20 classes 的虚拟成员函数。那时我还可以使用 Ctrl+] 和 :tp
和 :tn
来随机播放所有 20 个。因此,我的问题。有没有我可以添加到我的 .vimrc 的插件或代码,这样我就可以将它与 ctags 结合使用,以根据其 class 的范围比线性搜索更快地解析成员函数所有可能的选择?我想远离 OmniCppComplete.
这样的插件
在 lh-tags 中,我将 ctags 结果包装起来以显示它们、在其中搜索(使用 /
)、过滤它们等。
不幸的是,我只使用不理解 C++ 的 ctags:它无法知道调用站点指的是哪个重载。
这就是 vim-clang and clang-indexer 的用武之地。我已经很久没有花时间在他们身上了。我什至不确定 clang-indexer 是否仍然使用最新版本的 clang 进行编译。这个想法是建立一个代码数据库,并从当前代码中提取真实的上下文,以便正确识别重载等。我上次使用时,有时很难识别当前上下文。
请注意 YouCompleteMe 应该能够跳转到函数声明,并且在最好的情况下跳转到函数定义,即与当前文件位于同一翻译单元中。
假设我有 N class' 定义为:
1 class Bar0
2 {
3 public:
4 void func();
5 };
6
7 void Bar0::func()
8 {}
9
10 class Bar1
11 {
12 public:
13 void func()
14 };
15
16 void Bar1::func()
17 {}
假设我正在使用 ctags,我的标签文件已排序,我将它与 vim 一起使用。当我将光标放在第 13 行的 func
上并按下 Ctrl+] 时。 will/could 将我带到第 7 行 Bar0
的成员函数 func
的定义,因为它的字典顺序在 Bar1
之前。为了解决这个问题,我可以使用 g+] ,这将打开一个单独的缓冲区,我可以在其中搜索我想要的缓冲区。但是,假设 func
是一个大约 20 classes 的虚拟成员函数。那时我还可以使用 Ctrl+] 和 :tp
和 :tn
来随机播放所有 20 个。因此,我的问题。有没有我可以添加到我的 .vimrc 的插件或代码,这样我就可以将它与 ctags 结合使用,以根据其 class 的范围比线性搜索更快地解析成员函数所有可能的选择?我想远离 OmniCppComplete.
在 lh-tags 中,我将 ctags 结果包装起来以显示它们、在其中搜索(使用 /
)、过滤它们等。
不幸的是,我只使用不理解 C++ 的 ctags:它无法知道调用站点指的是哪个重载。
这就是 vim-clang and clang-indexer 的用武之地。我已经很久没有花时间在他们身上了。我什至不确定 clang-indexer 是否仍然使用最新版本的 clang 进行编译。这个想法是建立一个代码数据库,并从当前代码中提取真实的上下文,以便正确识别重载等。我上次使用时,有时很难识别当前上下文。
请注意 YouCompleteMe 应该能够跳转到函数声明,并且在最好的情况下跳转到函数定义,即与当前文件位于同一翻译单元中。