Le retour arrière ne fonctionne pas dans Cygwin

29

Je viens d'installer Cygwin et la fonctionnalité RETOUR ARRIÈRE n'est pas là, c'est-à-dire que lorsque j'appuie sur la touche Retour arrière, j'obtiens un espace.

J'ai essayé de rechercher ce problème sur Google, mais je n'ai rien trouvé de concluant.

user620189
la source
Pouvez-vous donner plus de détails sur la façon dont vous avez installé et appelé Cygwin et où exactement la clé de retour arrière ne fonctionne pas?
ak2
1
Je suppose que cela se passe dans la coquille. Que se passe-t-il lorsque vous tapez control-V suivi d'un retour arrière? Et quelle est la sortie de la sttycommande?
Keith Thompson
Quelle sorte de clavier possédez-vous? US, UK etc.
pjc50
Avez-vous déjà résolu cela? Je le vois maintenant sur ma nouvelle installation Cygwin, bien que cela ait déjà fonctionné. Il convient de noter que vous n'obtenez pas "un espace": il ne parvient pas à déplacer le curseur vers l'arrière pour effacer le caractère. L'espace que vous voyez est l'espace qui était censé piétiner le personnage précédent. Si vous appuyez sur ^ L, vous pouvez voir que le retour arrière fonctionne. C'est pourquoi stty ne règle pas les choses. C'est presque comme le shell CMD auquel Cygwin est lié ne parvient pas à interpréter le mouvement du curseur.
SomeCallMeTim

Réponses:

33

Dans mon cas, le retour arrière ne fonctionnait pas du tout après la création d'un ~ / .vimrc vide. Après le changement, ça a marché

Mettre:

définir bs = 2

dans .vimrc

Trouvé sur http://linux-journal.blogspot.com/2005/04/fix-vim-backspace-doesnt-work.html

vaichidrewar
la source
Merci, cela a fonctionné pour moi - auparavant, dans Vim, ma touche de retour arrière reculait le long de la ligne mais n'effaçait pas les lettres jusqu'à ce que je commence à taper. Maintenant, il fait le retour arrière «habituel».
Robert
4
C'est formidable que cette réponse ait aidé d'autres utilisateurs, mais dans ce cas, ce n'est pas la solution à la question car la question d'origine ne pose pas de question sur vim.
Kelsin
Cela a également résolu un problème similaire que j'avais avec les touches de curseur
Steve Paul
12

A travaillé pour moi: dans l'invite de commande Windows, tapez

echo export TERM=cygwin >> C:/cygwin/home/YourUser/.bashrc

Cela l'ajoutera à la .bashrcet tout fonctionnera bien!

Marrciovr
la source
1
J'ai eu la TERMvariable d'environnement définie msysvia les paramètres de variable d'environnement Windows comme suggéré sur StackOverflow pour résoudre les gitproblèmes sous Windows. Le simple fait de le réinitialiser cygwindans .bashrcn'a pas aidé, mais la suppression de l' TERMentrée des paramètres Windows l'a fait. Merci de m'avoir pointé dans la bonne direction!
Florian Brucker
Cela a résolu le fait que cygwin64 ignorait les backspaces dans les commandes contenant des sauts de ligne. Merci.
suanik
11

J'ai trouvé une solution à un problème présenté comme celui ci-dessus.

Réexécutez simplement le programme d'installation de Cygwin et réinstallez termcapet terminfo. Si vous utilisez le champ de recherche, vous pouvez les trouver rapidement. Au lieu de dire "Garder" pour chacun, cliquez dessus pour lui faire dire "Réinstaller". Vous devrez peut-être cocher la case "Masquer les objets obsolètes" pour termapparaître dans la recherche.

Mon dossier terminfo était entièrement manquant. Je ne sais pas pourquoi. J'espère que cela aide quelqu'un.

SomeCallMeTim
la source
1
J'avais un ncurses installé sur mesure, que j'ai supprimé. Après avoir supprimé et réinstallé via cygwin setup.exe, j'ai eu ce problème. Je ne veux pas appliquer un bandaid en définissant les variables TERM sur autre chose que ce qui fonctionnait avant mon incident. La réinstallation de terminfo (je n'ai pas trouvé termcap) a fonctionné pour moi. Merci!
Kelsin
cool, ça marche, mais pourquoi?!
Yordan Georgiev
5

Modifiez votre c: \ cygwin \ cygwin.bat

Placez ceci: SET TERM=cygwin

avant: bash --login -i

