VIM 三个命令组合垂直拆分打开c++头文件

VIM open c++ header file in vertical split by combining three commands

我已经用ctags索引了我的c++代码库,我可以打开一个头文件如下:

:tag myfile.h

(myfile.h 位于何处并不重要,只要它在索引代码库内,它就会在 vim 中正确打开)

在编辑c++文件时,可以得到头文件名如下:

:e%<.h

例如编辑myfile.cpp时,执行此命令会在命令行显示myfile.h。

可以垂直拆分打开文件,方法是:

:vs <myfile>

现在我想要完成的是拥有 1 个命令或函数,我可以使用它打开我当前正在垂直拆分中编辑的相应 c++ 文件的头文件。因此基本上我想结合上面的 3 个命令,就好像我在做一个 Unix 管道,例如:

:vs tag | e%<.h

" :vs     to open file in vertical split
" :tag    to find tag
" :e%<.h  to get header filename

显然 Unix 管道在 vim 上不起作用,或者我尝试编写一个函数,在该函数中我将命令的结果分配给变量,例如

headerFileName = :e%<.h

这显然不是正确的做法,我在这里有点迷路,所以我希望有人能提供一些帮助。

有几个插件已经可以做到这一点(顺便说一句,不需要 ctags 数据库)。

例如,使用 alternate(又名 a.vim),您只需从头文件或源文件中键入 :VS 即可打开另一个垂直拆分 window.

请注意 alternate 有一个选项可以告诉在哪里可以找到其他文件(同一目录,substitute 目录名称,...)

否则我怀疑你在找expand():exe。如果你写一个函数它可能是

function! s:whatever() abort
    let crt = expand('%:t:r')
    vnew
    exe 'tag '.crt.'.h'
endfunction
command! whatever call s:whatever()