How do you prefer to switch between buffers in Vim?

How do you prefer to switch between buffers in Vim?

I've tried MiniBufExplorer, but I usually end up with several windows showing it or close it altogether. What I'd like is something like LustyJuggler with incremental search, the way I switch between buffers in Emacs. Surely there is a script like this?

Unable to have the reverse of Ctrl-O in Vim


Unable to eliminate T in Vim's Taglist
I have been using Wincent Colaiuta's Command-T vim plugin for a couple months now.

How can I test VIM's Features? [duplicate]
Wincent wrote the parts of it that need to be fast in C, and I must say that it is! And, I think its file pattern matching logic is even better than Textmate's Command-T.

How do you use the “K”-button in the normal mode of VIM?
Check out the screencast..
Hanging operators in Vim
The Command-T plug-in for VIM provides an extremely fast, intuitive mechanism for opening files with a minimal number of keystrokes.

Remove the Toolbar in GVim
It's named "Command-T" because it is inspired by the "Go to File" window bound to Command-T in TextMate..
Vertical spilts and folding in gvim
Files are selected by typing characters that appear in their paths, and are ordered by an algorithm which knows that characters that appear in certain locations (for example, immediately after a path separator) should be given more weight..
Can I redirect output of a program to gvim?
Easier buffer switching contains many useful tips.

I have adapted the following to my .vimrc, which does buffer-name auto-completion, maps the most useful buffer-switching commands to my <Leader> and left-side home row keys, and shows the current buffer number in the status line:.
"" Tab triggers buffer-name auto-completion set wildchar=<Tab> wildmenu wildmode=full  let mapleader = ","  map <Leader>t :CommandT<Return> map <Leader>a :bprev<Return> map <Leader>s :bnext<Return> map <Leader>d :bd<Return> map <Leader>f :b   "" Show the buffer number in the status line. 

set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
I also use MiniBufExplorer, which provides a compact listing of each listed buffer in its own horizontal split up top..


I used to use a combination of tabs and multiple gvim instances, keeping groups of related files as tabs in each instance.

So long as I didn't end up with too many tabs in one instance, the tab bar shows you the name of each file you're editing at a glance.. Then I read a post by Jamis Buck on how he switched from TextMate back to vim, and learned some great tricks:.
  • Ctrl-w s and Ctrl-w v to split the current window
  • Ctrl-6 to switch back and forth between two buffers in the same window.
  • the awesome fuzzyfinder.vim which gives you autocompleting search of files in your current directory or of buffers you currently have open
  • Jamis' own fuzzy_file_finder and fuzzyfinder_textmate, which slightly modify how fuzzyfinder works to behave more like a similar feature in TextMate (as far as I can tell, the difference is that it matches anywhere in the filename instead of only from the start).

    Watch this video to see it in action.
Now I just have one gvim instance, maximised, and split it into multiple windows so I can see several files at once.

I bound Ctrl-F to fuzzyfinder_textmate, so now if I type (say) Ctrl-F mod/usob it opens up app/models/user_observer.rb.

I almost never bother with tabs any more.. Update 2010/08/07. While fuzzyfinder_textmate remains awesome, as Casey points out in the comments, it's no longer maintained.

Also, it (and/or fuzzyfinder.vim) gets a bit slow and unstable when working with large projects (lots of directories or files), so I've been looking for an alternative.. Fortunately, there seems to be a very nice alternative in the form of Wincent Colaiuta's Command-T plugin.

This has very similar (if not slightly better) behaviour to fuzzyfinder_textmate, but is noticeably faster; it also has nice features like being able to open the found file in a split or vertical split.

Thanks (and upvotes!) to David Rivers for pointing to it..


I use the basics - ':ls' + ':bn'/':bp' + ':b <part-of-name>'.


I like "ctrl-w s" and "ctlr-w v" to split the window.

Then I map the movement keys (h, j, k, l) with ctrl held down to move between the split windows:.
" Map ctrl-movement keys to window switching map <C-k> <C-w><Up> map <C-j> <C-w><Down> map <C-l> <C-w><Right> map <C-h> <C-w><Left> 
Having to move my hand over to the arrow keys is annoying.. Next, I set up ctlr-tab to switch between buffers in the current window (like a lot of other environments):.
" Switch to alternate file map <C-Tab> :bnext<cr> map <C-S-Tab> :bprevious<cr> 
These have worked pretty well for me over the last several years although vim always has more secrets than you can know..


