Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

bash home/end/delete key inserting tilde, or if preceded by escape key, [1~

say I type echo hellp, move cursor to hel|lp and type delete, and bam, i got ~tilde say I type echo hellp, move cursor to hel|lp and type esc then delete, and bam, i got [3~

$ echo hel~lp
hel~lp

$ echo hell[3~o
hell[3~o
~

$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.

what i want is cmd.exe like behaviour,

I want Esc to clear the current line / buffer I want Home to move cursor to start of line before first character I want End to move cursor to end of line before first character I want delete to delete the next character (right of cursor) from current line/buffer

What do I have to edit to fix this? Is this default on your bash ?

update: i'm on a windows machine running a windows program, sh.exe ( as you can see above GNU bash), compiled with mingw for msys

$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
share|improve this question
    
windows, no terminal emulator, msys.bat, if I knew how to report the setting, I wouldn't be asking how to set them –  optional Feb 16 '13 at 3:39
add comment

2 Answers

up vote 4 down vote accepted

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

share|improve this answer
add comment

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.

share|improve this answer
1  
your answer doesn't help, if you can't tell me what file edit, please delete your answer, thanks –  optional Feb 16 '13 at 3:49
1  
start msys.bat --mintty does have home/end/delete working as it should, but sh.exe could have the same, the question is how -- your response is snooty in a rtfm way but otherwise unhelpful –  optional Feb 16 '13 at 4:37
4  
@optional: wow, "thanks" for that. Given I have spent quite some minutes writing up an answer that provides alternatives and not at last pointers for further investigation that's a pretty "nice" comment. –  0xC0000022L Feb 16 '13 at 4:40
4  
@optional - You are the one that comes across as snooty; and ungrateful at that. You got a solid answer: use the correct tool for the job, If you can't install anything new, tell us that instead of complaining. –  Nifle Feb 16 '13 at 9:48
3  
@optional did you really ask someone to delete their (correct) answer just because it is not what you were looking for? No, you didn't right? You can't be that presumptuous right? You are a normal, polite user who wants help from the nice people on SU who freely give their time to try and help solve your problem right? OK, I must have misread your comment. –  terdon Feb 16 '13 at 11:36
show 2 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.