Думаю, многие в курсе, что JetBrains остановили продажи своих продуктов на территории России, но стоит отдать должное оставили бессрочные лицензии на ту версию продукта, что использовалась на тот момент. Не круто конечно, но долгое время меня этот момент не волновал. Да, не самое свежее ПО, но и платить не нужно. Однако недавно на одном из проектов мне было нужно перейти на Vite и Vitest. И в этот момент я осознал, как для меня важно запускать тесты из IDE. Оказалось, что моя версия WebStorm не поддерживает Vitest.
И тут передо мной встал вопрос. Пришло ли время вымучивать себе карту иностранного банка ради этого или придумать что-то другое. И в целом давно бы нужно завести инструмент для обхода таких проблем, но мне так не нравится идея платить кому-то, кто мне создает проблемы, при условии, что есть доступные и хорошие альтернативы.
Как вы, наверное, поняли, сегодня будет рассказ о том, как я сменил религию IDE, совершив переход с WebStorm на Cursor (VS Code).
Честно говоря, меня очень смущал подобный переход, так как я знал, что это может быть тяжело и это было тяжело. Но главная фича Cursor сделала этот переход более приятным. При регистрации тебе открывают двухнедельный пробный период Pro версии, куда входит AI ассистент, который к слову работает без VPN, что мне очень нравится. В целом он помог мне скомпенсировать время, которое ушло на привыкание к новому IDE. Также поддержка и подсказки участников моего канала в телеграм тоже была крайне полезна, так что подписывайтесь, если еще не.
Свой рассказ я построю, как перечисление фичей, которые я использовал в WebStorm, и соответствующим перечислением того, как это реализовать в Cursor. Погнали!
Содержание
Keyboard & short cuts
При установке Cursor вам предлагают выбрать какая привязка клавиш вам будет удобна, в моем случае конечно же JetBrains:
Но этого, к сожалению, оказалось недостаточно и я также установил расширение IntelliJ IDEA Keybindnigs. Чтобы установить любое расширение перейдите в раздел «Расширения» с помощью меню View: Extensions, комбинации клавиш ⇧⌘X или просто кликните по соответствующей иконке на меню:
Далее воспользуйтесь полем поиска и установите найденное расширение. С этим проблем, я надеюсь, ни у кого не будет. После установки любого расширения рекомендую перезапустить Cursor, а для этого:
Откройте командную строку IDE с помощью команды ⌘⇧P;
Найдите пункт «Reload Window» через поле поиска и выберите его.
EditorConfig
В WebStorm можно просто указать конфигурационный файл и все будет работать из коробки. В Cursor же нужно добавить расширение EditorConfig for Visual Studio Code. Дополнительной настройки не требуется, достаточно перезагрузить IDE.
Prettier
Также как и в WebStorm, для работы автокоррекции кода нужно установить расширение Prettier и настроить его:
Откройте командную строку IDE с помощью команды ⌘⇧P;
Напечатайте «open settings» и выберите пункт «Open User Settings (JSON)»;
Далее в открытом JSON-файле добавьте следующее:
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"workbench.settings.applyToAllProfiles": ["prettier.useEditorConfig"]
Мне удобно, когда автокоррекция происходит при сохранении, но если вам это не подходит, то удалите первую строчку. Также если вы не используете editorConfig, то удалите и третью строчку.
Не забудьте перезагрузить IDE.
Кстати, посмотреть какие настройки использует Prettier и лог работы можно кликнув по ссылке в правом нижнем углу Cursor:
Eslint
В WebStorm, насколько я помню, Eslint шел из коробки, а в Cursor нужно также поставить соответствующее расширение. Процесс установки и настройки вам уже знаком, поэтому укажу только поля, что нужно внести в пользовательские настройки (User Settings (JSON)):
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
]
Jest
Также как и Eslint, Jest в WebStorm работает из коробки, а в Cursor все также нужно ставить соответствующее расширение. Здесь какой-то дополнительной настройки в начале не потребовалось. Однако это расширение гоняло все тесты на каждый чих, поэтому я внес следующее в пользовательские настройки (User Settings (JSON)):
"jest.runMode": "deferred"
После установки этого расширения появляется возможность запускать тесты напрямую из файла, как и в WebStorm:
Vitest
Весь мой переход на Cursor и эта статья мотивирована этим фреймворком для тестирования. В свежих версиях WebStorm он также идет из коробки. А в Cursor по обыкновению уже ставим расширение Vitest. Процесс тот же самый и какой-то дополнительной настройки не потребовалось.
NPM Scripts
В WebStorm очень удобно запускать скрипты из соответствующего раздела:
Если вы вдруг закрыли раздел npm в WebStorm, то откройте package.json, кликните правой кнопкой мыши и выберите пункт «Show npm Scripts».
Я долго искал аналогичное окно в Cursor, но и его по дефолту там не было. Пришлось перепробовать ряд расширений и я остановился на этом. Оно максимально похоже и находится почти там же в левом нижнем углу:
По факту оно оказалось даже удобнее. В WebStorm все эти скрипты запускались в соответствующем окружении и часть из них конфликтовало. Например, когда я запускал скрипт с тестами, и часть из них падала, то после правки одного, я как обычно запускал тест из файла, что уничтожало результаты предыдущего запущенного процесса, то есть выполнение тестов по скрипту. При запуске скрипта из расширения в Cursor всегда открывается отдельный процесс.
Go to package
В последние пару лет мне часто доводилось работать с npm-зависимостями. Если вы откроете package.json в WebStorm, то вы можете поместить курсор на интересующий пакет и использовать «go to» short cut (⌘P), тогда попадете в директорию пакета в node_modules.
Как оказалось у пользователей VS Code (Cursor) этот функционал спросом не пользуется. Я не смог нагуглить какое-либо решение, но мой коллега нашел расширение Goto Package.
Это расширение не перемещает тебя в соответствующую директорию в node_modules, но может сразу открыть package.json пакета, что мне, как правило, всегда и было нужно.
Code snippets
С распространением AI IDE-снипеты скорее всего будут постепенно отходить на второстепенные роли, но пока я часто их использую. Поэтому мне было важно понять, как их заводить и использовать в Cursor. В целом процесс схожий с WebStorm:
Откройте командную строку IDE с помощью команды ⌘⇧P;
Найдите и выберите «Configure User Snippets», а затем выберите «New Global Snippets file»;
Напишите сниппеты по примеру:
"Create React Functional Component With Interface": {
"scope": "typescriptreact",
"prefix": "rfcw",
"body": [
"import * as React from 'react';",
"",
"export interface IComponent {}",
"",
"export const Component: React.FC<IComponent> = (props) => {"
" const {} = props;"
"",
" return <></>;",
"};"
],
"description": "Create React Functional Component With Interface"
}
Далее достаточно набрать префикс в любом файле, и IDE предложит вам развернуть соответствующий сниппет.
Git
Вот привыкать к работе с Git было больно. Вообще эта тема стоит отдельной статьи и глубокой проработки, так что сегодня я пробегусь по верхам:
Аннотации
В WebStorm есть отличный функционал аннотаций, который позволяет быстро определить кем были сделаны изменения и в рамках какой задачи:
В Cursor же подобного нет. Решается все расширением GitLens - это очень мощный инструмент, который дает много возможностей. В рамках него есть и платный функционал, но я его не использовал. Скажу честно, мне бы привыкнуть к бесплатному для начала.
После установки появились аннотации, которые можно получить при наведении, что удобно:
Решение конфликтов
Стоит отметить, что привыкать к решению конфликтов придется долго. Я не знаю дело ли это только привычки, но как-будто бы работа с Git в WebStorm реализована лучше и удобнее. Давайте посмотрим как это выглядит в WebStorm:
А теперь в Cursor:
При этом такой более менее привычный вид нужно включить отдельно в пользовательских настройках:
"git.mergeEditor": true
Также я добавил следующую настройку для быстрого перехода по конфликтам:
"merge-conflict.autoNavigateNextConflict.enabled": true
Если в общем взглянуть на два скрина выше, то видно, что в Cursor Merge Editor берет на себя очень много и сразу сливает не конфликтующие строки, что в определенные моменты может выстрелить в ногу, если речь идет о сложном ребейзе.
Просмотр истории
Просмотр истории коммитов также, как по мне, удобнее в WebStorm. Достаточно кликнуть правой кнопкой мыши внутри файла, найти Git и открыть историю:
В Cursor порядок действий аналогичен, также кликаешь внутри файла, находишь историю файла:
Однако интерфейс, как по мне, перегружен. Но может это дело привычки.
Sorting
Я люблю, когда все отсортировано по алфавиту, поэтому в WebStorm я использовал плагин String Manipulation. Для Cursor есть похожее расширение Alphabetical Sorter. Тут добавить особо нечего. И то и другое работают прекрасно. Главное завязать те же комбинации клавиш. Это можно сделать, открыв командную строку IDE с помощью команды ⌘⇧P, где будет нужно найти «Keyboard Shortcuts».
Tabs
Я также люблю, когда табы в редакторе открываются в несколько строк. Мне неудобно, когда приходиться скролить табы в одной строке. Для этого нужно добавить в пользовательские настройки следующее:
"workbench.editor.wrapTabs": true
Итоги
Пробежавшись по статье у меня сложилось впечатление, что Cursor нужно постоянно докручивать, чтобы получить функционал WebStorm. Да, это так. Однако Cursor работает намного шустрее, видимо потому что он легче, а может потому, что у меня версия WebStorm 21 года. Не могу утверждать объективно.
Также есть ряд минусов, к которым похоже придется привыкнуть:
Нет возможности выставить несколько курсоров зажатием пкм + alt. Приходится выставлять по одному на каждый клик. Хотя возможно я просто еще не понял, как это сделать;
Не импортирует зависимости при копировании;
Не предлагает переименовать файл при копировании;
Не удобно работать с изменениями, нет возможности скопировать старую версию из окна с изменениями, можно только откатить.
А вот мои полные пользовательские настройки:
{
"editor.codeActionsOnSave": { "source.fixAll": "explicit" },
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],
"files.autoSave": "onFocusChange",
"git.mergeEditor": true,
"jest.runMode": "deferred",
"merge-conflict.autoNavigateNextConflict.enabled": true,
"npm.scriptExplorerAction": "run",
"window.commandCenter": true,
"workbench.editor.wrapTabs": true,
"workbench.settings.applyToAllProfiles": ["prettier.useEditorConfig"]
}
Всем спасибо за уделенное время!
Комментарии (13)
anapogo
12.06.2024 12:13+6Думаю, многие в курсе, что JetBrains остановили продажи своих продуктов на территории России,
А вот мне интересно, когда, хотя-бы российские читатели Хабра поймут, что "импортозамещение" - путь в никуда... ?
vfork
12.06.2024 12:13+4мне так не нравится идея платить кому-то, кто мне создает проблемы
dmarsentev
12.06.2024 12:13+5Да, с точки зрения автора статьи JetBrains создаёт проблемы.
С моей точки зрения проблемы создаёт не JetBrains.
Tony-Sol
12.06.2024 12:13+1В чем проблема использовать EAP версию webstorm’а?
Она условно бесплатная - 30 дней с момента билда, которые как раз примерно с этой частотой и выходят
Всяко лучше “платной(!) версии” бесплатного vscode
Fancryer
12.06.2024 12:13Я одно время пользовался EAP, а потом случился промежуток в полтора месяца без них, когда пришлось временно сидеть на VS Code. А потом ещё один. Если есть желание скакать туда-сюда, то вариант с EAP вполне себе хороший.
Zoolander
12.06.2024 12:13+1Vs code легче, потому что значительно меньше индексирует. Проверено многократно на больших репозиториях. Побочный минус - надо чаще использовать typecheck и линтеры.
Но иногда эта супериндексация Webstorm просто в печенках сидит,
MiXeR235
12.06.2024 12:13Этот Cursor такая параша в сравнении с VS Code, горячие клавиши странные, некоторые полезные функции из VS Code убрали и были какие-то баги как я помню
fray2000
12.06.2024 12:13Сижу на Cursor уже как пару месяцев. Играл с всевозможными AI плагинами для VS code, но проиграл. Тут же из коробки встроенный автокомплит на базе Copilot++ (автокомплитит как боженька, крайне полезно) и встроенное окно с чатом (использую GPT4o, но можно выбрать и другие модели). Все это за 20 баксов в месяц без возни с VPN. Цену свою оправдывает с лихвой, уходить с него не собираюсь. В остальном - это все тот же VSCode, со всеми фичами и миграцией в 1 клик.
neroxt
12.06.2024 12:13Так то для таких случаев, когда не хочешь платить, есть такая вещь как программа для активации webstorm (чисто в целях обучения).
aamonster
Стоило начать с того, что такое вообще этот Cursor (и почему нужен именно он, а не просто VS Code с набором плагинов под ваши задачи). Потому что его, по понятным причинам, даже нагуглить не очень просто.