diff options
-rw-r--r-- | vim-mode/vim_mode.pl | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index 12bff22..a91f081 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -172,6 +172,7 @@ my $movements 'E' => { func => \&cmd_movement_E }, # line movement '0' => { func => \&cmd_movement_0 }, + '^' => { func => \&cmd_movement_caret }, '$' => { func => \&cmd_movement_dollar }, # delete chars 'x' => { func => \&cmd_movement_x }, @@ -457,6 +458,21 @@ sub _end_of_WORD { sub cmd_movement_0 { _input_pos(0); } +sub cmd_movement_caret { + my $input = _input(); + my $pos; + # No whitespace at all. + if ($input !~ m/^\s/) { + $pos = 0; + # Some non-whitesapece, go to first one. + } elsif ($input =~ m/[^\s]/) { + $pos = $-[0]; + # Only whitespace, go to the end. + } else { + $pos = _input_len(); + } + _input_pos($pos); +} sub cmd_movement_dollar { _input_pos(_input_len()); } @@ -471,7 +487,7 @@ sub cmd_movement_i { _update_mode(M_INS); } sub cmd_movement_I { - cmd_movement_0(); + cmd_movement_caret(); _update_mode(M_INS); } sub cmd_movement_a { |