Hacker News new | ask | show | jobs
Show HN: Vim gf-command improved
4 points by koomenk 2617 days ago
Since a week ago I remembered myself of the awesome gf-command in Vim, which allows you to open the current filepath under the cursor in a new buffer. I thought to myself: Why am I never using this? Oh yeah, because this only works for filepaths relative to the buffer. As a javascript developer most of my time, that won’t help since I have webpack-configured projects which allows me to do some super cool absolute imports, but throws away the complete usage of the awesome gf-command.

So I started a Vim plugin called gfi (goto file improved). The goal for me was to create a plugin that is plug ’n play, zero-configuration required for you to enjoy this simple but efficient plugin.

So how does it work? When using this plugin your regular gf will be remapped and when pressing gf it always tries to resolve the file under the cursor using atleast the following logic:

- relative to the current buffer

- relative to Vim's current working directory

- based on the git directory it is located in

Implementing these 3 checks for every filetype made sense to me. Just having these 3 checks already makes gf already much more efficient want useful.

If these 3 fail to retrieve a path then some filetypes may have additional checks. Javascript-like projects can be webpack-configured and thus may use absolute imports. These are done by checking the package.json in the root of the project.

Golang path resolving for the import-statement is also taken into account. Since these imports are directories, the directory will be opened rather than a file, but it’s still more efficient, since gf does not open directories by default.

A goal I have is hoping for contributions for as many languages as possible so that the gf command will be more useful for many more developers.

If you have feedback or like to contribute, send me a mail or do your contribution via https://github.com/kkoomen/gfi.vim

1 comments

What's the difference between this and a properly setup file type plugin? As here [0] with python lets you open imported modules using `gf`.

[0]: https://github.com/vim/vim/blob/a87b72cc316e065d66dcbcf7ec1c...

Another thing I just tested using “includeexpr”, “path” and “suffixesadd” is that it is not possible (as far as my knowledge goes) to let vim open files correctly if the import path is a directory. Which my module does very well for javascript-like projects.
I am not sure if I get your point according to your reference, but the expression in your reference is way simpler than mine, although I should have used includeexpr rather than remapping fg itself. I’ll put that on my todo list, since that is the recommended way.
The main difference is that I want “fg” to be better, smarter to detect file paths. As I mentioned already, javacript-like projects use lots of absolute imports these days and these are not resolved by gf.