Today I Learned

hashrocket A Hashrocket project

Create A New File In A New Directory

From within a vim session, if you create a buffer for a new file in a directory that doesn't exist. For instance, let's say that /features doesn't exist and the new file is my_latest_feature_spec.rb:

:e spec/features/my_latest_feature_spec.rb

Vim's command line will inform you that this is a buffer for a [New DIRECTORY]. If you then make some changes and subsequently try to save the file, Vim will present you with:

"spec/features/my_latest_feature_spec.rb" E212: Can't open file for writing

This is because the containing directory doesn't exist. You can quickly create that directory with a combination of Vim filename shorthands and shelling out to the mkdir command.

:!mkdir -p %:h

The % is shorthand for the qualified path of the current file. The :h is a filename modifier that returns the head of the filename, that is, it resolves to the path with everything except the name of the file.

Thus, this command is essentially resolving to:

:!mkdir -p spec/features/

Vim will shell out with this command making directories for all non-existent directories in the given path. Now you can happily save your new file.

See More #vim TILs
Every developer at Hashrocket is a Vim expert. Check out our development environment, Dotmatrix, and if you are in Chicago, come to the Vim Chicago Meetup hosted at our Chicago office.