Wenn ich in Vim die backspace
-Taste im insert
-Modus drücke, wird ^?
-Zeichen verlassen und das zu löschende Zeichen nicht gelöscht.
Ich habe folgendes in meinem .vimrc
syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel
Dies geschieht auch im Befehlsmodus. Wenn ich falsch W
anstelle von w
zum Speichern eingebe, drücke ich die backspace
-Taste, und es gibt Folgendes:
:W^?
Irgendeine Idee auf was ist falsch und wie man es reparieren kann ?!
UPDATE: Bevor ich diese Frage an SO stelle, habe ich eine einfache Google-Suche durchgeführt und alle Vorschläge von der ersten Suchergebnisseite aus versucht, jedoch erfolglos.
@strcat Ich verwende vim Version 7.0.237, KDE Console 1.6.4, Linux 2.6.18 x86_64.
@ greaywh w.r.t cat -v, zum löschen bekomme ich ^[[3~
und für die Rücktaste bekomme ich ^?
.
Die Ausgabe von stty -a
lautet wie folgt
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
^?
ist das Löschzeichen; Das Rückschrittzeichen ist ^H
. Nur eine davon wird von Ihrem Terminal als "Löschen" erkannt. Dies wird durch die Terminaleinstellungen stty
bestimmt. (bash und andere Shells verstehen dies als Problem und tun etwas Besonderes, um beide zu erkennen)
Wenn Ihr Terminalemulator (ssh, PuTTY, xterm, was auch immer) Ihren Terminaleinstellungen nicht zustimmt, wird dieses Verhalten angezeigt. Normalerweise ist dies standardmäßig richtig, aber sehr oft setzen Leute stty
-Befehle in ihre .bashrc-Anweisung ein, wodurch die Dinge zerstört werden.
Sie haben wahrscheinlich etwas wie stty erase ^H
in Ihrer bashrc. Wenn dies der Fall ist, löschen Sie es oder ändern Sie die Einstellungen Ihres Terminals, damit der Rückschritt ^H
anstelle von DEL (^?
) gesendet wird.
Sie können dies auch mit vim-Zuordnungen beheben, das grundlegende Problem wird jedoch ignoriert.
Aus dem vim-Wiki Backspace_and_delete_problems habe ich dann :help :fixdel
gelesen und es schlägt folgendes vor:
if &term == "termname"
set t_kb=^V<BS>
fixdel
endif
Dabei ist "^ V" CTRL-V und "" die Rücktaste
(nicht vier Zeichen eingeben!). Ersetzen Sie "termname"
mit Ihrem Terminalnamen.
Für mich macht die fixdel
die Rücktaste wie Löschen. Mein erster Fehler war auch die STRG-V-Rücktaste in gvim. Machen Sie auf dem System, dass Sie den Schlüssel nicht richtig funktionieren lassen können, damit er den Rücktaste-Schlüssel einfügt, den die problematische Sitzung sieht.
Ich habe jetzt in meinem .vimrc
:
if &term == "xterm-256color"
set t_kb=^?
endif
Versuchen ctrl+del/ctrl+backspace oder alt+del/alt+backspaceIch kann mich nicht erinnern, welche, aber ich denke, es wird den Trick für Sie tun.
Wenn das nicht funktioniert, versuchen Sie es shift+backspace/del. Ich bin bereits auf dieses Problem gestoßen. Es gibt eine Kombinationstaste, mit der Sie den richtigen Zeichencode zum Löschen senden können.
Hatte genau das gleiche Problem, nur dass Strg + H für mich nicht funktionierte. stty
-Einstellungen sind auch in Ordnung. Ich möchte nur meine Umgebung erwähnen, wenn jemand die gleichen Probleme hat:
Nach dem Hinzufügen von fixdel
zu .vimrc
funktioniert es! Alle oben genannten Korrekturen funktionierten nicht für mich.
Eine gute Lösung für dieses Problem besteht darin, die Einstellung "Terminal> Tastatur" so einzustellen, dass die Rücktaste in PuTTY auf "Control-H" gesetzt wird. Dies ist der Fall, wenn Sie PuTTY verwenden und das "^?" Problem beim Drücken der Rücktaste.
Ich habe hier einen Artikel erstellt:
https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/
Danke an @ j03m für den Vorschlag!
Diese Antwort hat für mich funktioniert: http://vim.wikia.com/wiki/Backspace_and_delete_problems
Grundsätzlich funktioniert set backspace=2
in .vimrc.
Versuchen Sie Folgendes hinzuzufügen:
noremap! <C-?> <C-h>
zu Ihrem ~/.vimrc
.
Diese Karten C-? backspace und arbeitete für mich.
Ich hatte das gleiche Problem, wo vim backspace ^?
verlässt, während es in der Befehlszeile richtig funktioniert.
Dies hat bei mir mit vim Mapping funktioniert:
In .vimrc, type: imap ^? ^H
Dadurch wird CTRL-H (der Standardrückschritt in vim) der Rücktaste zugeordnet.
put stty löschen ^? in Ihrer .bashrc
Führe deine .bashrc aus
befehl ausführen: 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
Das Löschen wird jetzt mit dem neuen Wert ^?
geändert und Ihr Rückschritt funktioniert jetzt.
Wenn Sie auf einem Mac Terminal verwenden, gehen Sie zu Einstellungen -> Profile -> Erweitert und wählen Sie "Delete Sends Control-H" aus.
Wenn Sie KDE verwenden, kenne ich diesen Schmerz ... Dies ist die umfassendste Lösung, die ich bisher gefunden habe http://www.yalla.nu/blog/post/86
Für mich war es ein stty Problem, ich hatte eine ähnliche stty -a
Ausgabe wie deine.
Es wurde für mich durch Ausführen von stty sane
behoben.
Dies hat nicht nur das Problem mit der Rücktaste/Entf behoben, sondern auch die Pfeiltasten.
Ich hatte dieses Problem und fand die folgende Einstellung in meiner .vimrc:
:set t_kb=^H
Durch das Entfernen dieser Zeile wurde das Problem behoben.
Unter FreeBSD mit CSH sollten Sie dies in Ihrer .cshrc-Datei ersetzen:
bindkey "^W" backward-delete-Word
Mit diesem :
bindkey "^?" backward-delete-Word