Josef
la source
1
La solution la plus simple de loin. J'espère qu'il n'y a pas d'effets secondaires.
RomanSt
1

Lorsque vous définissez le type TERM, vous dites à l'hôte quel TERMCAP utiliser pour dessiner dans la fenêtre du terminal. La plupart des hôtes * NIX ne savent pas ce qu'est un type de terme `` cygwin '', ils ne savent donc pas comment manipuler les caractères à l'écran tels que les insertions, les suppressions, les parchemins, les changements de police, etc.

Si vous modifiez la variable TERM dans CYGWIN avant telnet ou SSH en un hôte, vous obtiendrez de bien meilleurs résultats:

À CYGWIN:

d@test01 ~
$ TERM=ansi;export TERM
$ ssh suntest1

d@suntest1's password:
Sun Microsystems Inc.  SunOS 5.8     Generic patch    October 2001

d   pts/1         test01    Fri   Oct 12  00:15   still logged in
$ echo $TERM
ansi
$_

L'hôte sait maintenant que vous avez un type de terminal ANSI et il peut utiliser son fichier ANSI TERMCAP pour lui dire comment communiquer.

Si vous ne parvenez pas à le faire fonctionner et que tout fonctionne correctement, sauf le retour arrière, vous pouvez reprogrammer "getty" sur l'hôte auquel vous vous connectez pour reconnaître ce que vous voulez, et voici comment (c'est le plus ancien, le plus courant et le plus universel) moyen de résoudre les problèmes de retour arrière / suppression):

Vous SSH ou Telnet à votre hôte et dans l'hôte, vous exécutez la commande stty. Si vous appuyez sur la touche "RETOUR ARRIÈRE" et qu'elle ne revient pas en arrière, c'est parce que le terminal recherche probablement un caractère différent en fonction du type TERM. Plutôt que de fouiller tout cela, vous pouvez définir manuellement la définition de retour arrière sur la CLI ou dans votre fichier de profil .profile, .bashrc ou .bash dans votre répertoire $ HOME comme vous le souhaitez ou en fonction de la saveur de * NIX que vous êtes en utilisant.

