根据当前文件的名称在 vim 中打开另一个文件

根据当前文件的名称在 vim 中打开另一个文件

使用 Go 时,我希望能够打开我正在处理的每个 .go 文件的相应测试文件,反之亦然。所遵循的格式对应foo.gofoo_test.go。我可以假设,如果它存在,它将始终位于同一文件夹中。我不在乎它是在缓冲区、选项卡中打开,还是在当前缓冲区中打开,我只想按下一个按钮并能够在两者之间切换。我该怎么做?

答案1

有一些插件可以在 C/C++.c.h文件之间切换;有些插件可能可配置以处理您的用例。但是,这样的映射(或命令)可以轻松定义,例如<Leader>a

:nnoremap <expr> <Leader>a ':edit ' . (expand('%:t:r') =~? '_test$' ? expand('%:s?_test??') : expand('%:r') . '_test.' . expand('%:e')) . '<CR>'

这用于:help filename-modifiers提取、比较和组装:edit命令。

以上内容可在 中全局使用~/.vimrc;如果您只想将其用于 Go 文件,请使用:nnoremap <buffer> <expr> ... 然后在 前面添加:autocmd Filetype go,并将其放入 中~/.vimrc,或者,由于在您添加映射和其他设置(用于各种文件类型)时会变得笨重,因此将命令放入 中~/.vim/ftplugin/go_mappings.vim。(这要求您有:filetype plugin on。)

答案2

对于该问题的直接解决方案,请考虑使用我的 Go 运行时文件分叉:https://github.com/AndrewRadev/vim-golang

它定义了:A命令系列(相关定义是这里,文件名修改为这里)。

它基本上是 Ingo Karkat 的答案,不过打包在一个插件中,因此阅读:help filename-modifiers并遵循他的建议绝对是一个好方法。

答案3

我可以推荐这个插件vim-twitch来解决这个问题。

相关内容