VIM:如何获取当前函数名称

时间:2019-11-02 10:21:24

标签: vim vi

在我的vim配置中,我映射了,pt来运行phpunit测试。

map <leader>pt :!clear && vendor/bin/phpunit % --testdox<cr>

但是有时候我想通过使用phpunit --filter

来运行特定的测试
map <leader>pt :!clear && vendor/bin/phpunit --filter {FUNCTION_NAME_HERE} % --testdox<cr>

反正我们可以在vim中自动填写函数名称吗?

1 个答案:

答案 0 :(得分:1)

作为文本编辑器,Vim对底层源代码的结构只有有限的了解。

当前方法名称的潜在来源可能是:

  • 跳转到方法的上一个起点::help [m
  • 语法突出显示
  • tags数据库; taglisttagbar之类的插件会自动突出显示当前定义

或者,您可以尝试通过模式提取来解析函数名称(如@Matt在注释中建议的;通过类似matchstr(getline(search('function', 'bcnW')), 'function\s\+\zs\w\+')的东西)-但这仅限于当前语言且难以正确获取100%的时间。

总而言之,这并不简单,需要高级Vimscript才能正确完成。

替代

我会选择80%的自定义:command来传递函数名,而不是完全自动化的映射:

command -nargs=1 Phpunit !clear && vendor/bin/phpunit --filter <args> % --testdox

与映射一样,它仍将节省大量键入。您可以粘贴函数名称以将其粘贴到其中,或者如果光标当前位于其上方,只需通过<C-R><C-W>将其插入:Phpunit命令行中。 / p>

下一步,可以使:Phpunit处理零个参数,然后删除--filter参数,这样您的映射将变为:nnoremap <Leader>pt :Phpunit<CR>