No vim, como posso remapear <tab> sem também remapear <Ctrl + i>?

14

Eu gosto de usar tab para pular entre janelas divididas, então eu tenho map <tab> <C-W><C-W>no meu .vimrc. No entanto, notei que isso faz com que Ctrl + I não se comporte mais como Ctrl + I, mas como Ctrl + W, Ctrl + W. Como posso remapear apenas <tab>mas não <C-i>?

Jonathan
fonte

Respostas:

10

Devido à maneira como a entrada do teclado é manipulada internamente, isso infelizmente não é geralmente possível hoje, mesmo no GVIM. Algumas combinações de teclas, como Ctrl+ não alfabético, não podem ser mapeadas e Ctrl+ letra vs. Ctrl+ Shift+ letra não pode ser distinguida. (A menos que seu terminal envie um código de termincap distinto para ele, o que a maioria não envia .) No modo de inserção ou linha de comando, tente digitar a combinação de teclas. Se nada acontecer / for inserido, você não poderá usar essa combinação de teclas. Isso também se aplica a <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>etc. (Somente a exceção é <BS>/ <C-H>.) Esse é um ponto problemático conhecido e o assunto de várias discussões sobre o vim_dev e o canal IRC #vim.

Algumas pessoas (principalmente Paul LeoNerd Evans) querem consertar isso (mesmo para o console Vim em terminais que suportam isso) e apresentaram várias propostas, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Mas até hoje, nenhum patch ou voluntário foi apresentado, embora muitos tenham expressado o desejo de ter isso em um futuro lançamento importante do Vim 8.

Ingo Karkat
fonte
1
esse problema de mapeamento / reconhecimento de código de chave foi resolvido no Vim 8 a partir de agora (ano de 2017)? Eu acho que eu ainda pode reproduzir o exemplo de Jon no meu Vim 8.0
llinfeng
@llinfeng: Não, infelizmente não. A Bram está atualmente trabalhando na integração de um terminal no Vim; isso parece usar uma biblioteca produzida por Paul Evans, então talvez isso também acabe levando a uma melhoria nas chaves manipuladas. (Mas isso é pura especulação neste momento.)
Ingo Karkat
0

Nem todos os atalhos são possíveis no Vim, especialmente se ele estiver em um terminal. Eu não recomendo usar um atalho de guia para esse fim. Mas uma solução alternativa pode ser a seguinte:

" 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>

Veja um exemplo de uso em https://github.com/eduardolucioac/groovim/blob/master/.vimrc

[]

Eduardo Lucio
fonte