diff --git a/src/cm_adapter.ts b/src/cm_adapter.ts index 0b312db..c9800b4 100644 --- a/src/cm_adapter.ts +++ b/src/cm_adapter.ts @@ -467,7 +467,11 @@ export class CodeMirror { else if (name == "goLineLeft") cursorLineBoundaryBackward(this.cm6); else if (name == "goLineRight") { cursorLineBoundaryForward(this.cm6); - cursorCharBackward(this.cm6) + let state = this.cm6.state + let cur = state.selection.main.head; + if (cur < state.doc.length && state.sliceDoc(cur, cur + 1) !== "\n") { + cursorCharBackward(this.cm6); + } } else console.log(name + " is not implemented"); }; diff --git a/test/vim_test.js b/test/vim_test.js index ccef03f..cd8e699 100644 --- a/test/vim_test.js +++ b/test/vim_test.js @@ -539,6 +539,10 @@ testVim('g0_g$', function(cm, vim, helpers) { is(startCoords.left < endCoords.left); is(startCoords.top == endCoords.top); is(start.ch < end.ch && end.ch < cm.getValue().length / 2); + is(/\.$/.test(cm.getValue())); + helpers.doKeys('$', 'g', '0', 'd', 'g', '$'); + is(!/\.$/.test(cm.getValue())); + },{ lineNumbers: false, lineWrapping:true, value: 'This line is long to test movement of g$ and g0 over wrapped lines.' }); testVim('}', function(cm, vim, helpers) { cm.setCursor(0, 0);