From ebfe036c1bc1217ca74af3b14d33ab4b6181a458 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Fri, 1 Oct 2010 17:13:06 +0200 Subject: vim_mode: Add ge and gE. --- vim-mode/vim_mode.pl | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'vim-mode') diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index 44ebaae..ef7dd81 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -16,7 +16,7 @@ # can be used as well). # * Cursor motion: h l 0 ^ $ f t F T # * History motion: j k -# * Cursor word motion: w b e W B E +# * Cursor word motion: w b ge e W gE B E # * Yank and paste: y p P # * Change and delete: c d # * Delete at cursor: x X @@ -320,6 +320,7 @@ my $movements '~' => { func => \&cmd_movement_tilde }, '.' => {}, '"' => { func => \&cmd_movement_register }, + 'g' => { func => \&cmd_movement_g }, # g does many things # undo 'u' => { func => \&cmd_undo }, "\x12" => { func => \&cmd_redo }, # ctrl-r @@ -334,6 +335,7 @@ my $movements_multiple = 'T' => undef, 'r' => undef, '"' => undef, + 'g' => undef, "\x17" => undef, # ctrl-w }; @@ -966,6 +968,32 @@ sub cmd_movement_register { print "Changing register to $register" if DEBUG; } +sub cmd_movement_g { + my ($count, $pos, $repeat, $char) = @_; + + my $input = _input(); + # ge + if ($char eq 'e') { + $input = reverse $input; + $pos = length($input) - $pos - 1; + $pos = 0 if ($pos < 0); + + $pos = _beginning_of_word($input, $count, $pos); + $pos = length($input) - $pos - 1; + $pos = 0 if ($pos < 0); + _input_pos($pos); + # gE + } elsif ($char eq 'E') { + $input = reverse $input; + $pos = _beginning_of_WORD($input, $count, length($input) - $pos - 1); + if ($pos == -1) { + cmd_movement_0(); + } else { + _input_pos(length($input) - $pos - 1); + } + } +} + sub cmd_movement_ctrl_w { my ($count, $pos, $repeat, $char) = @_; -- cgit v1.2.3