Asignación de ctrl-retroceso en terminador

8

Recientemente comencé a usar Vim. De editores anteriores, estoy acostumbrado a eliminar una palabra completa presionando Ctrl- Backspace. Después de mirar la documentación, descubrí que esto se hizo presionando Ctrl- wen Vim. El problema es que después de acostumbrarse a presión Ctrl- w, he empezado a cerrar pestañas y chats cada vez que mal una palabra (al escribir esta pregunta Cerré esta ficha 5 veces). Así que verifiqué cómo asignar teclas en Vim e intenté esto:

:imap <C-BS> <C-w>

Lamentablemente, no funcionó. Después de un poco de investigación descubrí que el terminal no distingue entre Ctrl- Backspacey Backspace. Vi algunos hacks y parches para solucionar este problema, pero no pude hacer que funcionaran en Terminator (que es el emulador que quiero usar).

¿Hay alguna forma de mapear Ctrl- Backspaceen Vim cuando se usa el terminador?

usuario1026044
fuente
2
Bienvenido en el infierno de Vim.
romainl
2
Me gusta el hecho de que este infierno es bastante productivo y se puede mejorar con parches.
Ingo Karkat
Por cierto, estoy recopilando este tipo de preguntas para poder argumentar que este problema en particular se aborda en un Vim 8.0. Realmente quiero más y más candidatos de mapeo uniforme, también.
Ingo Karkat
Este problema no se puede solucionar realmente en vim (AFAIK). Depende del terminal en el que se esté ejecutando vim. Para una amplia variedad de usuarios que usan vte (Terminal Gnone, Terminal Mate, Guake, etc.), este problema ha recibido atención reciente y podría solucionarse pronto. Ver este error GNOME: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr
@IngoKarkat Vea el comentario anterior. ^
trusktr

Respuestas:

8

Debido a la forma en que la entrada del teclado se maneja internamente, desafortunadamente esto no es posible actualmente. Algunas combinaciones de teclas, como Ctrl+ no alfabético, no se pueden asignar, y Ctrl+ letra vs. Ctrl+ Shift+ letra no se pueden distinguir. (A menos que su terminal envíe un código de captación de términos distinto , que la mayoría no envía ). En el modo de inserción o de línea de comandos, intente escribir la combinación de teclas. Si no sucede nada / se inserta, no puede usar esa combinación de teclas. Esto también se aplica a <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>etc. (La única excepción es <BS>/ <C-H>.) Este es un punto problemático conocido y es el tema de varias discusiones sobre vim_dev y el canal #vim IRC.

Algunas personas (principalmente Paul LeoNerd Evans) quieren arreglar eso (incluso para la consola Vim en terminales que admiten esto), y han presentado varias propuestas, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Pero a partir de hoy, todavía no se han presentado parches o voluntarios, aunque muchos han expresado su deseo de tener esto en un futuro lanzamiento importante de Vim 8.

Ingo Karkat
fuente
Gracias por la rápida respuesta. Supongo que tendré que acostumbrarme a usar ctrl-w para vim y ctrl-backspace para navegadores.
user1026044
Lo bueno de Ctrl-W es que también funciona en Bash, etc.
Ingo Karkat
Si lo se. Pero aún tiene que usar ctrl-backspace para todo lo demás, y el hecho de que ctrl-w parece ser estándar para cerrar pestañas y ventanas en cualquier otro lugar lo hace molesto. Sin embargo, probablemente me acostumbraré después de un tiempo.
user1026044
Pero, ¿se puede resolver esto únicamente en la base del código vim? ¿Cómo cualquier código en la base de código vim distingue entre retroceso y ctrl + retroceso si el terminal en el que se ejecuta envía vim la misma entrada exacta para cualquier combinación de teclas? Parece que esto es algo que debe corregirse en el terminal en el que vim se está ejecutando, no vim. Por ejemplo, Guake envía ^?para retroceso y ctrl + retroceso, lo que los hace (AFAIK) indistinguibles. xterm, por otro lado, envía ^Hpara retroceso y ^?para ctrl + retroceso, haciéndolos distinguibles.
trusktr
Pero desafortunadamente, en xterm, la tecla de retroceso ( ^H) es indistinguible de ctrl + h ( ^H). ¿Quizás podamos crear una nueva secuencia de escape para poder distinguir los tres? No sé lo fácil que es eso, pero parece que sería seguro hacerlo porque con el estado actual de las cosas (algunos terminales usan ^?para retroceder, otros ^Hy viceversa) no puedo imaginar muchas aplicaciones de terminal (si lo hay) considere el escenario de retroceso ctrl + (sería completamente indeterminado debido a la variedad de terminales) ...
trusktr