vim retour arrière laisse ^?

Dans Vim, quand je touche la touche de backspace en mode insert , ça laisse ^? caractère et ne supprime pas le caractère qu’il est supposé supprimer.

J’ai le suivant dans mon .vimrc

 syntax on set number set expandtab set incsearch set nocompatible set backspace=indent,eol,start fixdel 

Cela se produit également en mode commande. Lorsque je tape à tort W au lieu de w pour enregistrer, j’appuie sur la touche de backspace et cela me donne les informations suivantes:

 :W^? 

Une idée sur ce qui ne va pas et comment y remédier?!

MISE À JOUR: avant de poster cette question à SO, j’ai effectué une recherche de base sur Google et essayé toutes les suggestions de la première page des résultats de recherche, mais sans succès.

@strcat J’utilise la version vim 7.0.237, la console KDE 1.6.4, la machine Linux 2.6.18 x86_64.

@graywh wrt cat -v, pour supprimer, j’obtiens ^[[3~ et pour backspace, je reçois ^? .

La sortie de stty -a est la suivante

 speed 38400 baud; rows 38; columns 194; line = 0; intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr -ignbrk -brkint -ignpar -parmrk -inpck -issortingp -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke 

^? est le caractère de suppression; le caractère de retour arrière est ^H Un seul de ceux-ci est reconnu par votre terminal comme “effacement”, et ceci est déterminé par les parameters du terminal, stty . (bash et autres shells comprennent cela comme un problème et font des choses spéciales pour reconnaître les deux)

Si votre émulateur de terminal (ssh, putty, xterm, etc.) n’est pas d’accord avec les parameters de votre terminal, alors vous voyez ce comportement. Habituellement, c’est juste par défaut, mais très souvent les gens vont mettre des commandes stty dans leur .bashrc, ce qui brise les choses.

Vous avez probablement quelque chose comme stty erase ^H dans votre bashrc. Si vous le faites, enlevez-le ou modifiez les parameters de votre terminal pour que le retour arrière envoie ^H au lieu de DEL ( ^? )

Vous pouvez également résoudre ce problème avec les mappages vim, mais en ignorant le problème de base.

S’il vous plaît vérifier le lien ci-dessous pour aider à déboguer votre problème:

http://vim.wikia.com/wiki/Backspace_and_delete_problems

MODIFIER:

J’ai trouvé ce qui semble être un problème similaire à celui décrit par vous:

http://lj4newbies.blogspot.com/2007/05/backspace-and-delete-keys-problem-in.html

À partir du wiki vim Backspace_and_delete_problems , j’ai lu :help :fixdel cela suggère ceci:

 if &term == "termname" set t_kb=^V fixdel endif 

Où “^ V” est CTRL-V et “” est la touche retour arrière
(ne tapez pas quatre caractères!). Remplacez “termname”
avec votre nom de terminal.

Pour moi, le fixdel fait fonctionner le backspace comme une suppression. Ma première erreur a également été de faire le retour arrière CTRL-V dans gvim, faites sur le système que vous ne pouvez pas faire fonctionner correctement la clé pour coller la clé de retour arrière que la session problématique voit.

J’ai maintenant dans mon .vimrc :

 if &term == "xterm-256color" set t_kb=^? endif 

Essayez ctrl + del / ctrl + backspace ou alt + del / alt + backspace , je ne me souviens plus de qui, mais je pense que cela fera l’affaire.

Si cela ne fonctionne pas, essayez shift + backspace / del . J’ai déjà rencontré ce problème, il y a une touche combinée sur laquelle vous pouvez appuyer pour envoyer le code de caractère correct pour effectuer votre suppression.

Avait exactement le même problème, sauf que Ctrl + H ne fonctionnait pas pour moi. parameters stty sont également bien. Je veux juste mentionner mon environnement, si quelqu’un a les mêmes problèmes:

  • Utiliser cygwin avec xterm, sous X ofcourse 🙂
  • Ssh’ed à RHEL6.4-> bash-> tmux-> vim

Après avoir ajouté fixdel à .vimrc ça marche! Toutes les corrections ci-dessus ne fonctionnaient pas pour moi.

J’ai eu le même problème où vim backspace laisse ^? , en ligne de commande, cela fonctionnait correctement.

C’est ce qui a fonctionné pour moi, en utilisant le mappage de vim:

 In .vimrc, type: imap ^? ^H 

Cela va mapper CTRL-H (qui est le retour arrière par défaut dans vim) à la touche de retour arrière. J’espère que cela pourra aider.

Une bonne solution à ce problème consiste à définir les parameters “Terminal> Keyboard” pour mapper la touche Backspace sur “Control-H” dans PuTTY; C’est si vous utilisez PuTTY et expérimentez le “^?” problème lorsque vous appuyez sur la touche Retour arrière.

J’ai créé un article à ce sujet ici:

https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/

Merci à @ j03m pour la suggestion!

mettre stty erase ^? dans votre .bashrc

Exécutez votre .bashrc

commande d’exécution: stty -a

 speed 38400 baud; rows 48; columns 157; line = 0; intr = ^C; quit = ^\; ***erase = ^?***; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr -ignbrk -brkint -ignpar -parmrk -inpck -issortingp -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke 

Effacer sera maintenant changé avec une nouvelle valeur ^? et votre retour arrière fonctionnera maintenant.

Sur Mac, si vous utilisez un terminal, allez dans Preferences -> Profiles -> Advanced, puis sélectionnez “Delete Sends Control-H”

Essayez d’append:

 noremap!   

à votre ~/.vimrc .

Cela cartographie C-? pour revenir en arrière et a travaillé pour moi.

Si vous utilisez KDE, je connais cette douleur. C’est la solution la plus complète que j’ai trouvée jusqu’à présent http://www.yalla.nu/blog/post/86

J’ai eu ce problème et trouvé le paramètre suivant dans mon .vimrc:

 :set t_kb=^H 

Supprimer cette ligne a résolu le problème.

Sous FreeBSD avec CSH, vous devez remplacer ceci dans votre fichier .cshrc:

 bindkey "^W" backward-delete-word 

Avec ça :

 bindkey "^?" backward-delete-word 

Cette réponse a fonctionné pour moi: http://vim.wikia.com/wiki/Backspace_and_delete_problems

Fondamentalement, mettre set backspace=2 dans les travaux de .vimrc.