NeoVim is an [[Apache v2]]/[[Vim License]] licensed modal text editor backend written in [[3. Reference/Software/Programming Languages/C|C]].
- [Website](https://neovim.io/)
- [GitHub](https://github.com/neovim/neovim)
- [AlternativeTo](https://alternativeto.net/software/neovide/about/
> hyperextensible [[Vim]]-based text editor
# Notability
NeoVim is a heavily refactored [[Vim]] with [[Lua]] scripting, first-class [[IPC]], and [[LSP]] support.
I have used it since not long after its original release in 2014.
# Philosophy
NeoVim is a project that seeks to aggressively refactor [Vim](https://www.vim.org/) in order to:
- Simplify maintenance and encourage [contributions](https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md)
- Split the work between multiple developers
- Enable [advanced UIs](https://github.com/neovim/neovim/wiki/Related-projects#gui) without modifications to the core
- Maximize [extensibility](https://github.com/neovim/neovim/wiki/Plugin-UI-architecture)
# OS Support
- [[Linux]]
- [[FreeBSD]]
- [[OpenBSD]]
- [[Android]]
- [[MacOS]]
- [[Windows]]
NeoVim, unlike mainline [[Vim]], does not currently run on `dv:link("Haiku OS")` but there are still some [efforts](https://discuss.haiku-os.org/t/vim-and-haiku/11992/3) being made to port it. Update [[2024-03-02]], efforts seem to have stalled.
# Features
- Modern [GUIs](https://github.com/neovim/neovim/wiki/Related-projects#gui)
- [API access](https://github.com/neovim/neovim/wiki/Related-projects#api-clients) from any language including C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java/Kotlin, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rust
- Embedded, scriptable [terminal emulator](https://neovim.io/doc/user/nvim_terminal_emulator.html)
- Asynchronous [job control](https://github.com/neovim/neovim/pull/2247)
- [Shared data (shada)](https://github.com/neovim/neovim/pull/2506) among multiple editor instances
- [XDG base directories](https://github.com/neovim/neovim/pull/3470) support
- Compatible with most Vim plugins, including Ruby and Python plugins
## GUIs
### NeoVide
- Smooth scrolling
- Animated cursor moving to better keep track of its location
- Scary fast - launches instantly, full drawn
#### Platform Support
- Linux
- MacOS
- Windows
# Tips
See also: [[Vim#Tips]]
## Obsidian Integration
Working with [[Obsidian Editor]] vaults and using similar markup and features.
- https://github.com/oflisback/obsidian-bridge.nvim
- https://github.com/epwalsh/obsidian.nvim
## Python Issues
If NeoVim starts up with a Python error, you probably need to install the `pynvim` package in pip:
```sh
python3 -m pip install --user --upgrade pynvim
```
Note that while there *is* a "`neovim`" package, it is deprecated for whatever annoying reason and should be removed when encountered.
- https://github.com/fsharp/zarchive-vim-fsharp/issues/96
## Disable System Config
The only way to fully avoid the system configurations is to set the `$VIM` environment variable to a new directory. NeoVim will expect certain things to be there, like `syntax/syntax.vim` and `autoloads/spellfile.vim` and `doc/*`
## Extract Theme Colors
The format the NeoVim returns colors in is incompatible with many plugins. Instead of returning a hex code, it returns a single raw number.
To convert it back into a usable format, you need to use `sprintf` notation:
```lua
("#%06x"):format(neovim_color_number)
```
- https://www.reddit.com/r/neovim/comments/14p34gt/question_what_is_the_format_of_highlights/
# Resources
## Preconfigs
See: [[Vim Preconfigs]]
## Docs
- https://neovim.io/doc/user/syntax.html
- https://neovim.io/doc/user/syntax.html#highlight-groups (syntax highlighting, color themes)
- https://neovim.io/doc/user/tui.html#tui-colors
## Plugin Lists
- https://vimawesome.com/?q=neovim
- https://github.com/rockerBOO/awesome-neovim/blob/main/README.md
### Distros
- https://github.com/sontungexpt/stinvim
## Plugins
```cardlink
url: https://github.com/windwp/nvim-autopairs
title: "GitHub - windwp/nvim-autopairs: autopairs for neovim written in lua"
description: "autopairs for neovim written in lua. Contribute to windwp/nvim-autopairs development by creating an account on GitHub."
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/d104d847022d68ba04ae2a18999efad634ddeb304d5e6b9e0fff1bbeb5ac28d5/windwp/nvim-autopairs
```
```cardlink
url: https://github.com/akinsho/toggleterm.nvim
title: "GitHub - akinsho/toggleterm.nvim: A neovim lua plugin to help easily manage multiple terminal windows"
description: "A neovim lua plugin to help easily manage multiple terminal windows - akinsho/toggleterm.nvim"
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/42756edcc3f8b222fe9013a782bb9c77003a4d061f2d215ba860a048590ceb49/akinsho/toggleterm.nvim
```
```cardlink
url: https://github.com/numToStr/Comment.nvim
title: "GitHub - numToStr/Comment.nvim: :brain: // Smart and powerful comment plugin for neovim. Supports treesitter, dot repeat, left-right/up-down motions, hooks, and more"
description: ":brain: :muscle: // Smart and powerful comment plugin for neovim. Supports treesitter, dot repeat, left-right/up-down motions, hooks, and more - GitHub - numToStr/Comment.nvim: :brain: // Smart and..."
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/d4e5a4f4917c68b6efe5ff26dedda90796f00deab086d16725d646a19a6d6018/numToStr/Comment.nvim
```
## Status Lines
### sttusline
```cardlink
url: https://github.com/sontungexpt/sttusline/tree/table_version
title: "GitHub - sontungexpt/sttusline at table_version"
description: "A very lightweight, super fast and lazyloading statusline plugin for Neovim written in lua. - GitHub - sontungexpt/sttusline at table_version"
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/8eb676dfc6e22593abcfd4ee9f3b21ebb33a988e113d7a345fc6608fac823704/sontungexpt/sttusline
```
### LuaLine
#### Builds
```cardlink
url: https://github.com/nvim-lualine/lualine.nvim/blob/master/examples/slanted-gaps.lua
title: "lualine.nvim/examples/slanted-gaps.lua at master · nvim-lualine/lualine.nvim"
description: "A blazing fast and easy to configure neovim statusline plugin written in pure lua. - nvim-lualine/lualine.nvim"
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/19f36ce90a9cfb0330b2d882b2af3b411a1bb094474ab78519202d6b414b66ea/nvim-lualine/lualine.nvim
```
### Incline
#### Builds
```cardlink
url: https://github.com/b0o/incline.nvim/discussions/75
title: "Diagnostics + Diff + Devicons + Filename + Modification indicator + Colorsheme for focused/unfocused · b0o/incline.nvim · Discussion #75"
description: "Here's the config I made which takes ideas from #31, #32 , #63, #70 and others shared here. Required by this config: LazyVim gitsigns.nvim lualine.nvim You can replace the dependent part of the con..."
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/73507656468a5badd7c65a5586bf42ed8852646a1b2c1480830f2f7b317bc7fb/b0o/incline.nvim/discussions/75
```
```cardlink
url: https://github.com/b0o/incline.nvim/discussions/32
title: "Diagnostics + Git Diff + Filename · b0o/incline.nvim · Discussion #32"
description: "Inspired by #31 , I copied the code and added gitsign integration. I still use lualine but this obviates my need for tabline. Cheers. require('incline').setup({ render = function(props) local filen..."
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/2a126b18b91d1c5fe6538021a603cd7b5615575e0ce107f0aaf0fc9d9a8a5b6a/b0o/incline.nvim/discussions/32
```
### Tabs / Buffers
```cardlink
url: https://github.com/nanozuki/tabby.nvim
title: "GitHub - nanozuki/tabby.nvim: A declarative, highly configurable, and neovim style tabline plugin. Use your nvim tabs as a workspace multiplexer!"
description: "A declarative, highly configurable, and neovim style tabline plugin. Use your nvim tabs as a workspace multiplexer! - nanozuki/tabby.nvim"
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/6809e78dac4e32634bb9778de80eb96d462be933bb21d1cd12e63912f70f760d/nanozuki/tabby.nvim
```
```cardlink
url: https://github.com/akinsho/bufferline.nvim
title: "GitHub - akinsho/bufferline.nvim: A snazzy bufferline for Neovim"
description: "A snazzy bufferline for Neovim. Contribute to akinsho/bufferline.nvim development by creating an account on GitHub."
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/f22e6570f180a21d2bb25ed7fbe2a9e4cfbf57798be8c898689fd5f96a8a6f04/akinsho/bufferline.nvim
```