Skip to main content

Backspace and Delete keys problem in vim

When I press arrow,backspace,del buttons in text editor, I expect something like "backspace" deletes the character to the left[of the cursor], "delete" deletes the character to the right and "arrow" should move cursor to correct direction in document.

Since I move to Feisty Fawn. I just notice that Backspace and Delete Keys are not act as it should be in VIM editor e.g. ,

In insert mode, the arrow buttons will insert the letters A, B, C, D each followed by a CR.
If I press backspace, the cursor moves back, but the letter doesn't go away.
Also delete button will deletes all letters that on the right of cursor and change case of previous letter.
Below is a pic when I type up, down, right, left, some text, backspace and del

[Some web said] "backspace key" will sent ASCII character 8[decimal] and "delete key" sent 127[decimal] [try man ascii for a list of the ASCII characterset].
The backspace key also has the representation ^H [Ctrl-H][use for open help in some app] and the DEL key has the representation ^[[3~.

First I guess may be it mess between terminal function and character issued when press problem key. Type "stty -a" on will show terminal line settings e.g. functions and it's character.
pnix@pnix-a7n:~$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; 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
-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
pnix@pnix-a7n:~$
For me erase is ^?. Then check terminal emulator settings to see character it sends when we press the backspace and delete keys. At a shell type ^V[backspace] e.g. Ctrl-V then Backspace and you will see either ^H or ^?. Mine backspace is ^? humm..it's not mess may be it vim configuration.

After some search, I found that vim will run in compatibility mode by default. [Compatibility mode means making vim act like the original vi, which you might want if you were used to working in other versions of Unix.]To make vim bahave as I expect, I create a file .vimrc in home directory and put "set nocompatible" in it.
pnix@pnix-a7n:~$ cat>.vimrc<> set nocompatible
> EOF
pnix@pnix-a7n:~$

Now backspace button would would only delete characters to the left of the cursos up to the point where you entered insert mode. So I add "set backspace=2"
pnix@pnix-a7n:~$ echo "set backspace=2">>.vimrc
pnix@pnix-a7n:~$

That's it. All keys now work as I want.

note:
set backspace=2 <==allows for backspace of items not inserted in this "insert session"
set nocompatible <==fix behaviour of Backspace and DEL keys
set smartindent <==umm.. for smart indent:)

Comments

Unknown said…
Wow, thanks. I read through a dozen of similar posts before finding yours. It's clear the .vimrc is the key to fixing this problem. Connecting from Mac OS X to FreeBSD, here's what I had to do to fix the *exact* symptoms you described above:

:set backspace=2
:set nocompatible
:set term=xterm-color
:set smartindent

The term can be set to whatever you use to connect to the server (in the Terminal preferences). exterm-color is the default in Mac OS X.
Anonymous said…
Thanks man, set backspace=2 did the trick. You are awesome! ;)
Anonymous said…
Thanks man, trying to learn Vim and it was only working correctly in a TTY. Now everything works fine.

Popular posts from this blog

Fixing sendmail take a long time to start

I notice that my database box[FC6+Oracle10.2] take along time to startup. Sendmail and sm-client very very slow to start[ about 5 minutes ]. There's something wrong in /etc/hosts file. 'newalises' command take long time to update and finish with error below. [root@ora10g ~]# newaliases WARNING: local host name (ora10g) is not qualified; see cf/README: WHO AM I? /etc/aliases: 76 aliases, longest 10 bytes, 765 bytes total [root@ora10g ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.1.55 ora10g [root@ora10g ~]# To fix this, custom hostname[ora10g] need to append to localhost line in /etc/hosts. [root@ora10g ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ora10g 192.168.1.55 ora10g [root@ora10g ~]# newaliases /etc/alia

Too many open files

Last week tomcat log file report many error about "Too many open files" when it has high traffic. Some in catalina_log say 2007-04-07 16:13:40 HttpProcessor[80][272] Starting background thread 2007-04-07 16:13:40 HttpConnector[80] accept: java.net.SocketException: Too many open files and here is from localhost_log 2007-04-07 16:13:40 StandardWrapperValve[myservlet]: Servlet.service() for servlet myservlet threw exception java.io.FileNotFoundException: /home/log/mylog_070407.log (Too many open files) This is because too many file descriptors're opened by tomcat. File descriptor can be limited in both system level and shell level. To check maximum number of fd in system type 'cat /proc/sys/fs/file-max'. In my case it is 65536(someone said it should set to 200000). Tomcat error when try to open socket number 272 so I think 65536 is ok for me for now. Anyway if u want to set it add 'fs.file-max = 200000' to /etc/sysctl.conf pnix@pnix-a7:~$ cat /proc/sys/fs/fil

using Class.getResource() load resource file in Eclipse

There are many ways to load resource file in java app. What sun recommended is using Class.getResource(" resource_name ") or Class.getResourceAsStream(" resource_name ") then you will get URL and InputStream respectively. If resource_name is specified without "/", it will be prepend with Class package. So resource file must be in same place[folder structure] as the Class. What I love to do is call getResource() with "/" and put resource file at the root of package. This way i can have separate resource folder. below is in Eclipse, 1. From Package explorer right click src folder->click import 2. In import dialog, Choose General->File System ->next 3. from directory:->Browse to your resource folder. 4. to folder:-> I add "resource" as a folder name under src folder. then click "Finish". In the code, load resource with this.getClass().getResource("/resource/buttons1.png") or this.getClass().getResourceAs