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.