web-dev-qa-db-fra.com

Cygwin bash Prompt encapsule les lignes sur la même ligne

J'utilise Cygwin bash Prompt et, pour les commandes longues, le texte sera enroulé autour de la même ligne au lieu de passer à la ligne suivante malgré le réglage de ma PS1 sur '$'.

Voici une capture d'écran,
screenshot

52
wting

J'utilisais déjà MinTTY, et supprimer la nouvelle ligne dans PS1 ne m'a pas aidé non plus. Un conseil sur cette page a été utile. J'ai exécuté cette commande bash:

kill -WINCH $$

Dans mon cas, le fait d'exécuter ceci une fois a résolu le problème, même après la déconnexion et le retour. Je ne suis pas sûr que ce soit toujours le cas.

55
jtpereyda

Pour moi, la solution a été d’ajouter les lignes suivantes à .bashrc:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

Notez que les caractères non imprimables de l'invite doivent être entre \[ ... \].

21
digory doo

J'ai eu le même problème avec MinTTY. Le problème a probablement quelque chose à voir avec l'invite principale (PS1).

La solution pour moi était de supprimer le dernier caractère "nouvelle ligne" de PS1 (juste avant le signe "$"):

user@Host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

user@Host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '

user@Host ~ $

voir http://cygwin.com/ml/cygwin/2001-07/msg00140.html pour référence.

Pour que cette modification soit persistante, ajoutez export PS1 = '[\ e] 0;\w\a]\n [\ e [32m]\u @\h [\ e [33m]\w [\ e [0m]\$ 'dans votre fichier ~/.bashrc.

8
Yariv

Comme commenté par dregad et ak2 , la définition de export TERM=cygwin dans mon fichier ~/.bashrc était assez pour résoudre ce problème pour moi.

5
blong

La réponse de @ jtpereyda est certainement sur la marque. Mais pour une raison quelconque, je ne pouvais pas laisser passer ça et creuser un peu plus profondément.

En développant ce commentaire , si vous redimensionnez le terminal alors que vous êtes dans vim (ou toute autre application plein écran permettant de prendre le contrôle du tty loin du shell), La SIGWINCH résultante est souvent et non envoyée au shell. Ainsi, lorsqu'il récupère le contrôle, il ne sait pas que le terminal a été redimensionné.

Lorsque vous redimensionnez votre terminal, il doit appeler une ioctl(..., TIOCSWINSZ, ...) sur le serveur maître dans lequel vim est exécuté. Cela entraîne alors une killpg(SIGWINCH) sur le groupe de processus de vim.

Le problème est que vim s'exécute dans son propre groupe de processus distinct du shell à partir duquel il a été exécuté. Le shell bash ne reçoit donc pas la variable SIGWINCH et ne règle pas ses lignes/colonnes de manière appropriée.

Si vous souhaitez une solution de contournement permanente, ajoutez shopt -s checkwinsize à votre .bashrc. Cela permet à bash de vérifier la taille de la fenêtre (ioctl(..., TIOCGWINSZ, ..)) après le retour de chaque commande et de mettre à jour ses lignes/colonnes.

5
Iguananaut

Quelque chose est cassé dans les paramètres de votre terminal (probablement).
Je suppose que vous auriez déjà essayé de quitter cette session et d’en redémarrer une nouvelle.

Bien que vous n'ayez pas de solution pour le terminal Cygwin, essayez MinTTY (c'est mieux en réalité).

2
nik

Comme commenté par akatakritos , vous avez probablement redimensionné votre terminal alors que vim était ouvert.

Lorsque cela se produit, il suffit de redimensionner le terminal une fois de plus et le problème disparaît.

1
olivieradam666