Skip to content

Commit 4a3ec5a

Browse files
jankeromnesmarijnh
authored andcommitted
[vim] fix cursor jump in Shift-Y
Also refactor `countTimes` and get rid of confusing global `yank`.
1 parent 8e5c9b4 commit 4a3ec5a

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

keymap/vim.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
(function() {
5151
var sdir = "f";
5252
var buf = "";
53-
var yank = 0;
5453
var mark = {};
5554
var repeatCount = 0;
5655
function isLine(cm, line) { return line >= 0 && line < cm.lineCount(); }
@@ -70,7 +69,7 @@
7069
}
7170
function countTimes(func) {
7271
if (typeof func == "string") func = CodeMirror.commands[func];
73-
return function(cm) { iterTimes(function () { func(cm); }); };
72+
return function(cm) { iterTimes(function (i, last) { func(cm, i, last); }); };
7473
}
7574

7675
function iterObj(o, f) {
@@ -220,7 +219,7 @@
220219
var l = cm.getCursor().line, start = i > l ? l : i, end = i > l ? i : l;
221220
cm.setCursor(start);
222221
for (var c = start; c <= end; c++) {
223-
pushInBuffer("\n"+cm.getLine(start));
222+
pushInBuffer("\n" + cm.getLine(start));
224223
cm.removeLine(start);
225224
}
226225
}
@@ -232,7 +231,7 @@
232231
}
233232
var l = cm.getCursor().line, start = i > l ? l : i, end = i > l ? i : l;
234233
for (var c = start; c <= end; c++) {
235-
pushInBuffer("\n"+cm.getLine(c));
234+
pushInBuffer("\n" + cm.getLine(c));
236235
}
237236
cm.setCursor(start);
238237
}
@@ -339,7 +338,7 @@
339338
// so only incremenet once
340339
++lineN;
341340

342-
iterTimes(function(i) {
341+
iterTimes(function() {
343342
pushInBuffer(cm.getLine(lineN));
344343
cm.removeLine(lineN);
345344
});
@@ -353,12 +352,10 @@
353352
enterInsertMode(cm);
354353
},
355354
"M": function(cm) {cm.setOption("keyMap", "vim-prefix-m"); mark = {};},
356-
"Y": function(cm) {cm.setOption("keyMap", "vim-prefix-y"); emptyBuffer(); yank = 0;},
355+
"Y": function(cm) {cm.setOption("keyMap", "vim-prefix-y"); emptyBuffer();},
357356
"Shift-Y": function(cm) {
358357
emptyBuffer();
359-
mark["Shift-D"] = cm.getCursor(false).line;
360-
cm.setCursor(cm.getCursor(true).line);
361-
yankTillMark(cm,"Shift-D"); mark = {};
358+
iterTimes(function(i) { pushInBuffer("\n" + cm.getLine(cm.getCursor().line + i)); });
362359
},
363360
"/": function(cm) {var f = CodeMirror.commands.find; f && f(cm); sdir = "f";},
364361
"'?'": function(cm) {
@@ -477,7 +474,7 @@
477474

478475
CodeMirror.keyMap["vim-prefix-d"] = {
479476
"D": countTimes(function(cm) {
480-
pushInBuffer("\n"+cm.getLine(cm.getCursor().line));
477+
pushInBuffer("\n" + cm.getLine(cm.getCursor().line));
481478
cm.removeLine(cm.getCursor().line);
482479
cm.setOption("keyMap", "vim");
483480
}),
@@ -537,10 +534,10 @@
537534
mark[m] = cm.getCursor().line;
538535
};
539536
CodeMirror.keyMap["vim-prefix-d'"][m] = function(cm) {
540-
delTillMark(cm,m);
537+
delTillMark(cm, m);
541538
};
542539
CodeMirror.keyMap["vim-prefix-y'"][m] = function(cm) {
543-
yankTillMark(cm,m);
540+
yankTillMark(cm, m);
544541
};
545542
CodeMirror.keyMap["vim-prefix-r"][m] = function (cm) {
546543
var cur = cm.getCursor();
@@ -574,8 +571,8 @@
574571
setupPrefixBindingForKey("Space");
575572

576573
CodeMirror.keyMap["vim-prefix-y"] = {
577-
"Y": countTimes(function(cm) {
578-
pushInBuffer("\n"+cm.getLine(cm.getCursor().line+yank)); yank++;
574+
"Y": countTimes(function(cm, i, last) {
575+
pushInBuffer("\n" + cm.getLine(cm.getCursor().line + i));
579576
cm.setOption("keyMap", "vim");
580577
}),
581578
"'": function(cm) {cm.setOption("keyMap", "vim-prefix-y'"); emptyBuffer();},

0 commit comments

Comments
 (0)