wake-up-neo.net

vim Rücktaste verlässt ^?

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
48

^? 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.

62
evil otto

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
5
Morgan

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.

4
Ryan

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:

  • Verwenden von cygwin mit xterm, unter X ofcourse :)
  • Ssh'ed zu RHEL6.4-> bash-> tmux-> vim

Nach dem Hinzufügen von fixdel zu .vimrc funktioniert es! Alle oben genannten Korrekturen funktionierten nicht für mich. 

3
holms

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!

3
Alvin Bunk

Diese Antwort hat für mich funktioniert: http://vim.wikia.com/wiki/Backspace_and_delete_problems

Grundsätzlich funktioniert set backspace=2 in .vimrc.

2
dzhi

Versuchen Sie Folgendes hinzuzufügen:

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

zu Ihrem ~/.vimrc.

Diese Karten C-? backspace und arbeitete für mich.

2
Taiki

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.

2
BRASIL

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.

1
Parth

Wenn Sie auf einem Mac Terminal verwenden, gehen Sie zu Einstellungen -> Profile -> Erweitert und wählen Sie "Delete Sends Control-H" aus.

1
meetalexjohnson

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

0
8A52

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.

0
OmaruSensei

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.

0
frankster

Unter FreeBSD mit CSH sollten Sie dies in Ihrer .cshrc-Datei ersetzen:

bindkey "^W" backward-delete-Word

Mit diesem :

bindkey "^?" backward-delete-Word
0