vim - VIM:如何获取当前函数名
问题描述
在我的 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中自动填写函数名吗?
解决方案
作为文本编辑器,Vim 对底层源代码的结构了解有限。
当前方法名称的潜在来源可能是:
或者,您可以尝试通过模式提取来解析函数名称(正如@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
像映射一样,它仍然会节省大量的输入。您可以拉出函数名称以将其粘贴,或者如果光标当前位于其顶部,只需通过 将其插入:Phpunit
命令行<C-R><C-W>
。
作为下一步,您可以:Phpunit
处理零参数,然后删除--filter
参数,因此您的映射将变为:nnoremap <Leader>pt :Phpunit<CR>
推荐阅读
- java - 如何为另一个数组列表复制 Collection.sort
- xcode - Xcode 11 Beta 4 存档错误
- javascript - 关于安装 New React App 的问题
- c# - 如何在 Unity 中使 UI 元素仅在 Y 轴上可拖动?
- bash - 如何使用 bash 将我的 shell 模块命令转换为我自己的模块?
- node.js - 如何使用 npm 包“Instagram-private-api”获取 Instagram 中用户的照片?
- elasticsearch - Elasticsearch 术语聚合和查询
- spring-boot - 实现 HandlerInterceptor 时避免记录 Swagger Endpoints?
- c# - 如何在c#wpf中检查元素是否离开其父级
- woocommerce - 在woocommerce中获取应用于产品的优惠券代码