Mileage varies, even the most ardent vim user I know gave up and switched to VS Code this year. It's just too much to try to keep up with when projects and technologies change. I've programmed in C++, Go, Python, Java, and Angular just in the last year. I can believe that there's vim plugins to handle all those, but the energy it would take to find auto-complete and navigation and formatting and debugging and any number of other out-of-the-box IDE functionality is more than I'd like to thing about. Then there's the associated tools - Kubernetes yamls, swagger, markup, Makefiles. In IDEs they are only one plugin download away.
I love vim, I used it exclusively for years when I was doing C/C++. I still ssh into servers a lot and use it pretty much daily. Still, I'm far to lazy to try to turn it into my full time development environment .
> I can believe that there's vim plugins to handle all those, but the energy it would take to find auto-complete and navigation and formatting and debugging and any number of other out-of-the-box IDE functionality is more than I'd like to thing about.
Well, I'll be the bearer of the good news, then!
NeoVim has a native LSP client which unifies all auto-complete/navigation/formatting into a single plugin, only requiring you to install per-language LSP server.
As for debugging, there's also DSP (Debug Server Protocol) which NeoVim doesn't have native support for, but there's a plugin for that.
I use vscode and IntelliJ these days. In rust, IntelliJ lets me rename functions and variables across my entire project. Or select a few lines of code and extract them into their own function. It’ll even figure out what arguments the function needs and call it correctly.
I’m writing a paper at the moment using vscode and typst (a modern latex replacement). The vscode plugin shows me the resulting rendered pdf live as I type. I can click anywhere I want to edit in the pdf and the editing window will scroll to the corresponding source text.
Maybe there’s ways to do all this stuff in vim but I never found it. I used vim on and off for 20 years and I barely feel any more productive in it than when I was 6 months in. As far as I can tell, IntelliJ is both easier to learn and more powerful.
Making nontrivial software in vim just doesn’t feel productive. LSP is the tip of a big iceberg of features.
The rename across the project scenario is a LSP feature that Neovim supports. I use it frequently. I do miss the ability to trivially extract a function. I used to do that all the time in Visual Studio back in my C# days.
Yeah; and there's so many little features like that - most of which I use rarely, but they're still useful. Aside from rename, there are:
- Change function arguments. (Eg, reorder the arguments of a function and update all callers)
- Add a new function argument. Eg, if I change a call from foo() to foo(some_int), the suggested actions include adding a new parameter to foo with some_int's type.
- Contextually fill in trait, struct, or match statements
- Move a bunch of stuff to a new / different file
- Organize imports
- Run a test. Anything function with #[test] and no arguments can be run or debugged instantly with the click of the mouse.
- Up and down buttons for trait implementations. See the definition for a trait method, or jump to one of its implementations.
I have no idea how to do any of this stuff in vim. Maybe its possible with enough macros and scripts and mucking about. I really do admire vim's tenacity, but seriously. The time spent learning a modern IDE pays dividends in weeks and our careers are measured in decades.
I love vim, I used it exclusively for years when I was doing C/C++. I still ssh into servers a lot and use it pretty much daily. Still, I'm far to lazy to try to turn it into my full time development environment .