Jump to content

Neovim: Difference between revisions

4,570 bytes added ,  Monday at 13:15
m
no edit summary
imported>SaphireLattice
(Add a note about module disabling init.vim)
mNo edit summary
(34 intermediate revisions by 14 users not shown)
Line 1: Line 1:
__TOC__
[https://neovim.io/ Neovim] is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]] editor. It's designed to be a drop-in replacement for Vim, maintaining compatibility with most Vim plugins and configurations while offering additional features and improvements. Neovim focuses on extensibility, usability, and performance.


== Installation and configuration ==
It introduces a powerful plugin architecture that allows for asynchronous plugin execution, which can significantly improve performance for certain operations. It also includes a built-in terminal emulator, allowing users to run shell commands directly within the editor. The project emphasizes code quality and maintainability, with a clean, well-documented codebase that makes it easier for developers to contribute.
Neovim shares most of it's configuration with [[Vim]]. See the [[Vim|Vim page]] for more details on the use of both.


== Configure Neovim as the default Editor ==
== Installation ==
Add this to your <code>configuration.nix</code>


<code>environment.variables.EDITOR = "nvim";</code>
==== Using nix-shell ====
<syntaxhighlight lang="bash" start="3">
nix-shell -p neovim
</syntaxhighlight>


== Set Neovim as <code>vi</code> and <code>vim</code> ==
==== Using Global Configuration ====
Add this to your <code>configuration.nix</code>
<syntaxhighlight lang="text">
environment.systemPackages = [
  pkgs.neovim
];
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash">
sudo nixos-rebuild switch
</syntaxhighlight>


  nixpkgs.overlays = [
==== Using Home Configuration ====
    (self: super: {
<syntaxhighlight lang="text">
      neovim = super.neovim.override {
home.packages = [  
        viAlias = true;
  pkgs.neovim  
        vimAlias = true;
];
      };
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash">
    })
home-manager switch
  ];
</syntaxhighlight>


Alternatively you can use the neovim module (merged in september 2020).
== Configuration ==


  programs.neovim.enable = true;
==== Basic ====
  programs.neovim.viAlias = true;
<syntaxhighlight lang="nix">
# Global Configuration
programs.neovim = {
  enable = true;
  defaultEditor = true;
};


Using module will make nix manage the neovim configuration, disabling <code>init.vim</code>
# Home Configuration
programs.neovim = {
  enable = true;
  extraConfig = ''
    set number relativenumber
  '';
};
</syntaxhighlight>


== Note on errors using default `packages` for plugins requiring Lua modules ==
==== Advanced ====
<syntaxhighlight lang="nix">
# Global Configuration
programs.neovim = {
  enable = true;
  defaultEditor = true;
  viAlias = true;
  vimAlias = 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 ];
    };
  };
};


[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:
# Home Configuration
# You have to add the line below to set it as the default editor:
environment.variables.EDITOR = "nvim";
</syntaxhighlight>


  programs.neovim = {
== Tips and Tricks ==
    plugins = [
 
      {
==== Where to see a list of options? ====
        plugin = nvim-colorizer-lua
The home manager options are defined in the following [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable Home Manager Options Manual].
        config = ''
 
          packadd! nvim-colorizer.lua
The global options are listed on [https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim MyNixOS].
          lua require 'colorizer'.setup()
 
        '';
==== Can I use the latest version? ====
      }
Have a look at 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"
 
==== What if I don't want to configure it myself? ====
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:
 
* [https://www.lazyvim.org/ LazyVim]
* [https://astronvim.com/ AstroVim]
* [https://nvchad.com/ NVChad]
* [https://wiki.nixos.org/wiki/LunarVim LunarVim]
 
==== How to configure plugins? ====
<syntaxhighlight lang="nix">
plugins = [
  # Example Plugin: nvim-tree-lua
  pkgs.vimPlugins.nvim-tree-lua
 
  # Example Plugin: vim-startify with configuration
  {
    plugin = pkgs.vimPlugins.vim-startify;
     config = "let g:startify_change_to_vcs_root = 0";
   }
   }


== To build neovim master ==
  # Example Plugin: nvim-colorizer-lua with Lua config
  # 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:
  {
    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
    '';
  }


Use the official documentation:
  # Example Plugin: nvim-treesitter with Lua config
https://github.com/neovim/neovim/wiki/Building-Neovim#nixos--nix
  {
The neovim repository now contains a flake so you can run the master version via `nix run github:neovim/neovim?dir=contrib`
    plugin = pkgs.vimPlugins.nvim-treesitter;
    config = ''
      packadd! nvim-treesitter
      lua <<EOF
        require'nvim-treesitter.configs'.setup {
          highlight = {
            enable = true,              -- false will disable the whole extension
            disable = {},              -- list of languages that will be disabled
          },
          incremental_selection = {
            enable = true,
            keymaps = {
              init_selection = "gnn",
              node_incremental = "grn",
              scope_incremental = "grc",
              node_decremental = "grm",
            },
          },
          textobjects = {
            select = {
              enable = true,
              lookahead = true,
              keymaps = {
                ["af"] = "@function.outer",
                ["if"] = "@function.inner",
                ["ac"] = "@class.outer",
                ["ic"] = "@class.inner",
              },
            },
          },
        }
      EOF
    '';
  }


There is also an overlay available:
  # Installing grammars for tree-sitter
https://github.com/nix-community/neovim-nightly-overlay
  # Option 1: Install all grammar packages
  pkgs.vimPlugins.nvim-treesitter.withAllGrammars
 
  # Option 2: Install specific grammar packages
  # (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ]))


== See Also ==
  # Option 3: Installing grammars without Nix
* [[Vim]]
  # Installing grammar packages through the built-in command can lead to errors.
* [[Tree sitters]]
  # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
];
</syntaxhighlight>
 
== References ==
 
# https://neovim.io/
# https://github.com/neovim/neovim
# https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable
# https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim
# https://github.com/m15a/flake-awesome-neovim-plugins
# https://github.com/NixNeovim/NixNeovimPlugins
# https://www.lazyvim.org/
# https://astronvim.com/
# https://nvchad.com/
# [[LunarVim]]


[[Category:Applications]]
[[Category:Applications]]
[[Category:Text Editor]]
48

edits