Cursor - AI Code Editor, from a JetBrains user perspective

Hello! I'm writing this post to share my experience testing Cursor, the AI code editor.

I've been using JetBrains products for over a decade. I've tried many non-JetBrains IDEs, but I always came back, usually after getting frustrated with missing features, terrible UX, and sometimes bugs.

Why I am testing Cursor

Well, I enjoy experimenting with AI tools. In IDEA, I've been using Codeium for some time. It's quite good for code completion, but the chat isn't great, especially compared to something like Claude (Sonnet 3.5) or even ChatGPT with GPT-4o.

My work setup is currently IDEA with Codeium and Perplexity on the side (600 Sonnet 3.5 queries per day, even with a limited context window, is unmatched).

JetBrains doesn't seem to be Codeium's primary focus, as evidenced by numerous long-standing issues: Tab completion not working with Emmet, despite visually overwriting Emmet suggestions (so you press tab only to get entirely different completion). The new "Codeium command" (select a piece of code and tell AI in a popup what you want to do with it) is not bad, but it's visually unappealing and tends to temporarily break language formatting. Also, it's not as effective as performing the same task on Perplexity, with noticeably lower quality and model intelligence.

What I like about Cursor

First impression

It might be a small thing, but I appreciate that it guides new users on how to use AI tools such as quick edits and chat. Sleek dark theme was a good choice.

AI integration and quality

Code generation is pretty good, comparable to Codeium. Smart rewrites and cursor prediction are unique features I haven't seen in other editors. While they might seem almost useless at first, they're actually quite handy, and I was surprised by how much I use them. Smart rewrites automatically fix small issues in your code, like missing brackets or semicolons, without manual correction. Cursor prediction tries to guess what you're going to type next and positions the cursor accordingly, saving you some typing effort.

Compared to Codeium, Cursor's chat panel offers an improved experience. It utilizes more advanced AI models (GPT-4o and Claude 3.5 Sonnet - my favorite model) and features a more refined user interface.

The ability of AI to view other files isn't perfect, but I believe it's still better than Codeium's offering. Allowing to search the web from inside chat is magnificent.

Ctrl+K - a feature similar to Codeium commands - offers quick edits that are much more polished (not only visually) and usually of higher quality.

Experimental features

Recently, I discovered multi-file editing and code execution features. I love that they are trying to push the boundaries of what is possible in an IDE.

What could be improved

Add apply counts

When applying code from chat, it would be nice to see how many changes will be applied.

In this example, there were two changes, but only one was visible on screen. A simple 1/2 would go a long way.

It should probably also scroll to the first change after clicking apply in the chat. Maybe add a small button to scroll to the current change?

A way to trigger inline AI, next and previous suggestions

As the caption suggests, Codeium has previous and next suggestions, other plugins like Cody has a way to force triggering the auto-completion.

While in-line AI is triggered in Cursor fairly often and gives good suggestions, ability to pick from more options and/or trigger it manually would be a nice touch.

Apply generation ⌛💥

Sometimes, when applying code from chat, it keeps generating for a few seconds, and then... nothing. No error dialog or notification appears; it just finishes generating nothing. I have to click again on the Apply button to get preview of changes. One time it took few minutes, essentially until I canceled it. The "Apply" feature allows you to apply changes suggested by the AI to your code. It's a convenient way to incorporate AI-generated code into your project.

Sometimes apply generation breaks code, vanishing } or broken emoji. For example this happened ⚙️ -> ⚙��, or just recently

To be fair, most of these breakages can be quickly fixed by the smart rewrite feature.

And sometimes, it is just painfully slow. Recent example would be a 400 line file, Sonnet writing like 10 lines in a few seconds, but then "Apply" is stuck in "Generating..." for two minutes. Yes, it did finish, but it was not a great experience.

