c++ - 如何使用 :tag command in vim to toggle between . hpp 和相应的 .cpp?

标签 c++ vim

背景

我在我的 .vimrc 中获得了以下硬编码命令以正常工作:

nmap ,a :tag Foo.cpp<CR>

因此,如果我点击 ,a,vim 将查看 ctags 缓存并从标签文件指定的位置打开文件 Foo.cpp

问题

我如何修改此命令,以便当我查看 Bar.hpp 时,它会查找 Bar.cpp,如果我查看 Bar.cpp,它会查找Bar.hpp?

据我所知,有很多方法可以给这只猫蒙皮,但我更愿意以某种方式使用 :tag 命令,因为它快速 而且我已经在生成标签无论如何都要归档。

最佳答案

这似乎适用于我的简单案例:

function! OtherName()
        if expand('%:e') == "cpp"
                return substitute( expand('%:t'), "cpp", "hpp", "" )
        elseif expand('%:e') == "hpp"
                return substitute( expand('%:t'), "hpp", "cpp", "" )
        endif
endfunction
nmap ,a :execute "tag" OtherName()<CR>

如果 hpp 或 cpp 实际出现在文件名中,可能会有些丑陋——也许我需要使用正则表达式来加强替代。此外,如果我们在非 cpp 或 hpp 文件中,事情可能会变得很糟糕。

也许有更多有经验的 vimscripter 可以提高这段代码的健壮性。

关于c++ - 如何使用 :tag command in vim to toggle between . hpp 和相应的 .cpp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764610/

相关文章:

c++ - 无法在程序中指定文件路径前缀

c++ - 默认构造函数 C++

c++ - 将 Vim 设置为基本的 C++ 编辑器

Vim 函数检查文件中是否存在文本

C++速度比较迭代器与索引

c++ - 如何存储英语词典?

c++ - 确定动态库是否存在的多平台方法

regex - 如何使用 Neovim 正则表达式进行单独选择(两个字符不连续)?

Vim 标签列表 : How to jump to a tag definition from within an open source file

VIM:如何获取当前窗口大小,以便我可以将 NEEDTree 设置为 1/3 窗口大小?