2 votes

Comment déplacer le curseur au-delà de la fin de la ligne en mode Insertion lors de l'utilisation de l'édition de ligne de style vi sous bash ?

Dans tout ce qui suit, le ^ indique la position du curseur.

J'utilise bash sur Terminal sous OS X Yosemite et j'aimerais utiliser l'édition de lignes à la manière de vi :

prompt$ set -o vi
                 ^

Par défaut, il démarre en mode insertion vi, ce qui me permet de taper immédiatement

prompt$ hello
             ^

Supposons maintenant que j'utilise la touche fléchée gauche o H pour aller vers la gauche :

prompt$ hello
            ^

Maintenant, je ne peux plus me déplacer vers le droit de la o en hello en utilisant soit o L :

prompt$ hello  # I can't move here anymore!
             ^

Si je veux ajouter quelque chose, je dois cliquer sur Esc puis ShiftA .

Cela ne se produit pas en mode emacs ( set -o emacs ) ou sur certaines machines Linux (en se connectant en mode ssh à SLC 6.6 avec bash 4.1, ou en mode natif sur la machine de mon ami (Arch, je crois) avec bash 4.3). Dans tous ces cas, puis m'amène à la fin de la ligne où je peux continuer à taper ; sur mon terminal Mac, je ne peux pas le faire à moins de quitter le mode Insertion.

Cela ne se produit pas non plus avec vim sur mon Mac ; vim me permet de dépasser la fin des lignes avec les touches fléchées en mode Insertion. C'est juste le mode vi readline.

J'ai essayé de mettre à jour mon bash (avec Homebrew) de 3.2 à 4.3 ; cela n'a pas résolu le problème.

J'ai essayé de supprimer mon fichier .bash_profile et d'utiliser un terminal non modifié, mais cela n'a pas résolu le problème. (J'ai des alias et des modificateurs d'invite dans mon fichier .bash_profile).

J'ai lu cette , cette et cette . Ils n'ont pas de réponses.

Merci d'avance pour tout conseil !

Editer : Sur un système Linux où les choses fonctionnent comme je le souhaite, la variable TERM donne

prompt$ echo $TERM
xterm-256color

Le contenu de /etc/inputrc sont

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

# Completed names which are symbolic links to
# directories have a slash appended.
set mark-symlinked-directories on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# commented out keymappings for pgup/pgdown to reach begin/end of history
#"\e[5~": beginning-of-history
#"\e[6~": end-of-history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line

1voto

Riju Dasgupta Points 91

La solution est simple : mise à jour de bash vers 4.3 . La version par défaut de bash sur les Macs (même Yosemite) est la 3.2. (Ma question ci-dessus dit que j'ai fait la mise à jour et que cela n'a pas fonctionné, mais je pense qu'il a fallu un certain temps pour que cela "prenne").

Installer Homebrew avec

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

puis faire

brew install bash

puis modifiez votre chemin d'accès à l'interpréteur de commandes par défaut (dans les préférences du terminal) en

/usr/local/bin/bash

et c'est tout. Vérifiez votre version de bash avec

bash --version

et en prime, vous pouvez obtenir des indicateurs de mode !

bind 'set show-mode-in-prompt on'

et il affichera un + pour le mode insertion et : pour le mode commande.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X