Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I switch tabs based on incremental search in vim?

For example, let's say I have three tabs open in vim:

1: nice_program.c
2: something_fun.h
3: super_script.sh

So if I hit some magic modifier key, and then type 'n' and hit enter I change tab to tab 1. Likewise, typing 'su' instead will navigate me to tab 3 instead.

Is such behavior possible? There are so many vim extensions, and I dont really get the whole vim extension lingo.

BTW, I am using gVim on XP and MacVim on OS X. Preferably the solution will work on both...

EDIT:

Note that I only want the incremental search to search across the names of the open tabs. That is, it's not supposed to actually search inside the tabs themselves.

Also, I never use buffers, it's tabs that I want this working for.

like image 523
c00kiemonster Avatar asked Jan 27 '26 05:01

c00kiemonster


2 Answers

From the wording of the question it seems that you take the idea of tabs in Vim not the way it is supposed to be taken by design of this feature. A Vim tab page is not a form of a buffer or a window, it is a window layout container, instead. No wonder there is no built-in way for switching to a tab by the name of a buffer that is active (or the only one in its tab page, or special in some other way). Semantically, that is switching to a buffer, not a tab (but tab could be switched in order to show a buffer, if it is necessary).

To switch to a buffer by its name use the :sbuffer command (:sb, for short). It is not necessary to type the whole buffer name each time, since the command has auto-completion. Usually one have to type only few letters of a name to uniquely identify a buffer (the same way as you described incremental search in the question).

By default, Vim open the requested buffer displacing one in the current window. This behavior is governed by the switchbuf option. One of the choices (called usetab) provided by that option allows to switch to a window in another tab page if that window contains the buffer to edit. This is exactly what suits your manner of work with tab pages.

To summarize, change the switching behavior as follows

:set switchbuf=usetab

and use the :sb command to open a buffer by typing a few letters of its name and using Tab-completion.

like image 135
ib. Avatar answered Jan 28 '26 18:01

ib.


I use this snippet I picked up in vim wiki to switch between open buffers (mapped to F5):

" switch between numbered buffers
:nnoremap <F5> :buffers<CR>:buffer<Space>

(put in your .vimrc file or whichever dotfile you use).

As for incremental search across open buffers, whenever I look up something using either /[something] or with */# on current word, it's automagically also highlighted in other buffers/tabs. Then I can switch buffers and hit n or N to move between matches in the currently viewed buffer. That's already baked into Vim.

Hope that helps.

like image 36
sa125 Avatar answered Jan 28 '26 18:01

sa125



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!