How to effectively work with multiple files in Vim
Why not use tabs (introduced in Vim 7)?
You can switch between tabs with :tabn
and :tabp
,
With :tabe <filepath>
you can add a new tab; and with a regular :q
or :wq
you close a tab.
If you map :tabn
and :tabp
to your F7/F8 keys you can easily switch between files.
If there are not that many files or you don't have Vim 7 you can also split your screen in multiple files: :sp <filepath>
. Then you can switch between splitscreens with Ctrl+W and then an arrow key in the direction you want to move (or instead of arrow keys, w for next and W for previous splitscreen)
Listing
To see a list of current buffers, I use:
:ls
Opening
To open a new file, I use
:e ../myFile.pl
with enhanced tab completion (put set wildmenu
in your .vimrc
).
Note: you can also use :find
which will search a set of paths for you, but you need to customize those paths first.
Switching
To switch between all open files, I use
:b myfile
with enhanced tab completion (still set wildmenu
).
Note: :b#
chooses the last visited file, so you can use it to switch quickly between two files.
Using windows
Ctrl-W s
and Ctrl-W v
to split the current window horizontally and vertically. You can also use :split
and :vertical split
(:sp
and :vs
)
Ctrl-W w
to switch between open windows, and Ctrl-W h
(or j
or k
or l
) to navigate through open windows.
Ctrl-W c
to close the current window, and Ctrl-W o
to close all windows except the current one.
Starting vim with a -o
or -O
flag opens each file in its own split.
With all these I don't need tabs in Vim, and my fingers find my buffers, not my eyes.
Note: if you want all files to go to the same instance of Vim, start Vim with the --remote-silent
option.
:ls
for list of open buffers
:bp
previous buffer:bn
next buffer:bn
(n
a number) move to n'th buffer:b <filename-part>
with tab-key providing auto-completion (awesome !!)
In some versions of vim, bn
and bp
are actually bnext
and bprevious
respectively. Tab auto-complete is helpful in this case.
Or when you are in normal mode, use ^
to switch to the last file you were working on.
Plus, you can save sessions of vim
:mksession! ~/today.ses
The above command saves the current open file buffers and settings to ~/today.ses
. You can load that session by using
vim -S ~/today.ses
No hassle remembering where you left off yesterday. ;)