diff --git a/plugins/vim-emulation/vim-emulation.vala b/plugins/vim-emulation/vim-emulation.vala index 92b9b2c851..585e4bf78b 100644 --- a/plugins/vim-emulation/vim-emulation.vala +++ b/plugins/vim-emulation/vim-emulation.vala @@ -25,7 +25,7 @@ public class Scratch.Plugins.VimEmulation : Peas.ExtensionBase, Peas.Activatable VISUAL } - Mode mode = Mode.INSERT; + Mode mode = Mode.COMMAND; string number = ""; string action = ""; bool g = false; @@ -141,12 +141,12 @@ public class Scratch.Plugins.VimEmulation : Peas.ExtensionBase, Peas.Activatable case Gdk.Key.Down: case Gdk.Key.j: case Gdk.Key.plus: - view.move_cursor (Gtk.MovementStep.DISPLAY_LINES, 1, false); + view.move_cursor (Gtk.MovementStep.PARAGRAPHS, 1, false); break; case Gdk.Key.Up: case Gdk.Key.k: case Gdk.Key.minus: - view.move_cursor (Gtk.MovementStep.DISPLAY_LINES, -1, false); + view.move_cursor (Gtk.MovementStep.PARAGRAPHS, -1, false); break; case Gdk.Key.Right: case Gdk.Key.l: @@ -154,7 +154,7 @@ public class Scratch.Plugins.VimEmulation : Peas.ExtensionBase, Peas.Activatable break; case Gdk.Key.End: case Gdk.Key.dollar: - view.move_cursor (Gtk.MovementStep.DISPLAY_LINE_ENDS, 1, false); + view.move_cursor (Gtk.MovementStep.PARAGRAPH_ENDS, 1, false); break; case Gdk.Key.u: view.undo (); @@ -191,7 +191,16 @@ public class Scratch.Plugins.VimEmulation : Peas.ExtensionBase, Peas.Activatable } mode = Mode.INSERT; - view.move_cursor (Gtk.MovementStep.DISPLAY_LINE_ENDS, 1, false); + view.move_cursor (Gtk.MovementStep.PARAGRAPH_ENDS, 1, false); + debug ("Vim Emulation: INSERT Mode!"); + break; + case Gdk.Key.a: + if (mode == Mode.INSERT) { + return false; + } + + mode = Mode.INSERT; + view.move_cursor (Gtk.MovementStep.VISUAL_POSITIONS, 1, false); debug ("Vim Emulation: INSERT Mode!"); break; case 46: // Dot "." @@ -201,11 +210,16 @@ public class Scratch.Plugins.VimEmulation : Peas.ExtensionBase, Peas.Activatable case Gdk.Key.Home: case Gdk.Key.@0: if (number == "") { - view.move_cursor (Gtk.MovementStep.DISPLAY_LINES, 1, false); + view.move_cursor (Gtk.MovementStep.PARAGRAPHS, -1, false); + view.move_cursor (Gtk.MovementStep.PARAGRAPH_ENDS, 1, false); + view.move_cursor (Gtk.MovementStep.VISUAL_POSITIONS, 1, false); } else { number += "0"; } + break; + case Gdk.Key.asciicircum: // Caret "^" + view.move_cursor (Gtk.MovementStep.PARAGRAPH_ENDS, -1, false); break; case Gdk.Key.e: view.move_cursor (Gtk.MovementStep.WORDS, number == "" ? 1 : int.parse (number), false);