vscode-neovim: our changes to an open source project
Vim mode for VS Code where the editing is done by a real Neovim.
- Language
- TypeScript
- GitHub stars
- 7,753
- Project site
- marketplace.visualstudio.com
The change merged into vscode-neovim
Visual mode selections no longer cut emoji and other characters outside the Unicode BMP in half.
- Pull request #2683merged on 23 September 2026
How we tested it
We added three integration tests: a selection over one character outside the BMP, over two of them in a row, and over a mix of ordinary multi-byte characters and characters outside the BMP. We could not run the integration suite locally and said so in the pull request, so the project's CI was its first run.
TypeScript, React and Node
Our projects in this technology, their screens and when we choose it.
The bug, the fix and the lesson
A summary of our Tech news write-up: what was broken, what we changed and what it means for our own work.
A selection split an emoji in half
In visual mode the code added one UTF-16 unit to the end of the selection. A character outside the BMP takes two, so the selection ended halfway through a surrogate pair.
A step over the whole character
The code first moves the end of the selection past the whole character in bytes, and only then converts the column to UTF-16.
JavaScript measures strings in UTF-16 units, and an emoji takes two.
Every cursor offset has to be counted in characters, not units.
Other projects with our changes: TypeScript, React and Node
5 projects in this technology have our merged changes. The bar is the repository's stars, next to it the number of our changes. Each row leads to the project's page.
- Autoprefixer3 merged changes22,209
- compromise21 merged changes12,161
- vscode-neovimthis page, 1 merged change7,753
- MailDev1 merged change6,135
- spacetime1 merged change4,107
Questions about our changes to vscode-neovim
Where these changes come from, who merged them and whether we can fix something in your library.
Read next
More about this work and the other projects with our changes.
Using vscode-neovim in your project?
If something in it does not work, we fix it at the source and leave a workaround until the release. We reply within an hour.