Jump to content

Neovim: Difference between revisions

import from old wiki
imported>JRavi2
m (Corrected link format)
(import from old wiki)
(35 intermediate revisions by 17 users not shown)
Line 1: Line 1:
__TOC__
[https://neovim.io Neovim] is a fork of [[Vim]] aiming to improve the codebase, allowing for easier implementation of APIs, improved user experience and plugin implementation.


== Configure Neovim as the default Editor ==
Due to the large number of plugins, it is possible to extend and configure neovim to fit the exact needs of the user. Many users start working with neovim with a preconfigured neovim distribution (such as [https://www.lazyvim.org/ LazyVim], [https://astronvim.com/ AstroVim], [https://nvchad.com/ NVChad]) or use the preconfigured NixOS package for [[LunarVim]]. This way you can learn what is possible. Experienced users often advise to familiarize themselves with neovim and then create their own configuration from scratch.
Add this to your <code>configuration.nix</code>


<code>environment.variables.EDITOR = "nvim";</code>
For people who like the modal text editors in a terminal but don't want to spend so much time configuring it, the [[Helix]] editor might be the right choice.


== Set Neovim as <code>vi</code> and <code>vim</code> ==
== Installation ==
Add this to your <code>configuration.nix</code>


   nixpkgs.overlays = [
=== System-wide ===
     (self: super: {
 
       neovim = super.neovim.override {
If you do not use Home Manager, you can use the following code in your NixOS configuration:
        viAlias = true;
 
        vimAlias = true;
<syntaxhighlight lang="nix">
      };
programs.neovim = {
    })
  enable = true;
  ];
   defaultEditor = true;
};
</syntaxhighlight>
 
You can also manually add Neovim to your packages. This should only be used if the two version above do not work for you.
 
<syntaxhighlight lang="nix">
environment.systemPackages = [ pkgs.neovim ];
</syntaxhighlight>
 
=== With Home Manager ===
 
[[Home Manager]] has a module for Neovim, which can be enabled via
 
<syntaxhighlight lang="nix">
programs.neovim = {
  enable = true;
  extraConfig = ''
     set number relativenumber
  '';
};
</syntaxhighlight>
 
More information about the module can be found here: [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable Home Manager Manual].
 
== Configuration ==
 
Neovim shares most of its configuration with Vim. See the [[Vim|Vim page]] for more details on the use of both.
=== System-wide ===
 
The NixOS module does not have an <code>extraConfig</code> option as the Home Manager module does.
Instead, you can use the <code>programs.neovim.configure</code> option as described [https://search.nixos.org/options?show=programs.neovim.configure&type=packages&query=neovim here].
 
The following example configures RC commands and enables the plugin <code>ctrlp</code> to support fuzzy file search (see [https://github.com/ctrlpvim/ctrlp.vim homepage] on how to use it)
 
<syntaxhighlight lang="nix">
programs.neovim = {
  enable = true;
  configure = {
    customRC = ''
      set number
      set cc=80
      set list
      set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:»
      if &diff
        colorscheme blue
      endif
    '';
    packages.myVimPackage = with pkgs.vimPlugins; {
       start = [ ctrlp ];
    };
  };
};
</syntaxhighlight>
 
To set Neovim as your default editor:
 
<syntaxhighlight lang="nix">
programs.neovim = {
  defaultEditor = true;
};
</syntaxhighlight>
 
Further, the NixOS module does also expose options to automatically add <code>vi</code> and <code>vim</code> aliases.
To use them, add the following to your NixOS configuration:
 
<syntaxhighlight lang="nix">
programs.neovim = {
  viAlias = true;
  vimAlias = true;
};
</syntaxhighlight>
=== With Home Manager ===
 
The Home Manager module does not expose many configuration options. Therefore, the easiest way to get started is to use the [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.extraConfig extraConfig] option.
You can copy your old config or directly load your default Neovim config via:
 
<syntaxhighlight lang="nix">
programs.neovim.extraConfig = lib.fileContents ../path/to/your/init.vim;
</syntaxhighlight>
 
To use Neovim as your default editor, you can set the <code>EDITOR</code> [https://search.nixos.org/options?show=environment.variables&type=packages&query=environment.variables environmental variable] to "nvim" by adding the following to your NixOS configuration:
 
<syntaxhighlight lang="nix">
environment.variables.EDITOR = "nvim";
</syntaxhighlight>


Alternatively you can use the neovim module (merged in september 2020).
The Home Manager module does also expose options to automatically add <code>vi</code> and <code>vim</code> aliases.
To use them, add the following to your Home Manager configuration:


  programs.neovim.enable = true;
<syntaxhighlight lang="nix">
programs.neovim = {
  viAlias = true;
  vimAlias = true;
};
</syntaxhighlight>


== Note on errors using default `packages` for plugins requiring Lua modules ==
==== Installing Plugins ====


[https://github.com/nanotee/nvim-lua-guide#a-note-about-packages Due to how the `runtimepath` for Lua modules is processed], your configuration may require `packadd! plugin-name` to require a module. A home-manager example:
Plugins can be installed using the <code>programs.neovim.plugins</code> option.
You can add only the plugin, or the plugin with its corresponding config:


  programs.neovim = {
<syntaxhighlight lang="nix">
    plugins = [
programs.neovim.plugins = [
      {
  pkgs.vimPlugins.nvim-tree-lua
        plugin = nvim-colorizer-lua
  {
        config = ''
    plugin = pkgs.vimPlugins.vim-startify;
          packadd! nvim-colorizer.lua
     config = "let g:startify_change_to_vcs_root = 0";
          lua require 'colorizer'.setup()
        '';
      }
     ];
   }
   }
];
</syntaxhighlight>
If you only add the plugin, you can add the configuration as described above.
An index of official packages can be found in on [https://search.nixos.org/packages?from=0&size=50&sort=relevance&type=packages&query=vimPlugins search.nixos.org].
In addition to the official packages, there are several user maintained repositories, such as [https://github.com/m15a/flake-awesome-neovim-plugins awesome-neovim-plugins] or [https://github.com/NixNeovim/NixNeovimPlugins NixNeovimPlugins]. Plugins which are
not available in any of these repositories may be integrated using the <code>vimUtils.buildVimPlugin</code> function from Nixpkgs:
<syntaxhighlight lang="nix">
pkgs.vimUtils.buildVimPlugin {
  pname = "whatever";
  version = "whatever";
  src = builtins.fetchGit {
    url = "https://github.com/example/whatever.git";
    ref = "whatever";
  };
  buildScript = ":";
}
</syntaxhighlight>


== To build neovim master ==


Use the official documentation:
https://github.com/neovim/neovim/wiki/Building-Neovim#nix-or-nixos
The neovim repository now contains a flake so you can run the master version via `nix run github:neovim/neovim?dir=contrib`


There is also an overlay available:
== Tips and tricks ==
https://github.com/nix-community/neovim-nightly-overlay
 
=== Neovim Nightly ===
 
You can also use the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay] to install the most recent current nightly version of neovim.
 
You can run the master version via the following command:
 
nix run "github:nix-community/neovim-nightly-overlay"
 
==== Developing / Building ====
 
If you want to develop neovim, you may use
 
  nix develop "github:nix-community/neovim-nightly-overlay"
 
to acquire a suitable environment.
 
=== Note on Lua plugins  ===
 
Due to how the `runtimepath` for Lua modules is [https://github.com/nanotee/nvim-lua-guide#a-note-about-packages processed], your configuration may require <code>packadd! plugin-name</code> to require a module. A home-manager example:
 
<syntaxhighlight lang="nix">
programs.neovim = {
  plugins = [
    {
      plugin = pkgs.vimPlugins.nvim-colorizer-lua;
      config = ''
        packadd! nvim-colorizer.lua
        lua << END
require 'colorizer'.setup {
  '*'; -- Highlight all files, but customize some others.
  '!vim'; -- Exclude vim from highlighting.
}
END
      '';
    }
  ];
}
</syntaxhighlight>


== See Also ==
== See Also ==
[[Vim]]
* [[Vim]]
* [[Treesitter|Treesitter for Neovim]]
 
[[Category:Applications]]