En tmux 2.0, solo puede agregar estas 2 líneas en su .tmux.conf
:
bind -n End send-key C-e
bind -n Home send-key C-a
Parece que el principal problema es usar xterm-256color para $TERM. Cambié $TERM a screen-256color y el problema desapareció.
Si desea quedarse con xterm-256color en tmux por alguna razón, use la solución arch con inputrc. Lo probé en tmux con rxvt, ruby irb, python, lua y las teclas home/end están bien. Probablemente todas las aplicaciones de readline estarán bien.
De la wiki de arch:
Lo primero es lo primero:
no configure $TERM manualmente; deje que lo haga la terminal.
Muchas aplicaciones de línea de comandos utilizan la biblioteca Readline para leer entradas. Por lo tanto, la configuración adecuada de Readline puede solucionar Home y End en muchos casos.
el archivo /etc/inputrc predeterminado no incluye una asignación para las teclas de inicio/fin.
Para verificar cuál es la secuencia de escape emitida para estas teclas:
1. Ctrl + V
2. Home
3. Spacebar
4. Ctrl + V
5. End
esto probablemente imprimirá:$ ^[[1~ ^[[4~
. Entonces, debe agregar un mapeo para estas secuencias a su inputrc (/etc/inputrc para que sea global, o solo para su usuario ~/.inputrc):
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Agregue lo siguiente a su .tmux.conf
:
bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"
¡Y listo!
Explicación
Después de intentar cada uno de estos, y varios otros que vi mientras examinaba otras respuestas y documentación, esto finalmente funcionó para mí en cada escenario que le presenté. No puedo prometerte lo mismo, porque los escenarios de todos son diferentes, pero esto es lo que terminé.
Esto se descubrió después de introducir la misma prueba/error y lógica de un artículo algo relevante que ya no está disponible. La clave es dónde está ocurriendo la traducción; en mi caso, esto sucede dentro de mi .tmux.conf
, en lugar de .bashrc
o .zshrc
(principalmente porque mi casa/final funcionó bien fuera de tmux
)
Depuración
Puede depurar este problema usando cat -v
.
Ejecutar cat -v
, luego presione el Inicio y Fin llaves. Salga usando Ctrl +C .
$ cat -v
Así es como se veía mi salida dentro de tmux using zsh
, zsh
y bash
:
tmux
➜ ~ cat -v
^[[1~^[[4~^C
zsh
➜ ~ cat -v
^[[H^[[F
bash
bash-3.2$ cat -v
^[[H^[[F
Solucionar
Compare los ejemplos anteriores con lo que esperamos ver, emparejando tput
con cat -v
:
$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF
Conclusión
Porque este problema existe únicamente dentro de tmux
, y no dentro de los propios shells, opté por realizar los cambios de vinculación dentro de la configuración de tmux. Usando bind-key
emparejado con send
, podemos usar el Escape
palabra clave emparejada con la secuencia que queremos lograr nuestra traducción. Así:
bind-key -n NAME_OF_KEY send Escape SEQUENCE_GOES_HERE
Este proceso de depuración y solución se puede aplicar a cualquier otro problema de traducción clave. Pero, no te vuelvas demasiado loco. Algunas teclas están asignadas a ciertas secuencias de escape por una razón. Observe cómo bash
y zsh
recibió el ^[[H
secuencia para Inicio en lugar de ^[OH
; probablemente no se recomienda que anulemos esto en nuestro .zshrc
a menos que tengamos problemas importantes con esto en zsh
.