diff --git a/lib/ace/document.js b/lib/ace/document.js index fb3734a2..a60ed0e9 100644 --- a/lib/ace/document.js +++ b/lib/ace/document.js @@ -247,7 +247,8 @@ var Document = function(text) { if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length-1).length; - } + } else if (position.row < 0) + position.row = 0; return position; }; diff --git a/lib/ace/keyboard/vim/commands.js b/lib/ace/keyboard/vim/commands.js index 52d8a271..151aba04 100644 --- a/lib/ace/keyboard/vim/commands.js +++ b/lib/ace/keyboard/vim/commands.js @@ -32,6 +32,7 @@ define(function(require, exports, module) { "never use strict"; +var lang = require("../../lib/lang"); var util = require("./maps/util"); var motions = require("./maps/motions"); var operators = require("./maps/operators"); @@ -207,13 +208,14 @@ var actions = exports.actions = { editor.setOverwrite(false); if (defaultReg.isLine) { var pos = editor.getCursorPosition(); - var lines = defaultReg.text.split("\n"); - editor.session.getDocument().insertLines(pos.row + 1, lines); + pos.column = editor.session.getLine(pos.row).length; + var text = lang.stringRepeat("\n" + defaultReg.text, count); + editor.session.insert(pos, text); editor.moveCursorTo(pos.row + 1, 0); } else { editor.navigateRight(); - editor.insert(defaultReg.text); + editor.insert(lang.stringRepeat(defaultReg.text, count)); editor.navigateLeft(); } editor.setOverwrite(true); @@ -227,12 +229,13 @@ var actions = exports.actions = { if (defaultReg.isLine) { var pos = editor.getCursorPosition(); - var lines = defaultReg.text.split("\n"); - editor.session.getDocument().insertLines(pos.row, lines); - editor.moveCursorTo(pos.row, 0); + pos.column = 0; + var text = lang.stringRepeat(defaultReg.text + "\n", count); + editor.session.insert(pos, text); + editor.moveCursorToPosition(pos); } else { - editor.insert(defaultReg.text); + editor.insert(lang.stringRepeat(defaultReg.text, count)); } editor.setOverwrite(true); editor.selection.clearSelection();