Skip to content

Commit 66b0b4d

Browse files
parleurmarijnh
authored andcommitted
[vim mode] Fix insert/command mode behavior difference
1 parent d4dbbce commit 66b0b4d

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

keymap/vim.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,11 +1696,12 @@
16961696
var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;
16971697
var first = cm.firstLine();
16981698
var last = cm.lastLine();
1699-
// Vim cancels linewise motions that start on an edge and move beyond
1700-
// that edge. It does not cancel motions that do not start on an edge.
1701-
if ((line < first && cur.line == first) ||
1702-
(line > last && cur.line == last)) {
1703-
return;
1699+
// Vim go to line begin or line end when cursor at first/last line and
1700+
// move to previous/next line is triggered.
1701+
if (line < first && cur.line == first){
1702+
return this.moveToStartOfLine(cm, head, motionArgs, vim);
1703+
}else if (line > last && cur.line == last){
1704+
return this.moveToEol(cm, head, motionArgs, vim);
17041705
}
17051706
if (motionArgs.toFirstChar){
17061707
endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));

test/vim_test.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -634,11 +634,11 @@ testVim('dj_end_of_document', function(cm, vim, helpers) {
634634
var curStart = makeCursor(0, 3);
635635
cm.setCursor(curStart);
636636
helpers.doKeys('d', 'j');
637-
eq(' word1 ', cm.getValue());
637+
eq('', cm.getValue());
638638
var register = helpers.getRegisterController().getRegister();
639-
eq('', register.toString());
640-
is(!register.linewise);
641-
helpers.assertCursorAt(0, 3);
639+
eq(' word1 \n', register.toString());
640+
is(register.linewise);
641+
helpers.assertCursorAt(0, 0);
642642
}, { value: ' word1 ' });
643643
testVim('dk', function(cm, vim, helpers) {
644644
var curStart = makeCursor(1, 3);
@@ -654,11 +654,11 @@ testVim('dk_start_of_document', function(cm, vim, helpers) {
654654
var curStart = makeCursor(0, 3);
655655
cm.setCursor(curStart);
656656
helpers.doKeys('d', 'k');
657-
eq(' word1 ', cm.getValue());
657+
eq('', cm.getValue());
658658
var register = helpers.getRegisterController().getRegister();
659-
eq('', register.toString());
660-
is(!register.linewise);
661-
helpers.assertCursorAt(0, 3);
659+
eq(' word1 \n', register.toString());
660+
is(register.linewise);
661+
helpers.assertCursorAt(0, 0);
662662
}, { value: ' word1 ' });
663663
testVim('dw_space', function(cm, vim, helpers) {
664664
var curStart = makeCursor(0, 0);

0 commit comments

Comments
 (0)