Is there a way to make gf open "some.file" from this line?

Include("/includes/some.file");

where the file is actually sitting under web server root, like


/var/www/html/includes/some.file

I tried adding "/var/www/html" to the :set path but vim will
not recognize it. /var/www/html/; was the same. Basically I'm
looking for a way to add "prefixes".

Assuming you have "/var/www/html" in your path, the following
pairing should help you out:


nnoremap <silent> gf :exec 'e ' . findfile(substitute(expand('<cfile>'), '^/*','',''))<cr>

nnoremap <silent> <c-w>f :exec 'sp ' . findfile(substitute(expand('<cfile>'), '^/*','',''))<cr>

The findfile() function also takes an extra parameter if you want
to refrain from munging your actual path, you could do something like

findfile(..., &path.',/var/www/html')

On the same note, would it be possible to let gf open

/var/www/html/includes/some.file

when I gf on this string

http://somehost.com/includes/some.file

or by defining a new command (say wf)?

A similar transformation could tweak the previous, something like

substitute(expand(...), '^\(http://[^/]/\)\=/*','','')

would strip off leading slashes and leading protocol+host. (that regexp/substitute() is untested, but should be approx. correct, save for possible needs to escape the "\" characters)

Alternatively, you could map it to <leader>gf and <leader><c-w>f
to maintain the original meanings, but create new mappings to
provide the additional functionality.

HTH,

-tim




Reply via email to