我用ctags索引了我的c ++代码库,我可以按如下方式打开一个头文件:
:tag myfile.h
(myfile.h所在的位置并不重要,只要它在索引代码库中,它将在vim中正确打开)
当我编辑c ++文件时,我可以按如下方式获取标题文件名:
:e%<.h
e.g。编辑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
这显然不是正确的做法,我有点迷失在这里,所以我希望有人可以提供一些帮助。
答案 0 :(得分:3)
有几个插件已经这样做了(不需要ctags数据库BTW)。
例如,使用 alternate (又名a.vim),您只需从头文件或源文件中键入:VS
即可在垂直分割窗口中打开另一个
请注意, alternate 可以选择告诉在哪里找到另一个文件(同一目录,目录名称上的substitute
,...)
否则,我怀疑您正在寻找expand()
和:exe
。如果你写一个函数,它可能是
function! s:whatever() abort
let crt = expand('%:t:r')
vnew
exe 'tag '.crt.'.h'
endfunction
command! whatever call s:whatever()