Under some circumstances, it picks the wrong file to apply changes to. For example I had something like /xxx/yyy/index.html, opened chat from this file, yet it tried to apply changes to /index.html. A file which was supposed to be ignored. 🤷‍♂️ On the same project, it seemed to work fine for a while, but then 50% of the time it wouldn't even show the button to apply changes.

Diffs for AI changes

It shows whole lines, but why not highlight the specific changed parts as well, similar to how Source Control does? For example:

This granular highlighting would make it easier to quickly identify the exact modifications.

Additionally, sometimes the change overlay interferes with the code minimap, which can be distracting.

Missing "Open in browser" option

I tried 3 extensions until I found one that works. As far as I know this is a feature that is available in IDEA by default.

Drag & drop files is not in many cases working

Why does dragging a JS file (a userscript) from Cursor work in Chromium, but not in Vivaldi? Similar with drag and drop upload to pages, that doesn't work in nothing when done from Cursor. Since it works flawlessly from PCManFM I have to assume this is a Cursor issue.

Very similar issue with paste for files. Cursor for some reason cannot copy files from its file explorer in a way, so they are "paste-able" in any other application?

Empty directories can be unfolded in an explorer panel?

Just why? Why allow a user to do a pointless action? Why not simply not show the arrow in empty folders?

It keeps messing with pins

When I have a pinned tab, not sure if it has to be even active, after chatting with AI, I now suddenly have several new tabs which are also pinned.

What I strongly dislike about Cursor

I think a lot of these come as a baggage from VSCode.

Issues with hotkeys, binds, shortcuts

Why can't I bind the middle mouse button to "Go to definition"?

Why does Alt+F12 to show a terminal (in some versions of Cursor) also jump to the main menu, so the real shortcut is Alt+F12 followed by Esc?

Why aren't chord/sequence of keys supported? Neither alt+shift shift nor alt+shift alt+shift works, but curiously shift shift and alt alt do. 😑

Why must I use a shortcut or a button on the other side of the screen to close the left panel? Why, after clicking on a left panel icon to hide it, does it show a help text which seems to mock me?

* Suspicious Fry *

Git.

JetBrains IDEs are miles ahead, with pre-installed and well-integrated Git features. One doesn't have to install several plugins to start somewhat nearing JetBrains experience.

Even the basics are painful for me. Why, in a commit file diff tab, after using "Next change" and reaching the end of a file, does it jump without any notification (or reason) to the beginning of the same file?

Lack of customization of Window decorations

I really want to remove that Close button from the window decoration. I've accidentally closed the whole IDE so many times instead of just closing a chat.

I am using i3wm (a tiling window manager), so I don't need or want any window buttons, especially the close button. There are some configuration options in settings, but those also remove other elements I want to keep.

For comparison, this is how my IDEA with opened Codeium chat (not that I use it that much) looks like:

Kindly notice the utter lack of any close buttons. Even the chat has a minimize icon, so even if there were a close button for the whole window, it would still be better because X and _ are much easier to distinguish than X and x.

Plugins store often broken

Just... be careful with the "Composer"

It failed to generate moved code in 3 attempts (first time it kept placeholders similar to // [ move code from x here ], then when asked for full code, it failed, stopped, 2 times halfway). Then I proceeded to use the chat to move the code, it got it partially right. Then the whole new file vanished. 😠 So I wasted 5+ of AI uses and 10 minutes...

The feature is too immature and buggy to be used seriously. A tool should never delete user's code, even if it is in a beta (beta means missing polish and occasional small rare issues, not critical ones like this).

It handled some tasks very well, but I urge you to be very mindful with it - use only after committing changes or doing a backup.

Closing thoughts

Cursor is a very promising piece of software, that is without any doubt in my mind.

Despite having a fair share of issues, Cursor's AI features are rather impressive. The model selection and good UX are its strong points.

I'm not yet sure if I'll switch fully to Cursor. My decision will likely depend on two factors: the speed of the unlimited "slow" uses, and how well I can customize it to match my JetBrains preferences.

— monnef





Consider exploring these small projects made largely by AI.