aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vim-mode/vim_mode.pl15
1 files changed, 9 insertions, 6 deletions
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl
index b0f739f..7c5f957 100644
--- a/vim-mode/vim_mode.pl
+++ b/vim-mode/vim_mode.pl
@@ -656,8 +656,9 @@ my $commands
repeatable => 1 },
# arrow like movement
- h => { char => 'h', func => \&cmd_h, type => C_NORMAL },
- l => { char => 'l', func => \&cmd_l, type => C_NORMAL },
+ h => { char => 'h', func => \&cmd_h, type => C_NORMAL },
+ l => { char => 'l', func => \&cmd_l, type => C_NORMAL },
+ "\x08" => { char => '<BS>', func => \&cmd_h, type => C_NORMAL },
"\x7F" => { char => '<BS>', func => \&cmd_h, type => C_NORMAL },
' ' => { char => '<Space>', func => \&cmd_l, type => C_NORMAL },
# history movement
@@ -2346,6 +2347,8 @@ sub ex_map {
my $cmd = $map->{cmd};
if (defined $cmd) {
next if $map->{char} eq $cmd->{char}; # skip default mappings
+ # FIXME: Hack so <C-H> doesn't show up as mapped to <BS>.
+ next if $map->{char} eq '<C-H>' and $cmd->{char} eq '<BS>';
next if $map->{char} !~ /^\Q$search\E/; # skip non-matches
$active_window->print(sprintf "%-15s %s", $map->{char},
$cmd->{char});
@@ -2741,9 +2744,9 @@ sub got_key {
_stop();
return;
- # Pressing delete resets insert mode repetition.
+ # Pressing delete resets insert mode repetition (8 = BS, 127 = DEL).
# TODO: maybe allow it
- } elsif ($key == 127) {
+ } elsif ($key == 8 || $key == 127) {
@insert_buf = ();
# All other entered characters need to be stored to allow repeat of
# insert mode. Ignore delete and control characters.
@@ -3151,8 +3154,8 @@ sub handle_command_cmd {
sub handle_command_ex {
my ($key) = @_;
- # DEL key - remove last character
- if ($key == 127) {
+ # BS key (8) or DEL key (127) - remove last character.
+ if ($key == 8 || $key == 127) {
print "Delete" if DEBUG;
if (@ex_buf > 0) {
pop @ex_buf;