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 ```