Usualmente uso Vuejs y Webpack con el carácter "@" para la resolución de archivos, así
import MyComponent from "@/components/MyComponent.vue"; Sin embargo, no puedo usar el comando vim gf para moverme a este archivo.
E447: Can't find file "/components/MyComponent.vue" in path
Pasé un par de horas buscando en Google, jugando con la ruta vim e includeexpr . También probé un par de complementos, como vim-npr o vim-gotofile .
¿Alguien se ha encontrado con el mismo problema y ha encontrado una solución?
editar
Lo mejor que se me ocurrió hasta ahora es esto:
:set inex=substitute(v:fname,'^\\@\/','src/','')
lo encontré en otro hilo de stackoverflow donde estaban usando el carácter ~ para esto. Sin embargo, no funciona con @ . Me sale este error al intentar gf
E869: (NFA) Unknown operator '\@/'
Mi solución
Con la ayuda de @romainl, ahora tengo esta configuración tanto en after/ftplugin/vue.vim como en after/ftplugin/javascript.vim
setlocal isfname+=@-@ setlocal includeexpr=substitute(v:fname,'^@\/','src/','')¡Gracias por tu ayuda!
En la pregunta vinculada, ~ se escapa porque ~ tiene un significado especial para el motor de expresiones regulares de Vim: "coincide con la última cadena sustituta dada".
Pero @ no es especial de ninguna manera, por lo que no es necesario escaparlo:
setlocal includeexpr=substitute(v:fname,'^@\/','src/','') Como habrás notado, hay otro problema. Vim usa :help 'isfname' para definir v:fname pero el valor de la opción no contiene el carácter @ de forma predeterminada, por lo que se deja fuera de v:fname . Dado que no hay @ en v:fname , el patrón en replace substitute() no coincide y terminamos con:
| Cadena real | v:fname | Después includeexpr | Salir |
|---|---|---|---|
@/foo/bar.vue | /foo/bar.vue | /foo/bar.vue | Extraviado |
La solución es agregar @ a isfname :
setlocal isfname+=@-@lo que nos da:
| Cadena real | v:fname | Después includeexpr | Salir |
|---|---|---|---|
@/foo/bar.vue | @/foo/bar.vue | src/foo/bar.vue | Fundar |
Probado para trabajar con $ vim -Nu NONE file.js
Ahora, las configuraciones anteriores son específicas del tipo de archivo, es mejor ponerlas en un ftplugin. Suponiendo que el tipo de filetype de sus búferes sea javascript , una ubicación adecuada sería:
" on Unix-like systems ~/.vim/after/ftplugin/javascript.vim " on Windows %USERPROFILE%\vimfiles\after\ftplugin\javascript.vimYMMV.
Tenga en cuenta que, en las respuestas a las preguntas vinculadas, ^\\~ es incorrecto y arroja un error E874 . El patrón correcto es ^\~ .