VulCode

vscode-neovim: nasze zmiany w projekcie open source

Tryb Vima w VS Code, w którym edycję obsługuje prawdziwy Neovim.

Język
TypeScript
Gwiazdki na GitHubie
7753
1przyjęta zmiana
Scalona 23 września 2026.
23. miejsce wśród 64 projektów na GitHubie z naszymi zmianami, według gwiazdek. Pierwszy jest Zed (91 587).

Zmiana przyjęta w vscode-neovim

Zaznaczenie w trybie visual nie przecina już na pół emoji i innych znaków spoza podstawowej płaszczyzny Unicode.

Jak to sprawdziliśmy

Doszły trzy testy integracyjne: zaznaczenie nad jednym znakiem spoza BMP, nad dwoma takimi znakami pod rząd i nad mieszanką zwykłych znaków wielobajtowych z tymi spoza BMP. Pakietu integracyjnego nie dało się uruchomić lokalnie, co napisaliśmy w opisie, więc pierwszym przebiegiem było CI projektu.

TypeScript, React i Node

Nasze projekty w tej technologii, ich ekrany i to, kiedy ją wybieramy.

Błąd, poprawka i wniosek

Skrót naszego opisu z Nowinek technicznych: co nie działało, co zmieniliśmy i co z tego wynika dla naszej pracy.

Co nie działało

Zaznaczenie przecinało emoji na pół

W trybie visual kod dodawał do końca zaznaczenia jedną jednostkę UTF-16. Znak spoza BMP zajmuje dwie, więc zaznaczenie kończyło się w połowie pary surogatów.

Co zmieniliśmy

Przesunięcie o cały znak

Kod najpierw przesuwa koniec zaznaczenia o cały znak w bajtach, a dopiero potem przelicza kolumnę na UTF-16.

Czego nas to nauczyło

JavaScript liczy długość tekstu w jednostkach UTF-16, a emoji zajmuje dwie.

Każde przesunięcie kursora trzeba liczyć w znakach, nie w jednostkach.

Inne projekty z naszymi zmianami: TypeScript, React i Node

5 projektów w tej technologii ma nasze przyjęte zmiany. Pasek to gwiazdki repozytorium, obok liczba naszych zmian. Każdy wiersz prowadzi do strony projektu.

Pytania o nasze zmiany w vscode-neovim

Skąd są te zmiany, kto je przyjął i czy poprawimy coś w Twojej bibliotece.

Używasz vscode-neovim w swoim projekcie?

Jeśli coś w nim nie działa, poprawimy to u źródła i zostawimy obejście do czasu wydania. Odpiszemy w godzinę.