bash home/end/delete key is inserting a tilde, or if preceded by escape key, [1~ [3~
You customize bash via an .inputrc
file in your /home/username
, you can copy the default
cp /etc/inputrc.default ~/.inputrc
here is mine (comments start with # )
# Key-bindings for the command-line editor.
# Ask before displaying >50 items
# Since $WINDIR $PATH var can be in $PATH, this could list
# all window exectables in C:\WINDOWS
set completion-query-items 50
# Ignore case for the command-line-completion functionality
# on: default to a Windows style console
# off: default to a *nix style console
set completion-ignore-case on
# none, visible or audible
set bell-style audible
# disable/enable 8bit input
set meta-flag on
set input-meta on
set output-meta off
set convert-meta on
# visible-stats
# Append a mark according to the file type in a listing
set visible-stats off
set mark-directories on
# Show all instead of beeping first
set show-all-if-ambiguous off
# MSYSTEM is emacs based
$if mode=emacs
# Common to Console & RXVT
"\C-?": backward-kill-line # Ctrl-BackSpace
"\e[2~": paste-from-clipboard # "Ins. Key"
"\e[5~": beginning-of-history # Page up
"\e[6~": end-of-history # Page down
$if term=msys # RXVT
"\e[7~": beginning-of-line # Home Key
"\e[8~": end-of-line # End Key
"\e[11~": display-shell-version # F1
"\e[15~": re-read-init-file # F5
#$endif
#$if term=cygwin # Console
$else
"\e[1~": beginning-of-line # Home Key
"\e[4~": end-of-line # End Key
"\e[3~": delete-char # Delete Key
#~ "\e\e[D": backward-word # Alt-LeftArrow
#~ "\e\e[C": forward-word # Alt-RightArrow
"\M-\e[D": backward-word # Alt-LeftArrow
"\M-\e[C": forward-word # Alt-RightArrow
`#~` "\C-\E[D": backward-word # Ctrl-LeftArrow, nowork, can't be made to work
#~`enter preformatted text here` "\C-\E[C": forward-word # Ctrl-RightArrow, nowork, can't be made to work
#~ to see current bindings use bind -q backward-kill-line
"\e\e": kill-whole-line # double/triple escape works :) Esc/Escape to delete current line like cmd.exe
$endif
$endif
to find out what you need to type in your inputrc on the left side (the escape code, as it can vary between laptop/desktop...), at the prompt type echo '
then type Ctrl-V
followed by the key , like Home
, then type '
example
$ echo ' home key ^[[1~ '
home key
~
$ echo ' end key ^[[4~ '
end key
~
$ echo ' pg up page up ^[[5~ '
pg up page up
~
$ echo ' pg dn page down ^[[6~ '
pg dn page down
~
then replace each ^[
with \e
add \M-
for Alt
theoretically you'd use \C-
for Ctrl
but it currently doesn't work (windows limitation)
the available commands (like backward-kill-line
) are listed in http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029
you can view existing keyboard shortcuts/bindings with bind -p
or
$ bind -q backward-kill-word
backward-kill-word can be invoked via "\M-\C-h", "\M-\C-?".
~
$ bind -q backward-word
backward-word can be invoked via "\M-\M-[D", "\M-b", "\C-\E[[D".
~
$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[H".
~
don't mess with TERMCAP
Well, since you say you're working on Windows and not using a proper terminal emulator such as PuTTY (with mintty, puttycyg et al), I would recommend you consult the readline documentation and learn the shortcuts for readline. It'll be better in the long run.
If you were to use a terminal emulator instead of the console window (not talking about the interpreter/shell here) that comes with Windows, you'd get a more configurable alternative. Once you attempt using other programs like Vim, things will only get worse.
The gist: use a proper terminal emulator, even on Windows or learn the readline shortcuts. I tested the ones I use most just now and they work with msys.bat
.
mingw-get install mintty && mintty
The file to edit would be /usr/share/terminfo
(which doesn't exist in MinGW) - use tic
to "compile" rules (which isn't even included because everyone knows that the support would be severely crippled). However, I haven't seen any useful development to make this even near usable on Windows. This is why you should use a proper terminal emulator in the first place.
But I'm sure a surgeon will be able to use a kitchen knife for surgery, so why shouldn't you use the Windows built-in console windows. Good luck.
Check for installation of Readline
When this happens on a minimal installation of recent Debian/Ubuntu, it's probably because you haven't installed the readline-common
package. Simply installing the package will solve it.
E.g. on Docker with Debian Stretch typing ls
HOME:
$ docker run --rm -it debian:stretch
root@6ae7baea9e5a:/# ls~
$ docker run -it --name=debian-stretch-readline-temp debian:stretch
root@2092cb968232:/# apt-get update
root@2092cb968232:/# apt-get install readline-common
$ docker commit debian-stretch-readline-temp debian-stretch-with-readline
$ docker run --rm -it debian-stretch-with-readline
root@53739343e9f7:/# ls
Please note that after installing readline-common it will only have effect on new login shells.