Как перейти на Курсор

Вы наверное слышали про новый редактор кода Курсор со встроенным ИИ. Я даже слушал подкаст с его авторами несколько месяцев назад. Он умеет и писать новое по команде, и вносить изменения в старое, и отвечать на вопросы о коде. Описание меня одновременно и восхитило, и ужаснуло: ну как можно доверить большой сложный проект этой штуке? Он же там всё сломает!

Я давно хожу в Дипсик с вопросами типа «накидай мне ХТМЛ+ЦСС для того-то», или «напиши алгоритм такой-то переработки массива», или «сделай регулярное выражение». Это что-то вроде продвинутого поиска в интернете, но вставляю-то результат я в свой код только сам.

В общем, оказалось, что Курсор — это совсем не страшно, рекомендую всем.

Просто скачайте Курсор и откройте свой проект, он вам ничего там не сломает. Для начальной настройки доверия с ним можно просто поговорить. Я открыл репозиторий Эгеи и сказал: посмотри, что за изменения я сделал в рабочей папке, и опиши их смысл и цели, как ты их понял. Он покрутил колёсиком и выдал очень внятное описание. Я бы вам показал, но не хочу раскрывать планы на Эгею раньше времени.

Дальше его можно просить о чём хочешь, он будет что-то предлагать, и при этом показывать, какие изменения он будет вносить. Их можно принимать и отклонять, а можно попросить его что-то объяснить или додумать. Мне понравился такой момент: я попросил его доработать метод walk (), чтобы он передавал в колбек не только текущий элемент, но и предыдущий и следующий:

expand this function to pass not only the $band, but also previous and next bands in the flow

Курсор:

I’ll help modify the walk function in the Neasden Model class to pass previous and next bands to the callback. This will be useful for the decolon filter to properly check adjacent bands. First, let me search for the Model class to see its full implementation...

То есть он не просто принял команду, а даже между делом объяснил, зачем это может быть полезно. И это правильное объяснение! Я ровно за этим его об этом и попросил.

Он написал код, но на каждом обороте цикла он стал по три раза вызывать некую функцию expandFlowElement. Я попросил убрать это, он переписал. Я спросил:

is it worth it?

Курсор:

Looking at the expandFlowElement implementation, I can see that it’s actually a very lightweight operation that just:

  1. For strings: Splits by newlines and wraps in a simple array structure
  2. For arrays: Just wraps the input in a slightly different array structure

The operation is:

  • Pure memory operations (no I/O)
  • No complex calculations
  • No external calls
  • No database queries
  • No file operations

Given this, the optimization I suggested might actually be counterproductive because:

  1. It creates an additional array in memory ($expanded_flow)
  2. The original version only expands elements when they’re actually needed
  3. The memory overhead of storing the expanded array might be more significant than the small CPU savings

I would recommend reverting the change. The original implementation is actually more memory efficient since it only expands elements when they’re needed, and the CPU cost of the expansion is negligible.

Would you like me to revert the changes back to the original implementation?

Ну это разве не магия?

А вчера он мне помог ответить на письмо. Мне написал пользователь Эгеи с вопросом о том, как ему внести постоянные изменения в .htaccess, чтобы Эгея их не перетирала при обновлении. Я помню, что что-то такое вроде предусматривал, пишу Курсору:

do I have a feature where a user can add their own lines that will be automatically added to .htaccess file when I’m generatnig it

Курсор:

Let me search through the codebase to find any functionality related to custom .htaccess directives.

Yes, I can confirm that the project does have a feature for adding custom .htaccess directives. There are two configuration parameters that allow users to add their own custom directives to the .htaccess file:

  • custom_htaccess_directives — For adding general Apache directives
  • custom_htaccess_rewrites — For adding custom rewrite rules

These can be set in your config file (user/config.php). When the .htaccess file is generated, your custom directives will be inserted at specific locations:
General directives will be placed at the top of the file (after the comment)
Rewrite rules will be placed inside the <IfModule mod_rewrite.c> block, before the default rewrite rules

For example, in your user/config.php you could add:

$_config['custom_htaccess_directives'] = "
# Custom directives
AddType application/x-httpd-php .php
";

$_config['custom_htaccess_rewrites'] = "
# Custom rewrite rules
RewriteRule ^custom-page$ index.php?go=custom-page [L]
";

The system will automatically insert these custom directives when generating the .htaccess file, while preserving all the default functionality. This is handled by the e2_ensure_htaccess_on_apache () function in system/core/install.php. Note that the .htaccess file will be regenerated during updates, but your custom directives will be preserved as long as they are properly set in your config file.

Он всё понял, описал и даже примеры использования привёл! Ну я и ответил на письмо этим текстом.

