使用 vim gf 命令和 "@" webpack 别名



我经常使用Vuejs和Webpack@"用于文件分辨率的字符,如

import MyComponent from "@/components/MyComponent.vue";

但是,我不能使用vimgf命令移动到此文件。

E447: Can't find file "/components/MyComponent.vue" in path

我花了几个小时在谷歌上搜索,摆弄vim路径和includeexpr。我还尝试了一些插件,比如vim-nprvim-gotofile

有人遇到过同样的问题并找到了解决方案吗?

编辑

到目前为止,我想到的最好的东西是:

:set inex=substitute(v:fname,'^\@/','src/','')

在另一个stackoverflow线程中发现了它,在那里他们使用了~字符。但是它不适用于@。尝试gf时出现此错误

E869: (NFA) Unknown operator '@/'

我的解决方案

在@romainl的帮助下,我现在在after/ftplugin/vue.vimafter/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()中的模式不匹配,我们最终得到:

结果[/tr>/foo/bar.vue未找到
实际字符串v:fnameincludeexpr
@/foo/bar.vue/foo/bar.vue

最新更新