Recentemente, comecei a usar o Vim. Dos editores anteriores, estou acostumado a excluir uma palavra inteira pressionando Ctrl- Backspace. Depois de examinar a documentação, descobri que isso foi feito pressionando Ctrl- wno Vim. O problema é que, depois de me acostumar a pressionar Ctrl- w, comecei a fechar guias e chats toda vez que soletrava uma palavra incorretamente (enquanto escrevia essa pergunta, fechei essa guia 5 vezes). Então, verifiquei como mapear as chaves no Vim e tentei o seguinte:
:imap <C-BS> <C-w>
Infelizmente, não funcionou. Depois de um pouco de pesquisa, descobri que o terminal não faz distinção entre Ctrl- Backspacee Backspace. Vi alguns hacks e patches para corrigir esse problema, mas não consegui fazê-los funcionar no terminador (que é o emulador que quero usar).
Existe alguma maneira de mapear Ctrl- Backspaceno Vim ao usar o terminator?
fonte
Respostas:
Devido à maneira como a entrada do teclado é tratada internamente, isso infelizmente não é possível hoje em dia. 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.
fonte
^?
para backspace e ctrl + backspace, o que os torna (AFAIK) indistinguíveis. O xterm, por outro lado, envia^H
para backspace e^?
para ctrl + backspace, tornando-os distinguíveis.^H
) é indistinguível de ctrl + h (^H
). Talvez possamos criar uma nova sequência de escape para poder distinguir os três? Não sei como isso é fácil, mas parece que seria seguro, porque com o estado atual das coisas (alguns terminais usam^?
backspace, outros^H
e vice-versa) não consigo imaginar muitos aplicativos de terminal (se houver algum) considere o cenário Ctrl + Backspace (que seria completamente indeterminística devido à variedade de terminais) ...