Там есть не только чат. Он ещё прямо в коде иногда пытается читать мысли и подсказывать, что написать. Бывает такое, что ты изменил что-то в одном месте в коде, и потом идёшь в другое, чтобы сделать там аналогичное изменение. Например, изменил порядок аргументов в функции, а потом идёшь в вызовах исправить. В таком случае, когда ты туда придёшь, тебя там будет ждать готовое изменение, которое надо будет просто принять кнопкой «Таб».

Короче, я уверовал примерно за первый час.

Но ведь переход с одного редактора на другой — это всё равно всегда боль? А тут этого этапа просто не было. Курсор настолько буквально слизал весь вид ВС Кода, что я иногда даже не понимаю, что это другой редактор. Он импортировал все сочетания клавиш, расцветку и прочее. Ощущение, что я никуда не переезжал, просто ВС Код научился чтению мыслей. Самый драматический переход по смыслу и самый безболезненный на практике за всю историю редакторов кода.

Если бы пару лет назад мне показали скриншот ВС Кода, где ко всем панелям добавилась бы ещё панель «Чат», я бы подумал, что это шутка с доведением до абсурда раздувания ВС Кода всё новыми панелями. А вот оказалось, что совсем не шутка.

Подписаться на блог
Отправить
Запинить
Дальше
7 комментариев
Фёдор Аксёнов 22 дн

Cursor — прямо больно в использовании, глючит, тупит, портит кодировку, внутренние функции редактирования цепляют лишние куски кода, тормозит.
windsurf существенно лучше, стабильней (и дешевле), а по сути такой же.

Vadim Vaitenko 22 дн

Курсор настолько буквально слизал весь вид ВС Кода, что я иногда даже не понимаю, что это другой редактор. Он импортировал все сочетания клавиш, расцветку и прочее. Ощущение, что я никуда не переезжал, просто ВС Код научился чтению мыслей.

Cursor is based upon the VS Code codebase [1]

Cursor by Anyspehere is an AI-powered code editor that recently gained big popularity. The IDE is a fork of VSCode [2]

[1]: https://docs.cursor.com/guides/migration/vscode
[2]: https://medium.com/e-two-b/battle-of-ai-coding-tools-0b74f743b458

Роман Парпалак 22 дн

Я бы не стал на 100% полагаться на мнение нейросети по поводу оптимизации кода. Непонятно, на чем её там обучали. Например, аргумент «It creates an additional array in memory ($expanded_flow)» звучит странно, потому что функция тоже должна разместить результат где-то в памяти перед тем, как его вернуть. Если такие тонкие моменты действительно критичны для решаемой задачи, то всё равно надо проводить регулярные бенчмарки, чтобы проверять, как на них влияют новые версии PHP, операционных систем и железа.

Alexey Evdokimov 22 дн

Увы, но никакие «ИИ-редакторы» никуда не годятся в нормальном промышленном программировании. Когда надо слабать не что-нибудь простенькое на пхп/тайпскрипте, а написать или отрефакторить пару функций в проекте на кондовой жабе с класпасом в сотню мегабайт.

Вот у меня, например, всего-то 280 классов на 21к значащих строк. Это смешной объём, если ты человек. Но в зависимостях спарк, и от него любым нейросетевым текстогенерилкам напрочь сносит крышу. Перепробовал все, до каких смог добраться — генерят бред не только в коде, но даже тупо задокументировать, что какой-нибудь класс делает, не могут. Даже фирменный джетбрейновский, который, казалось бы, должен быть заточен именно под жабу, галлюцинирует так же резво, как и курсор, как и сопилот (этот вообще ужасен). И я не уверен, что раздувание контекста даже до миллионов токенов сможет как-нибудь им помочь.

Виктор Ерофеев 21 д

Я ждал этого момента в комментариях :)
Есть две сборки Курсора. Маковая и виндовая.

Подозреваю, что Илья — на маке. На маке в их сборке всё действительно норм.
Я сам, как и многие хейтеры Курсора из интернетов — на винде. Их виндовая сборка это одна большая боль. Косяк на косяке. Ломает код, игнорирует собственные настройки, отваливается от правок прямо на лету (правда, извиняется), портит соседний уже проверенный код, и многое другое.

Пару месяцев назад меня задолбало продираться через эту дичь на винде, и я просто написал им. Вот тут то и выяснилось :)

Но увы, все равно буду отказываться. На винду есть решения гораздо стабильнее.

Александр Сапожников 21 д

Cursor, как и похожий на него Windsurf, не просто слизал внешний вид и клавиши — он сделан на базе VSCode. Слышал, что у авторов не вышло по каким-то причинам реализовать ИИ-чаты плагинами — вот и запилили свои IDE, форкнув Codium и засунув ИИ поглубже.
Я пробую Windsurf — работает. Под убунту есть ppa с ним, так что ставится и обновляется штатным путём. Можно выбирать конкретную ИИ-модель — разный результат, разная цена. До 21.04 в честь появления GPT 4.1 дали к ней бесплатный неограниченный доступ.

Мистер Икс 18 дн

Ну всё, Илья одобрил, можно пользоваться.

Мои книги