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
^?
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.
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
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.
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:
Après avoir ajouté fixdel
à .vimrc
, cela fonctionne! Tous les correctifs ci-dessus ne fonctionnaient pas pour moi.
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!
Cette réponse a fonctionné pour moi: http://vim.wikia.com/wiki/Backspace_and_delete_problems
Fondamentalement, mettre set backspace=2
dans .vimrc fonctionne.
Essayez d'ajouter:
noremap! <C-?> <C-h>
à votre ~/.vimrc
.
Cette cartes C-? revenir en arrière et a travaillé pour moi.
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 .
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.
Sur Mac, si vous utilisez Terminal, allez dans Préférences -> Profils -> Avancé, puis sélectionnez "Supprimer envoie Control-H".
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
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.
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