Skip to content

Commit 38f893a

Browse files
committed
fix: Fixed handling surrogate characters in insert-after mode in Vim
1 parent 72fd4b7 commit 38f893a

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/keyboard/vim.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -3390,9 +3390,11 @@ domLib.importCssString(`.normal-mode .ace_cursor{
33903390
} else if (insertAt == 'bol') {
33913391
head = new Pos(head.line, 0);
33923392
} else if (insertAt == 'charAfter') {
3393-
head = offsetCursor(head, 0, 1);
3393+
var newPosition = updateSelectionForSurrogateCharacters(cm, head, offsetCursor(head, 0, 1));
3394+
head = newPosition.end;
33943395
} else if (insertAt == 'firstNonBlank') {
3395-
head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head);
3396+
var newPosition = updateSelectionForSurrogateCharacters(cm, head, motions.moveToFirstNonWhiteSpaceCharacter(cm, head));
3397+
head = newPosition.end;
33963398
} else if (insertAt == 'startOfSelectedArea') {
33973399
if (!vim.visualMode)
33983400
return;

src/keyboard/vim_test.js

+7
Original file line numberDiff line numberDiff line change
@@ -1850,6 +1850,13 @@ testVim('a_eol', function(cm, vim, helpers) {
18501850
helpers.assertCursorAt(0, lines[0].length);
18511851
eq('vim-insert', cm.getOption('keyMap'));
18521852
});
1853+
testVim('a with surrogate characters', function(cm, vim, helpers) {
1854+
cm.setCursor(0, 0);
1855+
helpers.doKeys('a');
1856+
helpers.doKeys('test');
1857+
helpers.doKeys('<Esc>');
1858+
eq('😀test', cm.getValue());
1859+
}, {value: '😀'});
18531860
testVim('A_endOfSelectedArea', function(cm, vim, helpers) {
18541861
cm.setCursor(0, 0);
18551862
helpers.doKeys('v', 'j', 'l');

0 commit comments

Comments
 (0)