When you launch Vim
It’s important that you always launch Vim from the command line and at the root of your project. I’ll explain why later in the section on projects, but for now just remember to start your work from there.
From your shell
We already saw this one in the hello world:
$ mvim path/to/file.txt
Every time you do this you’ll open up a new window. It also means leaving Vim and both of these will get annoying pretty quickly. Fortunately, there are other options.
From within Vim
Remember how I said that Vim was a platform for creating the perfect editor for you? Well, there are many ways to open a file in Vim, just like all the modern editors.
⌘o
If you’re using MacVim Command+o will bring up the open file dialog just like any other desktop app. GVim on Linux can do the same thing, although it’s probably Control+o
Type the path
If you just want to type in the path to the file you want to open then Edit is your friend.
If you enjoy something like Atom’s fuzzy-finder ( ⌘+Shift+p
) you
should check out the Control-P Plugin.
Visual folder structure
If you like a clickable sidebar with the folder structure of your project then Vim’s Netrw is what you want.
Edit
:edit path/to/file.txt
Replaces the text you were working on with the contents of the file you told it to edit. The path is relative to the root of your project and, as with your shell, tab completion works to help you find it faster. Note: this doesn’t get rid of the changes you were making to the file that was originally open. It will just change what’s being shown in the viewport. Your changes will hang around in a buffer.
File Relativity
If you’d prefer :edit
or the directory browser to start in the same directory as your current file, instead of the root of the project, you can add this to your ~/.vimrc
set autochdir
This tells Vim to always assume the “current directory” is the same one as the file buffer that currently has focus.
If you use :edit
and are 3 directories down in your project you’ll have to do
something like this to open a file in the root of the project: :edit
../../../foo.md
I hate having to count how many directories down in a project I am especially when I have to go up some to get to the root and then down some to get to the file I want to open. So I never use this option.
Control-P Plugin
See Plugins for how to install and manage plugins.
Control-P is one of my favorite Vim plugins. It’s got a bunch of functionality that I never use, because its default setup is just about perfect.
After installing add the following to your ~/.vimrc
let g:ctrlp_map = '<c-p>'
" ^^ enables control-p to be invoked by typing control+p
let g:ctrlp_cmd = 'CtrlP'
If you don’t you’ll have to type :CtrlP
to invoke it and that sucks.
Netrw Browsing
Netrw is a terrible name. I think it means “Net Read Write” because, one of the many things it can do is let you edit files over a network. The manual doesn’t actually say, and it doesn’t matter, because we’re going to ignore that and use the feature most folks use it for: “exploring” directories.
The default view has a rather cluttered banner at the top with lots of
information you don’t need. I’m going to show you how to clean it up to look
more like the tree view you see in Atom or Sublime. Before that, you may want to
take a quick look. Type :Vexplore
Take a glance. After taking a peek, :quit
the
split window that appears (your cursor will change focus to that one) Now, let’s trim out everything except the actual directory browser.
We’ll do this by adding to your ~/.vimrc.
let g:netrw_banner = 0 " removes the netrw banner
let g:netrw_liststyle = 3 " tree style listing
let g:netrw_browse_split = 4 " see help on this one. lots of useful options
let g:netrw_altv = 1 " change from left splitting to right splitting
let g:netrw_winsize = 25 " initial size of new explore windows
" By default netrw leaves unmodified buffers open. This autocommand
" deletes them when they're hidden (using :q for example).
autocmd FileType netrw setl bufhidden=delete
Once you’ve done that (and loaded the changes) it’s time to open it up. You can open it up as a vertical sidebar with
:Vexplore
or across the bottom with
:Hexplore
or, if you want lots of real estate you can replace the entire window with the explore view
:Explore
Each of them will bring up a file explorer that starts in the root of your
project. Move your cursor onto any of the folder names or files and hit
<Enter>
to open them, or you can click with your mouse if you’re so inclined.
See File Relativity above if you’d prefer the directory brower to start its view in the same folder as your current file.
~/.vimrc
augroup ProjectDrawer
autocmd!
autocmd VimEnter * :Vexplore
augroup END
Sometimes you open it and decide you don’t need to switch files. If you’ve
opened it along the side or bottom, then it’s just a
split view
and you can just quit it with :q
like anything else. It’s a bit trickier if
you’ve used :Explore
and it’s taken over the whole window. Quitting that
will make the whole window go away. Instead you need to delete the
buffer it’s in. To do that you execute the
buffer delete command with :bd
I like netrw but I don’t like typing :Vexplore
or even :Vex
So I use this
function to toggle it with <CTRL>e
" and a handy-dandy function to toggle a Netrw sidebar
" Toggle Vexplore with Ctrl-E
function! ToggleVExplorer()
if exists("t:expl_buf_num")
let expl_win_num = bufwinnr(t:expl_buf_num)
if expl_win_num != -1
let cur_win_nr = winnr()
exec expl_win_num . 'wincmd w'
close
exec cur_win_nr . 'wincmd w'
unlet t:expl_buf_num
else
unlet t:expl_buf_num
endif
else
exec '1wincmd w'
Vexplore
let t:expl_buf_num = bufnr("%")
endif
endfunction
map <silent> <C-E> :call ToggleVExplorer()<CR>
If you wan it to always launch when you launch vim you can add this to your vimrc.
" To show a vertical file explorer when you launch vim
augroup ProjectDrawer
autocmd!
autocmd VimEnter * :Vexplore
augroup END