nmap <Leader>bb :ls<CR>:buffer<Space> 
and nobody mentioned nice plugin ctrlp.vim.

Using this plugin you can search buffer by name..


I use. CTRL-J for next buffer. CTRL-K for previous buffer. CTRL-L for next tab . CTRL-H for previous tab. Here is the .vimrc configuration:.
map <C-J> :bnext<CR> map <C-K> :bprev<CR> map <C-L> :tabn<CR> map <C-H> :tabp<CR> 


imap <A-1> <Esc>:tabn 1<CR>i imap <A-2> <Esc>:tabn 2<CR>i imap <A-3> <Esc>:tabn 3<CR>i imap <A-4> <Esc>:tabn 4<CR>i imap <A-5> <Esc>:tabn 5<CR>i imap <A-6> <Esc>:tabn 6<CR>i imap <A-7> <Esc>:tabn 7<CR>i imap <A-8> <Esc>:tabn 8<CR>i imap <A-9> <Esc>:tabn 9<CR>i  map <A-1> :tabn 1<CR> map <A-2> :tabn 2<CR> map <A-3> :tabn 3<CR> map <A-4> :tabn 4<CR> map <A-5> :tabn 5<CR> map <A-6> :tabn 6<CR> map <A-7> :tabn 7<CR> map <A-8> :tabn 8<CR> map <A-9> :tabn 9<CR> 


I've recently gone more minimalistic.. To cycle buffers I use ]b and [b from unimpaired: To jump straight to an open buffer just use Vim's tab completion with :b.

A few letters is enough to get to any open buffer with a tab or two.. Similarly to open buffers I use :e with relative paths and tab complete.. I also use :ls occasionally to see what buffers I have open (and to check their modified status).. To get rid of a buffer I use :bw to wipe the buffer.

I usually make a temporary split and change buffers to preserve my layout though since :bw also closes the active window.. All the minibuf things I tried just ended up annoying me, and I don't want some smart-matching thing opening random files for me.

If I really need to browse for something I use NERDtree (:e .).. IDK, Lately I also dropped Yankring (because it screws up xp) and started using registers, and I recently decided the f/t movements are the greatest thing ever....


The excellent Buffer Explorer, the be has gotten to be such strong muscle memory that I find myself wishing I could use it in other applications.

I find it to be extremely fast when actively editing more than two files..


I've spent quite a while building my .vimrc to work with this HTML::Mason project I've been on for four years, so I have an odd mix of tabs and split windows.

For your viewing enjoyment:.
map ;o :Sex <CR> map <C-J> <C-W>j map <C-K> <C-W>k map <C-l> <C-W>l map <C-h> <C-W>h map ;] :tabnext<CR> map ;[ :tabprev<CR> map <C-t> :tabe +"browse ."<CR> map <C-O> :NERDTreeToggle ~/curr/trunk/<CR> 


I use tselectbuffer.

It's really fast and unlike bufexplorer doesn't take space in your window.

It also has a incremental search.I tried minibufexplorer and I found the navigation in the buffer a bit difficult.



I use tselectbuffer.

It's really fast and unlike bufexplorer doesn't take space in your window.

It also has a incremental search.I tried minibufexplorer and I found the navigation in the buffer a bit difficult..


To list and switch between buffers I use:.
nnoremap <Leader>l :ls<CR>:b<space> 
To switch between buffers:.
map <Leader>n :bn<CR> map <Leader>p :bp<CR> 


I have mapped <S-J> and <S-K> to :bp and :bn, although I admit I don't use it as the number of files is greater than 10.

I have then mapped <C-J> and <C-K> to Gnome Terminal's previous and next tabs, and I usually run 4 instances of vim for each of the 4 different projects I work on.

I still really wish next and previous buffer would go to the history of buffers I have been working on, and not the order int he buffer list..


i use simple :vsplit with ^W+w/^W+r and :tabnew with Ctrl+Alt+PgUp/PgDown key combinations..


When there are several buffers open in a Vim session, it can become difficult to keep track of the buffers and their respective buffer numbers.

If this is the case, switching to a different file can be made easier using a simple map:.
:nnoremap (F5) :buffers(CR):buffer(Space).

85 out of 100 based on 45 user ratings 745 reviews