Switching from Vim to Intellij
browntreelabs.com
browntreelabs.com
I agree 100% here, if you value these types of IDE tools I don't recommend going to Vim. It frankly sucks at this stuff, it wasn't meant for it and it's not the type of things you can easily tack onto a codebase not meant for it. Doesn't stop people from trying of course, and some do an amazing job at it, but it rarely reaches the same level of polish and simplicity as good IDE solutions.
But on the other hand, please consider the Zen of dumb tools: I code all day in Vim and I don't use YouCompleteMe, NERDTree or anything like that. I use dumb, language-agnostic completion and dumb, language-agnostic FZF and Rg for searching and navigating the source code. If I'm feeling fancy I use universal-ctags, but if it's not here FZF and Rg do a good enough job.
Is it as fancy and fully featured as an IDE? No. But like the author I like when stuff just works, and dumb tools work reliably regardless of what I'm editing. It works in emails, it works in man pages, it works in custom DSLs, it works in config files, it works in HN comments if I decide to edit them there. And it's always instant.
So it not only knows when strings in my python code are sql queries, but it autocompletes in those strings against my actual schema
It may have been implied by the "it autocompletes" statement, but it runs analysis on that code, too, catching bad practices such as logic errors, common mistakes, and unused code (where applicable)
One can influence its embedded language detection via `language=RegExp` (or whatever the language id is) while inside a comment right above the embedded language literal: https://github.com/JetBrains/intellij-community/blob/idea/20...
Tridactyl provides the feature but if you just want external edit without the intrusive vim binding layer you can try Textern, it worked well back when I tried it.
But I think installation of the extensions for LSP / completion / navigation etc.. features could've been easier. In my limited experience, it's a hassle getting these tools to work.
I understand this preference, but it's also important to recognize that you are essentially programming with one hand tied behind your back when you are choosing to use such tools instead of an IDE when one is available.
For example, free IntelliJ can do "Data flow from/to here" analysis on your code for Java (probably others as well), which analyzes your whole project and finds all the code paths that use/provide a value for a variable, at any depth of calls. For a medium-sized product, finding the same information with Rg is easily 30m of work; if you need to navigate between the levels to find a bug, you'll lose even more time.
Also, refactoring tools that an IDE can give you make certain programming tasks trivial at 3-5 key presses which would easily be a 2 day change in a medium project using basic text processing tools.
Especially now that most IDEs also support VIM or emacs key bindings, it is very rarely a good idea for medium-to-large codebases to rely on text processing tools instead of a full IDE. Note that I'm also considering vim/emacs+language server or similar extensions as an IDE (though LSP has quite a way to go, especially on the refactoring side).
For small projects, or for languages with poor code analysis support, I do agree that these advantages don't amount to much and personal preference and familiarity amounts to much more than any tools an IDE can give.
granted, we don't always get to choose what language we use or what code bases we inherit.
Emacs, for Common Lisp, is still a much more advanced IDE than many languages have. It used to actually be a significant ingredient in the secret sauce that made Lisp so powerful - an advantage which it has thoroughly lost to IntelliJ/Visual Studio in my opinion.
I understand what you're saying but as someone who went the other way (from IDEs to Vim exclusively) I disagree (except for Java, for Java an IDE is mandatory as a result of the way the ecosystem/culture has developed in an IDE centric way).
There are benefits to lack of features. It's a tradeoff of course, but I find that the super simple language agnostic Ctrl+N autocomplete gets me 85% of the way there, and it's so predictable to me that I don't usually need to even look at the menu. I fly through it. With IDEs I find myself having to think about it more closely, and look at subtext for context. That's just one example.
So while I don't disagree with you necessarily, I think IDEs also (metaphorically) require tying some part of your hand behind your back. They are just different parts.
To me, writing code is a relatively minor part of software development, so auto-complete and such are nice to have features, but not crucial. Dumb auto-complete is absolutely good enough, even for Java.
Reading code, especially navigation and analysis, is a much greater part of the day to day experience that I for one have, and here grep is so inferior to code analysis tools that I really don't understand how people can use it.
Note that I am currently an Emacs user (company won't pay for GoLand), but the extra value added by lsp-mode is maybe a quarter of my productivity.
For most of what I do the symbol is defined/used in the same file, so a simple `*` (Shift + 8) will get what I need it, but when it doesn't then I'm relegated to grep (I actually use a tool I wrote myself called findref[1]). It gets me 70 to 80 percent of the way there, but that's it.
To me that's "good enough" that when combined with the other benefits of plain vim over an IDE (especially ability to work over SSH like it's local, which I do a lot), it's worth it to me.
Just one note about SSH: Emacs and VSCode have a nifty way of doing the opposite of how you use vim over SSH: I can run Emacs on my own system and edit remote files directly and even run remote commands. This has the nice advantage that I get to use my own customized Emacs but still edit files on all sorts of remote systems, including stuff like kubernetes-mode or other niceties.
IDEs exist that also speak most of the language. IdeaVIM is an extension to IntelliJ that speaks 90% of VIM the language (and also gets some things wrong). I live in IdeaVIM almost all day.
There's something to be said by having sane defaults that do exactly what you want. Probably my biggest issue with vim is you can easily find yourself in no man's land because your setup inevitably becomes uniquely your own. For example I used coc.nvim in vim, and although it worked great overall, I would often find autocomplete text sitting in an unnamed buffer that I would have to clean up. Despite googling like crazy and even asking for help in a couple vim communities, I could not solve this problem that seemingly only I had.
The article touches upon this as well, saying a 50 line tsx file doesn't work for the author in vim. For me a 1000 line tsx file works just fine, so the author managed to dig a unique hole for themselves there too, most likely.
I've tried evil-mode a few times over the years. Most recently I tried Doom Emacs twice. I _really_ want to experience the hype of org-mode. I want something like org-mode in my life. I am a heavy notes taker and I can see the value org-mode offers and I am willing to make the jump for it alone... But, I can't figure out how to get a proper workflow in Emacs that gets me to where I am in vim today. I just can't get it to click.
For what it's worth, I've been using vi(m) since the early/mid 2000s and my workflow is almost entirely terminal based for almost everything that I have ever done as a professional and hobbyist programmer. To the point that I feel like I cannot be as productive in ecosystems that are GUI based.
- use emacsclient and have aliases for emacsclient -c and and emacsclient -n for popping up a new frame or using the console, respectively. I even have a window manager binding to open a new Emacs client window
- Rainer König is the best at getting across org mode workflows. if you like watching nerdy videos, go watch him.
- keep vim around, I still use it, sometimes, but with no or veery minimal config.
- centaur tabs and the new tab stuff can help vim people who like tabs. I just got used to buffers.
- M-x is really Emacs' primary UI. don't try to think of a million and one key bindings up front, just bind what you find yourself using M-x a lot for. You just need a nice completing read like ivy, helm or so, but doom has that.
- use magit. While many claim that org-mode is the Emacs killer feature, I'd say magit is even more important if you code. There simply is no better git interface, nothing comes close. You think git the new porcelain is cool? Magit is a git jacuzzi.
You can purchase extensions for it which are all pretty cheap. You can also pay for a membership to get all extensions - this costs only $10 a year.
The creator of the app is very active in the forums and is constantly updating and improving the app. I love it and it has made my usage of org-mode on the go much easier.
[1]: https://beorgapp.com/ [2]: https://beorgapp.com/manual/scripting/
I switched to Doom Emacs about two years ago and while I miss the insane performance and simplicity of vim sometimes, the positives overall outweigh the negatives once you get over the initial differences (workspaces, command names, etc.).
Evil is great, but you end up having to know Vim keybindings and some Emacs keybindings since Evil doesn't cover everything.
It certainly can with additional Evil extensions and modifying your .emacs, but I still felt like there were some parts of Emacs where I needed to know Emacs key bindings.
God-mode works since it just makes it so that you can use Emacs keybindings without modifier keys. Everything works out of the box. Best part is that you can install extensions without needing to come up with Evil keybindings for them.
IdeaVIM get 90% of VIM right, and some things wrong (such as `u` for undo also undoing movements). Evil gets 95% of VIM right. But I have high hopes for NeoVIM allowing an actual first-class VIM implementation to be embedded, not copied, into an IDE or even Emacs.
For me, :wq closes the current buffer. For me, :e works as expected.
There might be a built in alternative to :set nu. How do you expect that to work?
I was wrong about `:e`, it does work.
Instead of `:set nu` I'm using Alt-X UpArrow+ to find `display-line-numbers-mode`, which does what it says. But there are other settings which I have on muscle memory macro that do not work, such as `:set wrap!` which I use often with my portrait monitor.
"I started a new job working on a large typescript React project. Vim couldn’t handle opening a TSX file larger than 50 lines without crashing."
And I was like LOL WUT? The author's case in this regard woudl be stronger if they helped us understand what was actually going wrong. Bad plugins? Conflicting macros? I'm pretty sure that simply opening a 50 line TSX file does not normally crash vim.Sure, there are a bunch of choices for you to use... but now you have another problem -- there are a bunch of choices.
On the flip side, if you want easy configuration, then yes, vim/emacs/similar are not necessarily the right choices for you, but I don't think that means they are generally bad options.
I don't think this advice makes sense at all. I can't maintain cc-mode and I don't understand how it works, yet I rely on it.
Users should not be expected to understand how the TypeScript autocompletion works in order to get it working. I can open VS Code on a TypeScript project and get autocompletion working just based on the tsconfig.json, much of the time.
libraries live or die based on their interface.
Hence why, despite my interest in Fish, I'm still just making do with Bash, I just can't justify the time to make a proper switch.
It would be a whole lot easier if someone put together a set of basic configs for various languages that had language servers, completion, etc. and everyone referred new people to those. It's much easier to tweak and replace stuff than to assemble an entire config wholesale.
This is relevant because COC is basically a system for talking to language servers.
These are not questions I've ever had to ask myself in the ~8 years I've been using IntelliJ IDEs for coding full-time.
Maybe it's easy to fix vim in this case, but it's really annoying to constantly have to Google your problem, find a fix, test out new configs, etc.
I left Linux after 20 years for the same reason. I'm happy to pay a small amount to have highly-paid software teams figure these things out for me.
Instead of auto-imports and auto-complete I was forced to have java/scala docs open for whatever library I was using. Beyond giving me better muscle memory for the core language libraries, this had the interesting side effect of only using well documented libraries.
The lack of jump-to-definition also made me think more about dependencies in the code I was writing since they would require a cognitive leap and reasonably heavy context switch. Since cross-file refactoring requires bash-fu and is also a heavy process, this furthered my desire to minimize coupling.
I can't say I'm more productive and if I were coding day in and day out for my day job I would probably still use IntelliJ (especially for large Java code bases that were crafted by advanced IDE usage), but I find coding to be a more holistic endeavor now.
I hope LSP beats JetBrains products. It's an open standard and lets language designers focus on their language instead of tooling.
Don't get me wrong, JetBrains products are well polished and productive. I just don't see them being able to compete in the long-term with LSP, which is free and more attractive to language designers.
That's great that you get to choose your own libraries. I'd wager most people that are using IntelliJ (or any IDE) also don't often have much of a choice in libraries they're using.
IDEs never seemed to appeal to me when I was writing 100% of my own code. When I migrated to using more and more OPC (other peoples' code), whether project legacy stuff, or third party libraries, the ability to more quickly scan/jump/drill into that OPC, the more value I realized from various IDEs. Mostly JetBrains these days (interested in pairing with folks with their newish 'code with me' plugin/service), but vscode and eclipse make their way in to my life for small periods now and then.
"I write by hand. Using a typewriter will take me away further away from the essence of 'writing'" etc...
"Why would I email? Fax works fine for me and I get a hard copy" etc...
Ok, so wow! No! Definitely not the message I was trying to convey. I love books, have many of them, don't read as much as I'd like, but would _certainly_ love to have more of them memorized! I'm always jealous of those folks who can recite poems from memory and the like.
> "I write by hand. Using a typewriter will take me away further away from the essence of 'writing'" etc...
Off (my) topic, but because you brought it up, writing by hand does increase memory retention! (https://www.scientificamerican.com/article/a-learning-secret...)
> "Why would I email? Fax works fine for me and I get a hard copy" etc...
Well... I do have a very nice laser printer and tend to print whitepapers even though I have a really nice iPad to read them on.
So I guess all of the above could add up to me being a bit of a luddite, which I accept, but really I guess I was just expressing my way of retaining and improving my own knowledge of programming languages that I like. Hard copy reading, hand writing (which I don't actually do much of) and navigating scaladocs instead of tab-completion helps me do that.
As I also said, if my job depending on my coding output, I would absolutely use a full featured IDE of one sort or another.
I guess that's nice to know, but it's also almost trivia. I write better code faster in an IDE and navigate existing code faster, and this is having worked in vi, VS Code, and IntelliJ.
It's a text editor.
Or even against programmers editors like SlickEdit.
I installed a couple plugins in Vim. But those all provide features I actually use and they barely affect performance. But more importantly I just prefer the Vim approach: start out with a minimal UI and feature set and only add or tweak what is needed. No weird and distracting auto-formatting while I'm still typing, more intuitive tabs/buffers and nothing running in the background all the time. I might be an outlier because most editors and IDEs have standard configs that I find distracting and frustrating, but I rather put a motor and bags on my bicycle than start cutting down a truck.
I actually very much agree with you that IntelliJ's all-batteries-included bits can be distracting and frustrating at times, and it's annoying to track down and disable the stuff you don't want. The memory usage makes me cry; occasionally the OOM killer murders it on my 16GB laptop.
But IntelliJ actually does all the things I want it to, reliably, and (mostly) without fuss. vim/nvim just... doesn't. Or I haven't figured out how to get it to do it after hours of trying, which amounts to the same thing.
It makes me super sad, because a part of me rebels at having to use a giant IDE to be productive, but that's just been my experience. I too would rather put a motor and bags on my bicycle than start cutting down a truck, but I haven't found a motor and bags that fit and work right for me, after more work than is reasonable trying.
I like how those two choices are starting to converge from both sides, thanks to language servers offering a more standardised way to make editors a bit smarter, as well as other programs getting plugins for using NeoVim as backend for text editing. I just don't feel like any of those two solutions is mature yet.
There are also now "distributions" of vim-configurations, which are taking care of delivering the IDE-experience out of the box and maintained by someone else. Also, don't forget that vi(m) by design is meant to be integrated as the editor-component in the environment of the unix-shell. So it always was part of an IDE from the beginning.
Though, it's true that there is an limit on how much it can do with it's momentary ability and architecture. It's textual, so it' can't copy the GUI-Components of modern IDEs or the assistants. Meaning it will likely always stay a second rate-IDE. But I guess that's ok. You don't need to be the best at every aspect of the workflow. At the end the final results are what matter.
It feels to me that Vim is great at the low-level process of editing text. Everything else is fine - as good as any power editor, but not inherently great. This is the complement of Emacs, which to me is exactly the other way around.
My "problem" is that since I've been using the same editor for 30 years, I don't tend to think too much about the manipulation of text. So even the tiniest of behavior changes is unsettling to me.
Though I could probably adapt.
I should try it all again (maybe not emacs, but something), and really set up everything well for auto-complete and such (mainly C and Rust). My current vim setup (using pathogen) is sort of a mess.
When I have only a minor edit to make in the middle of typing something (like transposing two characters) it saves me the back-and-forth with the normal mode and it's really sweet.
It probably makes me an heretical freak, but I'm definitely hooked. I guess I am condemned to live the rest of my life in emacs now.
But I write R/python/markdown, so it works out fine for me.
https://medium.com/@elecming/the-ultimate-emacs-hacking-tuto...
The refactoring tools in JetBrains products are amazing for me. Renaming a variable and having all uses within scopes renamed too is great. Renaming classes by patterns is also great. Being able to move definitions to new files and have it update all my imports etc is great.
Not sure I see any downsides to optional tools
With high-powered auto-completion and one-button refactoring, your brain stops processing the full name. No one's incentive to pause for a minute and come up with thoughtful variable names. For most developers it's too mentally tempting to just puke out some CamelCase word salad, because the IDE hides all the effort of having to read/write/remember unfortunate names.
It's great to pause and come up with meaningful names and I agree more developers should do it, but refactoring is a normal part of coding and I'd rather have an easy way of renaming things as the code evolves.
For class names it might be true that long compound names are driven by auto suggestions from the IDE. But I'm wondering if they're really as bad as their reputation. Somehow it's similar as for variables. You can still come up with more meaningful names if you want but I admit that auto suggestions do more harm there.
I’m biased, though. I HATE gigantic supposedly “self documenting” (but utterly impossible to actually say aloud) identifiers.
My ideal identifiers are 2, maybe 3, syllables, with dashes or underscores, with actual documentation of WHY anything visible beyond The scope of a single function is used.
And I'm unsure about your point about meaningful names - IDEA typically won't suggest a name when renaming an existing language artifact - type, class, object, method, function etc.
It will when extracting an expression into a variable, based on the context it was derived from, and that's actually a pretty good heuristic - e.g., if the expression being extracted is
<some_var> = dependency.get_campaign_results()
It'll suggest things like campaign_results
campaigns
results
Most of which are what a developer would usually use in that situation. sed -i 's/foo/bar/g' **.rb
It's not precise, so it might take some manual work and tweaking with the patterns, but for how often I've had to rename identifiers, it works good enough to handle the bulk work.A bit of forethought when first naming things works wonders, too.
You need an editor that can understand "this usage of 'containers' refers only to class 'Zoo', so I should find all variables of type 'Zoo' which reference the 'containers' field and change those."
hence
> It's not precise, so it might take some manual work and tweaking with the patterns
and like I said,
> for how often I've had to rename identifiers, it works good enough to handle the bulk work.
so
> You need an editor that can understand
No I don't, because renaming across many files is rare enough that I don't need it.
Most of the time, I do refactoring before it's gotten out of hand and so regular vim features like I mentioned in another comment are typically enough.
In other words, I think such understanding by the editor is too much complexity (and language-constrained, at that) for little reward.
I would suspect if a language advertises it has superior reasoning capabilities about code that should also enable a superior IDE experience as well. Where are those IDEs?
Tiny monitor.
Its like looking at your source code thru a paper towel tube instead of in VR.
Even if you can get a bigger monitor and give up on laptops, you'd STILL get to see more code at once using VIM.
Its "nice" and "interesting" I can see my build system innards on the left and with effort I can click them in and out but in practice people are lazy and just don't get to see as much.
At my preferred font size I get ~60 lines of code on a 27" screen in CLion, and at the very most you could get 65 lines in with no borders at all, at least two lines would also be used by vim. So... 3 more lines? For using an editor instead of an IDE? No thanks.
For some projects I have different language environments - like CLion and PyCharm - open simultaneously. With a browser in the background for checking docs and StackOverflow.
I suppose I could do all of that in Vim too, but I'm not sure why I'd want to.
There are things I'd improve about JetBrains, not least the ability to effortlessly open the same project on different machines. Currently that's clunky for some languages.
But generally it's a damn fine product.
Regardless, "can fit more code on one screen" is not even in my top 10 list of things I look for in my development environment.
> In Distraction-free mode, the editor occupies the entire main window with the source code centered. All other elements of the UI are hidden (tool windows, toolbars, and editor tabs) to help you focus on the source code of the current file. You can still use shortcuts to open tool windows, navigate, and perform other actions.
- exclude folders from indexing
- disable unused plugins
- install a theme like Nord
- setup debugging
- make sure you can run unit tests from the IDE
- add JSdoc tags so that IntelliJ can detect type mismatches.
- setup scopes in your project view to show only the files that you are working on.
And these are my personal preferences:
- Disable smooth scrolling
- Disable animations
- Disable code folding
- Hide status bar, navigation bar, toolbar. If you need something use the actions menu... Ctrl (or Cmd) Shift A.
My font settings: Monoid size 14, line spacing 1.5, greyscale antialiasing.
And check out distraction free mode + full screen
Yes, it's so awesome when colleagues writing lots of useless stuff into the code so they IDE can show some fancy popups here and there.
Nobody has money for that. Just add the type annotation and let the stupid computer do it, which is what people have been doing for decades anyways.
It seems you have totally forgotten what computers are for. You have much to learn, young padawan.
In my spare time I dabble in Unity, and what I always get stuck on is the IDE for the C# code. It used to come with an IDE that was pretty good, which I forget the name of. Autocomplete and other things worked out of the box. These days it comes with Visual Studio and I find it a pain. Auto complete, etc doesn't work, and getting it to work seems very complicated. I then go on the internet, and someone says VS code is good, so I try that, but run into the same issues integrating with the Unity libraries and so on, and before I know it I have spend a day just on trying and failing to configure IDEs and it's not that much fun to be honest. It sounds like Intellij might be better? I don't know.
At this point I just go back to writing Go in Vim where I am happy and don't have to spend so much time fighting to be allowed to write code.
I guess it is fine if one only cares about ASP.NET Core, and enjoys a little Java to power their .NET development stack.
That said, main downside to IntelliJ is IMO speed and input lag in editor windows, mainly in TSX files. I admit it's a complex language and the fact that Prettier runs on save probably isn't helping either, but still. It has trouble resolving imports, some are done automatically, others you have to select a quick fix options for, and sometimes both work and you end up with the import itself getting munged.
I was a happy VS Code user (after being a happy VIM user for a while) until I switched jobs from Go codebase to Ruby and then I quickly jumped back to IntelliJ. So far (for me) this is the only editor that correctly figures out most of the definitions and locations of methods/classes/etc.
Intellij IDEA is my go-to tool when working with the dynamic beast Ruby.
Well, actually Intellij IDEA is my overall go-to tool, also now when I work with Go again mostly.
I actually still do that even though work bought me an IJ license because my personal _suite_ license covers more tools
Still quite a lot more than I make in an hour, but definitely not $500. Are you looking at the organization pricing?
On the other hand, betting on open-source tooling may be a good way to increase the chances that your "best" tools will still be available in the future.
Not sure how to feel about the goal of vscode plugin compatibility. I'd hope for a vim based ide to kind of "be its own thing".
- Moving away from config and plugins in VimL, which is extremely idiosyncratic and awkward to use, towards lua and other languages via rpc
- Long term health of the project - neovim feels like a truly community driven project, whereas Vim seems bottlenecked by Bram and his specific desires. Neovim has also gone to great lengths to make the source easy to maintain long term.
- inccommand (https://neovim.io/doc/user/options.html#'inccommand')
- saner defaults
I use vim quite a lot, every day. I also use IntelliJ IDEA every day. And yes, there's a bit of mental switching I do, and every now and then I use vim navigation keys while in IDEA, but generally it works for me. Different tools for different jobs.
Then again, I have no trouble loading reasonably large documents in vim, so maybe I don't have mine quite as customized as the author.
BUT I relate to the feeling of not being quite sure that all of my customization are quite enough, of not using vim to its full potential. Or even 10% of its potential.
Some of this is particularly strong due to the language I use most - Java - where the IDE is nearly bulletproof in terms of finding exactly, only, and all real usages of identifiers (it won't ever get confused by two different identifiers with the same name) which isn't true for pycharm/python (though it does a good job honestly, but you can't blindly trust it like you can with intelliJ). I could see how someone would find pycharm not quite as much of a win over ctags, though IMO it still is.
[edit] That said, I still use vim quite a lot. I wouldn't use anything else for editing config files or just examining text content. Especially since you can pipe to it - seldom a day goes by when I don't "| vim -" instead of less or anything else.
There's a lot of built-in features in vim without requiring the installation of plugins. So, you might not need to customize it at all to use more of its potential, just read the manual.
Vim has the advantage of being portable and installed everywhere. I can also create a new file quickly, easier than IJ.
IJ has great Perl support and, the main reason I use it, a sane integrated Git GUI, the only one I've been able to use without tearing my hair out.
Because I'm freegan, I also get free entertainment in the form of IJ's "basic" support for js, html, css.
Give me a well designed commercial, terminal-based editor ( with a vim backend of course ), and I will happily pay for it.
Until then, it's nvim with mostly working plugins and I'm happy.
For a long time I thought I would miss vim editing experience but IdeaVim is the best vim emulation plugin I've ever seen and I hardly can remember a vim feature that is missing in IdeaVim.
Though I have to accept occasional UI freezes and huge memory consumption of CLion.
For the moment I mostly code in Python and I settled with a very minimal setup:
1. Linting: python-mode. IMHO it provides very good linting out of the box
2. Completion: jedi-vim. Jedi for python is great. Even though with this minimal setup the completion is not asynchronous I still think it's great.
It took me some time and a recent pruning to actually arrive at this minimal setup. I totally feel it with the author that finding the right set of plugins in Vim can be a bit overwhelming.
I've been slightly switching the opposite way, using vim more and more for smaller stuff and opening the IDE only for larger projects or work stretches. I definitely love the value of vim as a nifty tool, my workflow is noticeably faster.
As an aside, that cheeky :wq is not missed by me at all, :x all the way!
IMO yes. My machine has like 8 total and Chrome monopolizes quite a bit.
So I can see it being an issue, I just think an IDE isn't optimized for that kind of usage, I guess? I acknowledge I'm speaking from privilege here, though, and that probably non-professional users would like to use this software as well.
For what it's worth, I just took a glance at required PyCharm specs.¹ They recommend 8GB and minimum 2GB ram, which seems a bit dumbed down. I can't imagine anyone being able to properly run it without at least 4 gigs of ram even if they have nothing else running.
[1] https://www.jetbrains.com/pycharm/download/#section=windows
I remember lots of talk how intellisense might be harmful http://www.charlespetzold.com/etc/DoesVisualStudioRotTheMind...
Vim is not an IDE, and adding an infinite amount of plugins with the purpose of making it IDE-like, then complaining about how slow it is and how much it crashes, and how much better a proper IDE is, is IMHO a misconception of the true power of such a tool like Vim.
[edit]
FWIW, "gvim -v" will probably give you clipboard support in a terminal on ubuntu, and ubuntu might have an "alternatives" tool to make the "vim" in your path have X support. "The Ubuntu packager compiled vim with the feature I want disabled" is a poor argument against vim; it would be like someone saying "I switched away from vim because I wanted to write plugins in Python" just because the packaged version of vim they use has python integration disabled.
"+p pastes from the system clipboard.
The general point is right though. This is an issue with any terminal program that either doesn't allow selection of text, or has a system for selection of text that's separate to that of the terminal emulator.
I made a video tutorial around setting it up at: https://nickjanetakis.com/blog/getting-copy-paste-to-work-in...
2. Why would I run vim over ssh when I can use netrw with a local vim?
https://jamesclear.com/great-speeches/inventing-on-principle...
An app is the Ultimate Mode, of course, and there is a contextual sweet spot where you can draw the line between universality and contextual exclusivity.
This line depends on "nearness" (or familiarity) and your short & long-term working memory, but in general humans seem to enjoy universal modalities like Select/Cut/Copy/Paste that do not require you to switch into "Cut Mode" or "Copy Mode" while you are working with text, i.e. heritable context should provide heritable modes.
And yet, religious Vim users champion granular modes above all, including Selection and Edit modes. My conclusion is that they are either very wrong, or serious users have different neural architectures.
https://henrikwarne.com/2012/06/17/programmer-productivity-e...
I've got to say that I am still solidly in the IntelliJ IDEA camp.
I fear someday having to do job interviews and having to get up on a whiteboard or use some half-assed shared-coding IDE, because my fingers and eyes, they really want JetBrains products there... I don't type out for-loops, I use generators, etc. etc. it's all so much faster...
Last time when I praised CDT for embedded Linux developing, I was downvoted by these vim/clion lovers...
I just find all jetbrains products run like molasses, even with a 12-core machine with 32GB ram. I work fairly quick, and get frustrated when my editor holds me up.
Surprised to hear about the crashing issues with typescript, but I don't have any experience there.
AppCode is way snappier for me than Kotlin-in-IDEA. AppCode is also more likely to shit the bed and not be able to find a standard library class with ctrl-click.
PHPStorm has never given me trouble.
What matters to me is simple, composable, stand-alone utilities. I don't hesitate using GUI or IDE-like tools when it's appropriate to do so. What worries me, though, is that the continued investment and excitement in monolithic tools may mean that newer languages and technologies will be serving those users alone. Simplicity and minimalism may be a thing of past.
I use emacs for Clojure and I've been using VSCode for Typescript projects. Both had the largest communites of relevant developers making the best tools. And VSCode has the best TS plugins and the latest cool stuff.
Plus with VSCode I can use VIM mode, which does enough of the job (you know than 90%, minus the 10% which will never be the same).
But I still use Vim for everything else (RoR, JS, Elixir, Haskell, etc). Nothing beats vims speed, portability, or my familiarity and perfection of the config I spent 10yrs tweaking to my liking,
I don't know why or how, but JetBrains IDEs (WebStorm, IntelliJ, etc.) have much better TypeScript support than VS Code. I've used them both on the same project, and it's painful to use VS Code.
The main advantage of the JetBrains IDEs is that their built-in hinting/linting and code sense are much better. VS Code will fail to warn me about things that JetBrains does by default.
(I say this as someone heavily using eslint, by the way.)
Something about Code just works well for me for Typescript/Vue frontend work. But TBH I haven't tried TS in JetBrains. All I know is all the main TS devs seem to use Code and all the latest and greatest plugins get there first. It takes quite some time for them to filter down to Vim's community.
Maybe I'll give it another shot one day as TS matures.
I can get documentation for a function by pressing K and jump to the definition or do a global rename using some other key combination. I work on a few tens of languages but have language servers integrated for them all and have installed syntax highlighting for everything in existence.
Overall it's easy to manage and modify, and performs well.
My frustration with VSCode has been growing lately though as our codebase has swollen and many of the neat features have been breaking or missing the mark. Plus it has this annoying new behavior where it pops up two things at once which makes distraction free typing difficult.
also, question your workflows that you think are necessary. maybe they all are! a lot arent
i can get away with so much (basically) vanilla vim in a decently large codebase, but i know some of the lower level backend folks really really lean into heavy vim plugins and or ides because their loop/awareness is much diff than mine
I use Input Condensed proportional font. I love it. I have a hard time with vim because everything feels so ... wide and spaced out.
https://intellij-support.jetbrains.com/hc/en-us/community/po...
Pycharm goes further and supports React and modern web toolchains as well. I suspect jetbrains would rather have you buy an intellij license if possible.
I believe RubyMine is the same, if not all of the other paid IDEs in the Toolbox. They all include WebStorm's functionality since you can build a web app in pretty much anything, at least on the back end.
I don't have to worry about any of that with Vim either. I have a dotfiles repo on github which I sync to any new machine I set up. There's a script inside which symlinks the configs and .vim directory into my homedir. I've been using this for 15 years with very minor tweaks. It works.
VIM is the best. VIM uses less than 2gb ram. Be like VIM.
I guess for stupid rich people point and click is nice, but don't force me to use slow crashing Intellij. I did not even know the beach ball was still a mac feature until I used intellij to write Kotlin.
The jetbrains folks run a great bug tracking system; you can register and report any beachball inducing bugs; that's a big focus for them.
The autocomplete feature is a great example of this. I do not use an autocomplete plugin at all, but rather use Vim’s native ins-completion. Combined with a language server and a lightweight LSP client (I use vim-lsc) this works beautifully.
I am excited for some of the upcoming changes in neovim however. I think the introduction of treesitter for syntax highlighting and a native LSP client will both be huge
I am often torn with the same conundrum - I've been using neovim for Ocaml, and I really just like vim as an editor, but having inline linting is really really nice. But it's also really, really complex to configure, and it detracts from why I love vim so much - if I wanted an IDE, I'd be doing my Scala work over in Intellij.
I'm still contemplating whether I can get what I want with a second window a file watcher running build commands.
Agreed the treesitter is also really exciting.
For example, I've found the weirdest bugs when using visual block, especially in column mode. It just completely mangles everything.
Article literally goes "I tried to build ultimate IDE from vim, sometimes it's good, sometimes not, but then I discovered this not that free tool called IDEA and damn it works".