In vim, how can I remap <tab> without also remapping <Ctrl+i>?

14

2

I like to use tab to jump between split windows, so I have map <tab> <C-W><C-W> in my .vimrc. Yet I noticed that this makes it so that Ctrl+I doesn't behave as Ctrl+I anymore, but as Ctrl+W, Ctrl+W. How can I remap just <tab> but not <C-i>?

Jonathan

Posted 2014-06-17T18:45:55.247

Reputation: 1 539

Answers

10

Due to the way that the keyboard input is handled internally, this unfortunately isn't generally possible today, even in GVIM. Some key combinations, like Ctrl + non-alphabetic cannot be mapped, and Ctrl + letter vs. Ctrl + Shift + letter cannot be distinguished. (Unless your terminal sends a distinct termcap code for it, which most don't.) In insert or command-line mode, try typing the key combination. If nothing happens / is inserted, you cannot use that key combination. This also applies to <Tab> / <C-I>, <CR> / <C-M> / <Esc> / <C-[> etc. (Only exception is <BS> / <C-H>.) This is a known pain point, and the subject of various discussions on vim_dev and the #vim IRC channel.

Some people (foremost Paul LeoNerd Evans) want to fix that (even for console Vim in terminals that support this), and have floated various proposals, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

But as of today, no patches or volunteers have yet come forward, though many have expressed a desire to have this in a future Vim 8 major release.

Ingo Karkat

Posted 2014-06-17T18:45:55.247

Reputation: 19 513

1had this keycode mapping/recognition problem been resolved in Vim 8, as of now (year 2017)? I find I can still reproduce Jon's example on my Vim 8.0 – llinfeng – 2017-07-24T13:06:57.933

@llinfeng: No, unfortunately not. Bram is currently working on integrating a terminal into Vim; this seems to use a library produced by Paul Evans, so maybe this will eventually lead to an improvement on the handled keys, too. (But this is pure speculation at this time.) – Ingo Karkat – 2017-07-25T07:17:11.037

0

Not all shortcuts are possible in Vim especially if it iss under a terminal. I do not recommend using a tab shortcut for that purpose. But an alternative solution might be the following:

" Note: Allows faster switching between windows with "Ctrl+w"! By Questor
nnoremap <silent> <C-w> <C-w><C-w>
inoremap <silent> <C-w> <Esc><C-w><C-w>
vnoremap <silent> <C-w> <Esc><C-w><C-w>

See an example of use in https://github.com/eduardolucioac/groovim/blob/master/.vimrc

[]'s

Eduardo Lucio

Posted 2014-06-17T18:45:55.247

Reputation: 712