我經常使用帶有“@”字符的 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/','')
謝謝您的幫助!
uj5u.com熱心網友回復:
在鏈接的問題中,~被轉義是因為~對 Vim 的正則運算式引擎具有特殊含義:“匹配最后一個給定的替代字串”。
但@在任何方面都不是特別的,所以沒有必要逃避它:
setlocal includeexpr=substitute(v:fname,'^@\/','src/','')
正如您所注意到的,還有另一個問題。Vim 用于:help 'isfname'定義v:fname但選項的值@默認不包含該字符,因此它被排除在v:fname. 由于沒有@in v:fname,模式 insubstitute()不匹配,我們最終得到:
| 實際字串 | v:fname |
后 includeexpr |
結果 |
|---|---|---|---|
@/foo/bar.vue |
/foo/bar.vue |
/foo/bar.vue |
未找到 |
解決方案是添加@到isfname:
setlocal isfname =@-@
這給了我們:
| 實際字串 | v:fname |
后 includeexpr |
結果 |
|---|---|---|---|
@/foo/bar.vue |
@/foo/bar.vue |
src/foo/bar.vue |
成立 |
經測驗可與$ vim -Nu NONE file.js.
現在,上面的設定是特定于檔案型別的,最好將它們放在 ftplugin 中。假設filetype你的緩沖區是javascript,一個合適的位置是:
" on Unix-like systems
~/.vim/after/ftplugin/javascript.vim
" on Windows
%USERPROFILE%\vimfiles\after\ftplugin\javascript.vim
天啊。
請注意,在鏈接問題的答案中,^\\~不正確并拋出錯誤E874。正確的模式是^\~。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/403394.html
標籤:
