web-dev-qa-db-fra.com

vim backspace quitte ^?

Dans Vim, lorsque je tape la touche backspace en mode insert, il laisse le caractère ^? et ne supprime pas le caractère qu'il est supposé supprimer. 

J'ai les éléments suivants dans mon .vimrc

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

Cela se produit aussi en mode commande. Quand je tape à tort W au lieu de w pour enregistrer, j'appuie sur la touche backspace et le résultat est le suivant:

:W^?

Toute 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 Google de base et essayé toutes les suggestions de la première page du résultat de la recherche, mais sans succès. 

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

@graywh w.r.t cat -v, pour la suppression, je reçois ^[[3~ et pour le retour arrière, 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 = <undef>; eol2 = <undef>; swtch = <undef>; 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 -istrip -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
48

^? est le caractère de suppression; le caractère de retour arrière est ^H. Votre terminal ne reconnaît qu’un «effacement», déterminé par les paramètres du terminal, stty. (bash et d'autres obus 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, ou autre) n’est pas d’accord avec les paramètres de votre terminal, vous constatez ce problème. C'est généralement correct par défaut, mais très souvent, les gens vont mettre des commandes stty dans leur .bashrc qui casse des choses.

Vous avez probablement quelque chose comme stty erase ^H dans votre base. Si vous le faites, supprimez-le ou modifiez les paramètres 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 c'est ignorer le problème de base.

62
evil otto

Sur le wiki vim Backspace_and_delete_problems , j'ai lu :help :fixdel qui suggère ceci:

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

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

Pour moi, la fixdel fait que le retour arrière fonctionne comme un effacement. Ma première erreur a aussi été de faire le retour arrière CTRL-V dans gvim, faites sur le système pour que la clé ne fonctionne pas correctement afin de coller la touche de retour arrière visible par la session problématique.

J'ai maintenant dans mon .vimrc:

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

Essayer ctrl+del/ctrl+backspace ou alt+del/alt+backspaceJe ne me souviens plus lequel, mais je pense que cela fera l'affaire pour vous.

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

4
Ryan

Avait exactement le même problème, sauf que Ctrl + H ne fonctionnait pas pour moi. Les paramètres stty conviennent également. Je veux juste parler de mon environnement, si quelqu'un a les mêmes problèmes:

  • Utilisation de cygwin avec xterm, sous X ofcourse :)
  • Ssh'ed à RHEL6.4-> bash-> tmux-> vim

Après avoir ajouté fixdel à .vimrc, cela fonctionne! Tous les correctifs ci-dessus ne fonctionnaient pas pour moi. 

3
holms

Une bonne solution à ce problème consiste à définir les paramètres "Terminal> Keyboard" pour mapper la touche Retour arrière sur "Control-H" dans PuTTY; C'est si vous utilisez PuTTY et que vous rencontrez 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!

3
Alvin Bunk

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

Fondamentalement, mettre set backspace=2 dans .vimrc fonctionne.

2
dzhi

Essayez d'ajouter:

noremap! <C-?> <C-h>

à votre ~/.vimrc.

Cette cartes C-? revenir en arrière et a travaillé pour moi.

2
Taiki

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

Voici ce qui a fonctionné pour moi, en utilisant le mappage vim:

In .vimrc, type:      imap ^? ^H

Cela mappera CTRL-H (qui est le retour arrière par défaut dans vim) à la touche de retour arrière .

2
BRASIL

put stty erase ^? dans votre .bashrc 

Lancez votre .bashrc

exécuter la commande: stty -a

speed 38400 baud; rows 48; columns 157; line = 0;
intr = ^C; quit = ^\; ***erase = ^?***; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; 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 -istrip -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

La suppression va maintenant être modifiée avec la nouvelle valeur ^? et votre retour arrière fonctionnera maintenant.

1
Parth

Sur Mac, si vous utilisez Terminal, allez dans Préférences -> Profils -> Avancé, puis sélectionnez "Supprimer envoie Control-H".

1
meetalexjohnson

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

0
8A52

Pour moi, c’était un problème stty , j’ai eu une sortie stty -a similaire à la vôtre.
Cela a été corrigé pour moi en exécutant stty sane.

Non seulement cela corrigeait le problème de retour arrière/suppr, mais également les touches fléchées.

0
OmaruSensei

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.

0
frankster

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

bindkey "^W" backward-delete-Word

Avec ça :

bindkey "^?" backward-delete-Word
0
Abdelilah Benaou