shell's keyboard mapping
configurationother_softwareshells-keyboard-mapping

This is about assigning keys right, especially the well known [CTRL]+[left arrow] to move the cursor back one word. Looking for this I spent lots of time reading this outstanding page and others. But none of them kept these information as short as possible and that is what I am going to try here. Notice that this is not shell independent, so that we need to individually setup this. First off to find a keys corresponding keycode (which you need for any config) there are several possibilities:

  • Press [CTRL]+V
  • use the read command

Both of which will return something like ^[[1;5D to you.

bash #

  • bash relies on a package called readline, which uses ~/.inputrc as configuration file:

    "e[1;5C": forward-word
    
  • bind -l lets one look up which commands are available

  • bind -f .inputrc will load your new configuration

csh and tcsh #

  • look up an action, which the shell should perform, when you press this key combination with

    bindkey -l
    

    . I found vi-word-fwd and vi-word-back useful.

  • open your ~/.cshrc and append things you looked up this way with e.g.

    bindkey "^[[1;5C" vi-word-fwd   # CTRL+RIGHT
    bindkey "^[[1;5D" vi-word-back  # CTRL+LEFT
    bindkey "^[[1;3C" vi-word-fwd   # ALT+RIGHT
    bindkey "^[[1;3D" vi-word-back  # ALT+LEFT
    bindkey "^[[3~"   delete-char   # Delete key
    
  • restart your csh

reset says 'Erase is backspace.' #

When you got this and you try to remove chars by hitting backspace, chances are that you won't remove chars, but actually insert something like ?^. That can easily be fixed:

stty erase '^?'

investigation pending #

Why the heck do both ^- and ^/ return ^_? Btw: CTRL+_ will undo changes in GNU readline.

sh #

The plain old sh under FreeBSD uses libedit instead of readline. Its configuration file is called ~/.editrc and a man page man 5 editrc exists. It also supports a bind command, but with a slightly different syntax compared to csh:

bind ';5C' vi-next-big-word
bind ';5D' vi-prev-big-word
bind ';3C' vi-next-big-word
bind ';3D' vi-prev-big-word
bind '^R'  ed-search-prev-history
top