Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

vim backspace leaves ^?

In Vim, when I hit the backspace key in the insert mode, it leaves ^? character and does not delete the character it is suppose to delete.

I have the following in my .vimrc

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

This happens in the command mode too. When I wrongly type W instead of w to save, I press backspace key and it gives me the following:

:W^? 

Any idea on whats wrong and how to fix it?!

UPDATE: before posting this question to SO, I have done a basic google search and tried all the suggestion from the first page of search result but unsuccessful.

@strcat I'm using vim version 7.0.237, KDE console 1.6.4, Linux 2.6.18 x86_64 machine.

@graywh w.r.t cat -v, for delete, I get ^[[3~ and for backspace, I get ^?.

The output of stty -a is as follows

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 
like image 973
Sangeeth Saravanaraj Avatar asked Mar 14 '12 11:03

Sangeeth Saravanaraj


People also ask

Why is my Backspace not working in vim?

To fix “not working” backspace key in the insert mode permanently, add set backspace=indent,eol,start command to vi / vim configuration file in your $HOME directory.

Does Backspace work in vim?

Backspace in vim is done with X (and delete with x ), but often what you really wanted to do was db for example to delete until the beginning of the word, or daw to delete the whole word etc.

Why is Backspace not working Linux?

Checking Terminal Settings with stty The -a flag will give a human-readable output of the control characters. Look for the "erase" character. If it says "^H," then it uses the older Backspace character. Fortunately, you can also fix this with the stty command.


1 Answers

^? is the delete character; the backspace character is ^H. Only one of these is recognized by your terminal as "erase", and this is determined by the terminal settings, stty. (bash and other shells understand this as a problem and do special things to recognize both)

If your terminal emulator (ssh, putty, xterm, whatever) disagrees with your terminal settings, then you see this behavior. Usually it's right by default, but very often people will put stty commands in their .bashrc which breaks things.

You probably have something like stty erase ^H in your bashrc. If you do, get rid of it, or change your terminal settings to have backspace send ^H instead of DEL (^?)

You can also fix this with vim mappings, but that's ignoring the basic problem.

like image 170
evil otto Avatar answered Oct 10 '22 10:10

evil otto