There is a server at my work that uses csh as the default shell.
I prefer bash, so whenever I login, I start bash
.
But for some reason, the backspace button deletes complete words instead of just deleting characters. Why is that? How do I change this and have the Bksp delete char by char??
FYI, Shift+Bksp deletes character by character. If possible, I'd like to have Shift+Bksp delete word by word. Only if possible.
Thanks
PS: Please don't tell me to hold the shift key; its downright annoying.
Best Answer
Some terminals send
^h
(character number 8) for the BackSpace key, and some send^?
(character number 127). Many terminal emulators can be configured, and most programs can be configured to know which key to expect. Obviously the two sides must agree.Stty is a way in which applications can query the terminal's configuration.
erase = ^?
means that your terminal description file on the server claims that when your terminal sends^?
, it means “erase the previous character”.werase = ^?
means that^?
means “erase the previous word”. There's a contradiction between these two settings.When you log in over ssh, the ssh client sends a name for the terminal, which is put in the
TERM
environment variable. Programs on the server then look up descriptions of the terminal in a database (called termcap or terminfo). If these descriptions are broken, or if a configuration file somewhere (such as/etc/profile
or~/.login
or~/.bashrc
) overrides the descriptions with wrong data, you might find that you have a mismatch. For example, one possible source for your problem is if some initialization file contains the commandstty werase '^?'
(forcing^?
to mean a word erase) while your terminal sends^?
for the backspace key.Ideally, you should fix the conflict, as a lot of programs will read this information.
In Putty, you can configure which of
^?
or^h
the BackSpace key sends. Check the value of this setting. Maybe the easiest way to fix your problem is to make Putty send^h
for BackSpace, and make sure the server uses that setting (stty erase '^h'
, to be put in~/.bashrc
, will force it).