如何阻止VIM的phpcomplete.vim插件补全node_modules中的命名空间?
我之前也碰到过这个糟心的问题——node_modules里一堆杂七杂八的内容混进PHP命名空间补全里,简直影响开发效率。结合你用的VIM 7.4和exuberant-ctags 5.9,给你两个核心方向的解决方案,从根源上掐断这个问题:
1. 让ctags彻底跳过node_modules目录
phpcomplete.vim的补全很大程度依赖ctags生成的标签文件,如果ctags先把node_modules扫进标签里,插件肯定会读到这些内容。所以先从生成标签的环节入手:
单次生成标签的临时方案:生成标签时直接带上排除参数,执行这条命令:
ctags -R --exclude=node_modules .
这里-R是递归扫描当前项目目录,--exclude=node_modules会直接跳过整个node_modules文件夹。如果还有其他不需要扫描的目录(比如某些第三方vendor库),可以用逗号分隔添加多个排除规则,比如--exclude=node_modules --exclude=vendor/unwanted-lib。永久生效的全局配置:把排除规则写到ctags的全局配置文件里,以后每次生成标签都自动生效。
在你的用户目录下创建或编辑.ctags文件(Linux/macOS是~/.ctags,Windows则是%USERPROFILE%\_ctags),添加以下内容:--recurse=yes --exclude=node_modules --exclude=*.js --exclude=*.json这样不仅跳过node_modules,还能排除掉JS和JSON文件(毕竟我们只需要PHP相关的标签),标签文件会更干净,补全速度也能提一点。
2. 配置phpcomplete.vim直接忽略node_modules
除了ctags层面,给插件本身加个过滤规则,双保险更稳妥:
在你的.vimrc(或者.vim/vimrc)里添加一行配置:let g:phpcomplete_ignored_dirs = ['node_modules']
如果还有其他需要忽略的目录,也可以一起加到数组里,比如['node_modules', 'vendor/old-lib']。这样插件在扫描文件生成补全候选时,会直接跳过这些目录。
最后别忘了验证
先删掉项目里旧的tags文件(如果有的话),然后用新的ctags命令重新生成标签,再打开PHP文件测试命名空间补全——你会发现node_modules里的内容再也不会乱入了。
内容的提问来源于stack exchange,提问作者fabio

