Make vi bindings inherit the defaults

This reduces code duplication and adds some previously unavailable
bindings that don't quite _violate_ the vi-principle (like
prevd-or-backward-word on alt-left) and matches other "impure" bindings
like \cf for forward-word (a quite emacs-ish binding) we already have.

Fixes #2412
Fixes #2472
Fixes #2255
This commit is contained in:
Fabian Homborg 2015-10-02 00:37:36 +02:00
parent 3472a39d07
commit c0e8ad6f1f
2 changed files with 9 additions and 56 deletions

View file

@ -912,7 +912,7 @@ You can change these key bindings using the <a href="commands.html#bind">bind</a
\subsection vi-mode Vi mode commands \subsection vi-mode Vi mode commands
Vi mode allows for the use of Vi-like commands at the prompt. Initially, <a href="#vi-mode-insert">insert mode</a> is active. @key{Escape} enters <a href="#vi-mode-command">command mode</a>. The commands available in command, insert and visual mode are described below. Vi mode allows for the use of Vi-like commands at the prompt. Initially, <a href="#vi-mode-insert">insert mode</a> is active. @key{Escape} enters <a href="#vi-mode-command">command mode</a>. The commands available in command, insert and visual mode are described below. Vi mode builds on top of <a href="#emacs-mode">Emacs mode</a>, so all keybindings mentioned there that do not contradict the ones mentioned here also work.
\subsubsection vi-mode-command Command mode \subsubsection vi-mode-command Command mode

View file

@ -5,6 +5,14 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish'
set init_mode $argv[1] set init_mode $argv[1]
end end
# Inherit default key bindings
# Do this first so vi-bindings win over default
fish_default_key_bindings -M insert
fish_default_key_bindings -M default
# Add a way to get out of insert mode
bind -M insert -m default \cc force-repaint
bind -M insert -m default \e backward-char force-repaint
## ##
## command mode ## command mode
@ -156,61 +164,6 @@ function fish_vi_key_bindings --description 'vi-like key bindings for fish'
bind '"*p' "commandline -i ( xsel -p; echo )[1]" bind '"*p' "commandline -i ( xsel -p; echo )[1]"
bind '"*P' backward-char "commandline -i ( xsel -p; echo )[1]" bind '"*P' backward-char "commandline -i ( xsel -p; echo )[1]"
#
# insert mode
#
bind -M insert "" self-insert
bind -M insert \n execute
bind -M insert -k dc delete-char
bind -M insert -k backspace backward-delete-char
bind -M insert \x7f backward-delete-char
# Mavericks Terminal.app shift-delete
bind -M insert \e\[3\;2~ backward-delete-char
bind -M insert \t complete
# OS X SnowLeopard doesn't have these keys. Don't show an annoying error message.
bind -M insert -k home beginning-of-line 2> /dev/null
bind -M insert -k end end-of-line 2> /dev/null
bind -M insert \e\[3\;2~ backward-delete-char # Mavericks Terminal.app shift-delete
bind -M insert \cx end-of-line
bind -M insert \e\[A up-or-search
bind -M insert \e\[B down-or-search
bind -M insert -k down down-or-search
bind -M insert -k up up-or-search
# Some linux VTs output these (why?)
bind -M insert \eOA up-or-search
bind -M insert \eOB down-or-search
bind -M insert \eOC forward-char
bind -M insert \eOD backward-char
bind -M insert \e\[C forward-char
bind -M insert \e\[D backward-char
bind -M insert -k right forward-char
bind -M insert -k left backward-char
# useful insert mode mappings
bind -M insert \ch backward-delete-char
bind -M insert \cw backward-kill-word
bind -M insert \cu backward-kill-line
bind -M insert \cp history-search-backward
bind -M insert \cn history-search-forward
bind -M insert \cb backward-word
bind -M insert \cf forward-word
bind -M insert -m default \cc force-repaint
bind -M insert -m default \e backward-char force-repaint
bind -M insert \cd exit
bind -M insert \ef forward-word
# #
# Lowercase r, enters replace-one mode # Lowercase r, enters replace-one mode
# #