Mapeando Ctrl-Backspace no Terminator


8

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?


2
Bem-vindo no inferno de Vim.
romainl

2
Eu gosto do fato de que esse inferno é bastante produtivo e pode ser melhorado com patches.
Ingo Karkat

BTW, estou coletando esse tipo de perguntas para poder argumentar que esse problema específico seja resolvido no Vim 8.0. Eu realmente quero mais e mais uniformes candidatos a mapeamento.
Ingo Karkat

Este problema não pode realmente ser corrigido no vim (AFAIK). Depende do terminal em que o vim está sendo executado. Para uma grande variedade de usuários que usam o vte (Gnone Terminal, Mate Terminal, Guake, etc.), esse problema recebeu atenção recente e pode ser corrigido em breve. Veja este bug do gnomo: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr

@IngoKarkat Veja o comentário acima. ^
trusktr 13/10

Respostas:


8

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.


Obrigado pela resposta rápida. Acho que vou ter que me acostumar a usar ctrl-w para vim e ctrl-backspace para navegadores.
user1026044

O bom do Ctrl-W é que ele também funciona no Bash etc.
Ingo Karkat

Sim, eu sei. Mas você ainda precisa usar o ctrl-backspace para todo o resto, e o fato de o ctrl-w parecer ser padrão para fechar guias e janelas em qualquer outro lugar o torna irritante. Provavelmente vou me acostumar depois de um tempo.
user1026044

Mas isso pode ser resolvido puramente na base de código vim? Como qualquer código na base de códigos do vim distingue entre backspace e ctrl + backspace se o terminal em que está sendo executado envia ao vim a mesma entrada exata para qualquer combinação de teclas? Parece que isso é algo que deve ser corrigido no terminal em que o vim está sendo executado, não no vim. Por exemplo, o Guake envia ^?para backspace e ctrl + backspace, o que os torna (AFAIK) indistinguíveis. O xterm, por outro lado, envia ^Hpara backspace e ^?para ctrl + backspace, tornando-os distinguíveis.
trusktr

Mas, infelizmente, no xterm, backspace ( ^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 ^He 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) ...
trusktr
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.