J'utilise actuellement tmux avec la variable xterm-256color $ TERM. Lorsque vous êtes dans bash sous tmux, appuyez sur home/end pour insérer des caractères tilde (~). En dehors de tux, les touches home/end fonctionnent bien.
En utilisant cat et tput, je pouvais voir qu'il y avait une discordance entre les séquences générées et attendues:
$ cat -v # pressing home, then end
^[[1~^[[4~
$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF
Pour résoudre ce problème, j'ai décidé d'ajouter ce qui suit à mon .bashrc:
if [[ -n "$TMUX" ]]; then
bind '"\e[1~":"\eOH"'
bind '"\e[4~":"\eOF"'
fi
Cela a résolu le problème de bash, mais dans d'autres programmes readline, comme dans un REPL tel que ipython, il insère toujours un tilde pour home/end.
Pourquoi est-ce exactement un problème en premier lieu? Pourquoi la séquence générée est-elle différente quand je suis à l'intérieur de tmux ou à l'extérieur? Comment peut-on résoudre ce problème afin que ce ne soit pas un problème dans les programmes?
Il semble que le principal problème concerne l'utilisation de xterm-256color pour $ TERM. J'ai changé $ TERM en screen-256color et le problème a disparu.
Dans tmux 2.0, vous pouvez simplement ajouter ces 2 lignes dans votre .tmux.conf
:
bind -n End send-key C-e
bind -n Home send-key C-a
Si vous souhaitez rester avec xterm-256color dans tmux pour une raison quelconque, utilisez Arch solution with inputrc. Je l'ai testé dans tmux avec les clés rxvt, Ruby irb, python, lua et home/end sont ok. Probablement chaque application readline sera ok.
Donc, je n'ai pas assez de points à commenter, alors je vais le dire ici plutôt. Je crois que la solution préférée consiste à utiliser set -g default-terminal "screen-256color"
dans votre ~/.tmux.conf
. J'ai eu ce problème il y a un moment et j'ai décidé de choisir la solution sumanta:
bind -n End send-key C-e
bind -n Home send-key C-a
Cependant, j'avais oublié que je laissais cela ici et que j'avais un problème similaire avec vim (home et end consistaient à copier des registres) au lieu de zsh. En bref, bind n'affecte pas vim.