aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vim-mode/vim_mode.pl24
1 files changed, 23 insertions, 1 deletions
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl
index 4c91329..e861c71 100644
--- a/vim-mode/vim_mode.pl
+++ b/vim-mode/vim_mode.pl
@@ -297,6 +297,9 @@ my $movements
'W' => { func => \&cmd_movement_W },
'B' => { func => \&cmd_movement_B },
'E' => { func => \&cmd_movement_E },
+ # text-objects
+ 'i_' => { func => \&cmd_movement_i_ },
+ 'a_' => { func => \&cmd_movement_a_ },
# line movement
'0' => { func => \&cmd_movement_0 },
'^' => { func => \&cmd_movement_caret },
@@ -768,6 +771,19 @@ sub _end_of_WORD {
return $pos;
}
+sub cmd_movement_i_ {
+ my ($count, $pos, $repeat, $char) = @_;
+
+ _warn("i_ not implemented yet");
+ return;
+}
+sub cmd_movement_a_ {
+ my ($count, $pos, $repeat, $char) = @_;
+
+ _warn("a_ not implemented yet");
+ return;
+}
+
sub cmd_movement_0 {
_input_pos(0);
return;
@@ -1438,7 +1454,9 @@ sub handle_command_cmd {
print "Processing numeric prefix: $char" if DEBUG;
handle_numeric_prefix($char);
- } elsif (!$movement && exists $movements_multiple->{$char}) {
+ # text-objects (i a) are simulated with $movement
+ } elsif (!$movement && (exists $movements_multiple->{$char}
+ or $operator and ($char eq 'i' or $char eq 'a'))) {
print "Processing movement: $char" if DEBUG;
$movement = $char;
@@ -1527,6 +1545,10 @@ sub handle_command_cmd {
# Use the real movement command (like t or f) for operator
# below.
$char = substr $movement, 0, 1;
+ # i_ and a_ represent text-objects.
+ if ($char eq 'i' or $char eq 'a') {
+ $char .= '_';
+ }
$return = $movements->{$char}->{func}
->($numeric_prefix, $cur_pos, $repeat,
substr $movement, 1);