Donc, si vous appuyez sur ^ H (c'est CONTROL-H) et que votre clé sauvegarde mais que vous appuyez sur la touche RETOUR ARRIÈRE et qu'elle n'essaie pas d'utiliser stty comme suit:

stty erase \*<HIT YOUR BACKSPACE KEY HERE>*[ENTER]

La plupart du temps, cela ressemblera à ceci:

stty erase \^?[ENTER]

Le '\' lui indique que le caractère suivant va être un caractère de contrôle non imprimable et l'accepter, pas "l'interpréter".

Une fois que vous avez appuyé sur [ENTER], vous devriez pouvoir appuyer sur votre touche [RETOUR ARRIÈRE] et la faire reculer / supprimer tout ce que vous avez tapé.

Vous pouvez définir cela dans votre shell.

Maintenant, si vous utilisez toujours VI, parfois la traduction ne fonctionne pas et vous devez réellement taper ^ H dans vi, mais c'est OK.

Vous auriez pu dire:

stty erase k [ENTER]

et il aurait littéralement traduit «k» dans le caractère d'effacement / suppression ..

-RÉ

TekOps
la source
0

Ok, j'ai eu ce problème avec la mise à jour manuelle d'une installation Cygwin. Quoi qu'il en soit, j'ai trouvé ce message , ce qui m'a conduit à la solution pour mon installation.

Le cygwin plus ancien avait un fichier /etc/terminfo/c/cygwin, mais dans le cygwin plus récent, il s'attendait à ce que le fichier soit /etc/terminfo/63/cygwin.

Une fois que j'ai copié le fichier "cygwin" à cet emplacement, la touche de retour arrière du shell bash a bien fonctionné, tout comme tab et d'autres.

user327463
la source
0

Changer la TERMvariable cygwinet l'ajouter SET TERM=cygwinau .batfichier n'a pas fonctionné pour moi, mais je l'ai corrigé. Voici ce que j'ai fait: Dans le gestionnaire de paquets en raison de l'installation, j'ai choisi d'installer xterm: X11 terminal emulator, après l'installation, j'ai ajouté SET TERM=xtermau .batfichier (comme proposé ci-dessus), lancé le terminal et dans Options -> menu Terminal sélectionné Type=xterm, puis redémarré le terminal. Le retour arrière a commencé à fonctionner correctement!

Remarque: si vous avez déjà installé cygwin - exécutez à nouveau le programme d'installation et ajoutez le package xterm.

Je suis entrain de courir:

  • OS = Windows 8 (x64)
  • Version setup.exe de Cygwin = 2.850 (x64)
  • Version Mitty = 1.2-beta1 (x86_64-pc-cygwin)
Argon
la source
0

A travaillé pour moi: dans l'invite de commande Windows, tapez

(echo; echo "export TERM=cygwin") >> ~/.bash_profile

Cela l'ajoutera au .bash_profile (pas .bashrc, qui ne fonctionnait pas pour moi, et avec un saut de ligne)

bjelli
la source
0

Après avoir passé 2 jours à lire des trucs en ligne. J'ai trouvé celui qui fonctionnait pour moi. Je ne sais pas si ce cas correspond à chacun. Mais cela a fonctionné comme un charme pour moi grâce à Yuksel

Le problème était avec les fichiers «termInfo», étapes qu'il a suggérées

  1. confirmer si le problème est lié au terminal en tapant dans CygWin Terminal, cela devrait donner (ignorer l'avertissement)

    less my_session.log

AVERTISSEMENT: le terminal n'est pas entièrement fonctionnel

  1. Obtenez les informations de 'TermCap' à quel chemin ou répertoire il est lié en tapant ci-dessous le code dans CygWin Terminal

    infocmp -C

vous devriez soit obtenir

infocmp: impossible d'ouvrir le fichier terminfo / usr / share / terminfo / 63 / cygwin

Ou vous pouvez également obtenir quelque chose commençant par un texte comme «Reconstruit via infocmp ...»

  1. Exécutez le code ci-dessous dans CygWin Terminal pour exécuter les diagnostics pour obtenir des détails supplémentaires sur le chemin d'accès où les fichiers sont enregistrés

    cygcheck -s

qui devrait vous répondre similaire au texte ci-dessous

Diagnostics de configuration Cygwin

...

C: / cygwin / système binaire, noacl

C: / cygwin / bin / usr / bin système binaire, noacl

C: / cygwin / lib / usr / lib système binaire, noacl

C: \ cygwin \ etc \ terminfo / usr / share / terminfo système binaire, noacl

préfixe cygdrive / utilisateur binaire cygdrive, noacl, posix = 0, auto

...

  1. vérifier pour la ligne similaire à

C: \ cygwin \ etc \ terminfo / usr / share / terminfo système binaire, noacl

de la sortie, vous avez obtenu de la 3ème étape. copiez maintenant tous les fichiers et dossiers qui existent dans / usr / share / terminfo dans le dossier C: \ cygwin \ etc \ terminfo - REMARQUE: ce dossier peut être différent du vôtre en fonction de l'installation

jaune et rouge
la source
0

Veuillez suivre l'image ci-dessous entrez la description de l'image ici

  1. Cliquez avec le bouton droit n'importe où dans la fenêtre Cygwin
  2. Cliquez sur options
  3. Cliquez sur l' Keysonglet
  4. Cocher Backarrow sends ^H
  5. Appuyez sur Appliquer.

C'est la seule chose qui a fonctionné pour moi, d'autant plus que si vous devez SSH sur un serveur (tous les correctifs ne fonctionneront pas), j'avais l'habitude d'ajouter stty erase ^?à mon .bashrc mais cela n'a résolu le problème que 80% du temps.

marque
la source
-1

Jamais rencontré votre problème. Essayez d'installer Terminal Emulator Mintty ( http://code.google.com/p/mintty/ ).

Il est disponible via le programme d'installation de Cygwin. Meilleur terminal pour cygwin.

Luciano Fiandesio
la source
Cela n'a pas aidé.
user620189
Même je suis coincé sur le même problème et de Minty, la fonctionnalité de retour arrière ne fonctionne pas. J'obtiens de l'espace lorsque je frappe sur le retour arrière sur le terminal menthe ainsi que sur le terminal cygwin
Rachel
@Rachel Avez-vous déjà résolu cela? Je vois le même problème avec une nouvelle installation de Cygwin. :(
SomeCallMeTim
@SomeCallMeTim: J'ai pu résoudre ce problème en utilisant Minty, cygwin se comporte parfois de manière très bizarre.
Rachel
@Rachel Merci, même si j'ai découvert que mon problème était que l'installation de Cygwin manquait certains fichiers importants (comme / usr / lib / terminfo). Je ne sais pas pourquoi ils manquaient; a trouvé quelqu'un d'autre avec ce problème, est entré dans la configuration et a dit à terminfo et termcap de réinstaller, et tout a fonctionné.
SomeCallMeTim