我经常使用Vuejs和Webpack@"用于文件分辨率的字符,如
import MyComponent from "@/components/MyComponent.vue";
但是,我不能使用vimgf
命令移动到此文件。
E447: Can't find file "/components/MyComponent.vue" in path
我花了几个小时在谷歌上搜索,摆弄vim路径和includeexpr
。我还尝试了一些插件,比如vim-npr
或vim-gotofile
。
有人遇到过同样的问题并找到了解决方案吗?
编辑
到目前为止,我想到的最好的东西是:
:set inex=substitute(v:fname,'^\@/','src/','')
在另一个stackoverflow线程中发现了它,在那里他们使用了~
字符。但是它不适用于@
。尝试gf
时出现此错误
E869: (NFA) Unknown operator '@/'
我的解决方案
在@romainl的帮助下,我现在在after/ftplugin/vue.vim
和after/ftplugin/javascript.vim
中都设置了这个
setlocal isfname+=@-@
setlocal includeexpr=substitute(v:fname,'^@/','src/','')
谢谢你的帮助!
在链接的问题中,~
被转义,因为~
对Vim的regexp引擎有特殊的含义:"匹配最后给定的替换字符串";。
但是@
在任何方面都不是特别的,所以没有必要逃避它:
setlocal includeexpr=substitute(v:fname,'^@/','src/','')
正如你所注意到的,还有另一个问题。Vim使用:help 'isfname'
来定义v:fname
,但默认情况下选项的值不包含@
字符,因此它被排除在v:fname
之外。由于v:fname
中没有@
,因此substitute()
中的模式不匹配,我们最终得到:
实际字符串 | v:fname | includeexpr | 结果[/tr>
---|---|---|
@/foo/bar.vue | /foo/bar.vue |