Hi all! I installed nvim and completed the tutorial. I have been using CLion, PyCharm, IntelliJ IDEA, and VSCode. I primarily use an Ubuntu OS. I am open to a different distro.
When I tried to configure VSCode to allow me to use C++, Python, Java, and Assembly on one IDE it became unstable. Can nvim handle that?
Where do I go to figure how to customize this thing? For example, I don’t know what I should be installing for basic linting (I’m still a student). Do I need different modules for each language? Any resources would be most appreciated.
Thank you!
Hey! I highly recommend checking out this starter config: https://github.com/nvim-lua/kickstart.nvim. From their readme:
A starting point for Neovim that is:
- Small
- Single-file (with examples of moving to multi-file)
- Documented
- Modular
This repo is meant to be used by YOU to begin your Neovim journey; remove the things you don’t use and add what you miss.
To answer your question, vim (and consequently neovim) technically support a wide range of solutions for linting (there are a lot of plugins from the vim days, both language-specific and generalist), but nowadays neovim has leaned strongly into using LSP (“Language Server Protocol”), which was pioneered by the VS Code team.
Basically, in VS Code, when you get a language plugin, you’re downloading a language server for that language, which is a program that your editor (whether VS Code or neovim) communicates with to get information that it then uses for linting, syntax highlighting, and code actions. The great thing is, these language servers are editor-agnostic; there are language servers for just about every language, typically written either by the language maintainers themselves, or by 3rd parties.
Neovim has built-in support for using LSP, but it can be a bit of a hassle to set up by hand. The configuration I’ve linked you has a pretty decent basic setup for that, including keybinds for common actions. It also has a couple plugins that make LSP stuff very easy, like Mason. I don’t remember if it has null-ls, but if it doesn’t, consider trying that out as well. The configuration in question uses a plugin manager called “Lazy”; it’s linked in the documentation.
If you have any questions, let me know. Have fun!
Thank you!