Noob User to Neovim

Greetings all: I have been a DevOps developer for several years, I am hesitant to reveal my actual age, but suffice it to say that my experience is mainly UNIX and Linux systerms from a Sys-Admin and Developer perspective.

I have used vanilla VIM for over 2 decades and was considering Emacs for my IDE. I have been using VS Code in recent years and REALLY want to get away from Microsoft where-ever possible. I am on Github, and realize they own that now, so totally departing is not possible, in my view.

I am reaching out as I move to NVIM from VIM as my day to day browser and would like an idea on where to get a good tutorial on transistioning from VS Code to NVIM for the handful of languages I am currently writing code in: They are Go, Rust, Electron, Python 3, Nodejs, React and a few others in JavaScript type realms and sometimes C-like lanaguages like Java. Any help is appreciated and I do want to totally leave VS Code behind.

Anyhow, thanks in advance!
Michael Needham
Kansas City, MO USA

First, it’s worth saying that Neovim is not a replacement for VS Code – they have different goals and target different audiences. That said, you can of course get much of the same functionality if you’re willing to put in a bit of configuration work.

Take a look at kickstart.nvim for an example on how to set up the LSP client for a variety of different servers. That example also includes plugins for things like snippets and auto completion, should you want them (which you likely do if you’re coming from VSC).

If you used plugins with Vim in the past then the concept of installing and configuring plugins shouldn’t be too difficult. Some brand new people find that process a bit overwhelming at times. If you have any questions or need any help, you can ask on the Neovim Matrix channel: https://matrix.to/#/#neovim:matrix.org

As mentioned above, Neovim configuration is a fairly DIY experience, combining lots of independent parts to create sophisticated functionality.

You will also need to learn to use Vim itself, of course. That’s a whole separate post worth of discussion, but you should at least start browsing the help documentation, using the :help command, and working through the Vim “tutor mode”, using the :Tutor command.

There are way too many useful Vim/Neovim plugins to list here. But for the “IDE-like experience” you will probably want these at minimum:

  • A plugin installer/manager; one of:
    • packer.nvim: A plugin installer/manager, configured entirely Lua. Gaining popularity and a good choice if you want to dive into the Lua side of things. I personally use this one.
    • vim-plug: A community mainstay, not the first of its kind but probably the most widespread recommendation across Vim and Neovim.
    • dein: A solid alternative to Vim-Plug. Look at the configuration examples and see which of the two you prefer.
  • nvim-lspconfig: A high-level configuration layer for the built-in Language Server Protocol client.
  • Language servers that you will want to install on your machine (see here for setup instructions within Nvim-Lspconfig):
  • nvim-treesitter: A high-level configuration layer for the built-in Tree Sitter interface.
  • telescope.nvim: A “command palette” plugin. Other options are out there, but Telescope is Neovim-specific, written entirely in Lua, and popular / under active development.

Other nice-to-have IDE features:

  • A GUI frontend; Neovim has a client-server architecture, and it can be run as either a terminal application (TUI) or a GUI application with a suitable frontend:
    • Neovim-Qt: My go-to recommendation. Mostly “just works”. Good performance and gets out of your way. Also has the best configuration design in my opinion. Uses the Qt framework.
    • Neovim-Gtk: I used it maybe once? Looks similar to Neovm-Qt, but using the Gtk framework instead of Qt. It’s probably a good choice if you already have a Gtk-based Linux desktop. Theoretically Gtk affords you much better control over typography (e.g. OpenType font features), but I don’t know if any of that is exposed to the user.
    • Neovide: GUI, with fancy features like animated window transitions and background blur.
    • GoNeovim: I tried it briefly, but switched back to Neovim-Qt for familiarity. Claims to be faster than Neovim-Qt. Uses the Qt framework.
    • Fvim: Seems to have a lot of nice features, but I never tried it.
  • A REPL helper plugin:
    • neoterm: Reasonably popular, relatively easy to use, and configurable. However I had some issues using IPython, so I switched to Iron (below).
    • iron.nvim: Arguably better out-of-the-box experience, but not as configurable. The author is also not adding new features right now for lack of time, but it works well and should continue to work well.
    • nvim-ipy: A Jupyter client in Neovim. I haven’t personally used it yet, but it’s high on my to-do list, because I am a very big fan of Jupyter as a general-purpose REPL protocol.
  • nvim-dap: A client for the Debug Adapter Protocol, which lets you hook up a step-through debugger in a Neovim window, among other things.
  • Debug adapters/servers:

I also recommend looking through various “big lists of cool plugins” (e.g. Neovimcraft and awesome-neovim), as well as experienced users’ configs to get an idea of what is possible. Here is mine, for example: ~wintershadows/dotfiles: .config/nvim/ - sourcehut git

Vim has an absolutely enormous range of customization options, and Neovim has even more. Learning to use Neovim and configure it precisely to your liking will be a gradual process over several months, probably even years. The nice thing about Neovim in particular is that it’s easier than ever, and it will only get easier over time. What was once only possible with guru-level expertise and a huge amount of work is now part of Neovim core and available to everyone!