Jump to content

Neovim/ru: Difference between revisions

From NixOS Wiki
Unabomberlive (talk | contribs)
Created page with "== Решение проблем =="
FuzzyBot (talk | contribs)
Updating to match new version of source page
 
Line 1: Line 1:
<languages/>
<languages/>
{{infobox application
  |name=Neovim
  |image=Neovim-mark.svg
  |type=Text Editor
  |developer=Neovim Core Team & Community
  |firstRelease=November 1, 2015
  |latestRelease=Nvim 0.11.2 (May 30, 2025)
  |status=Active
  |license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license)
  |os=Cross-platform (Linux, macOS, Windows)
  |platform=Desktop
  |programmingLanguage=C, Lua, Vim Script
  |website=[https://neovim.io/ neovim.io]
  |github=neovim/neovim
  |bugTracker=[https://github.com/neovim/neovim/issues GitHub Issues]
  |documentation=[https://neovim.io/doc/ Official Documentation]
}}
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, N/A. https://neovim.io/</ref> is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]]<ref>NixOS Wiki, Vim. https://wiki.nixos.org/wiki/Vim</ref> 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.
:''See also: [[Vim]]''
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/</ref> is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]]<ref>NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim</ref> 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.
</div>
</div>


Line 9: Line 28:
== Установка ==
== Установка ==


<span id="Using_nix-shell"></span>
<span id="Shell"></span>
<div class="mw-translate-fuzzy">
==== Используя nix-shell ====
==== Используя nix-shell ====
</div>


<syntaxhighlight lang="bash" start="3">
<div lang="en" dir="ltr" class="mw-content-ltr">
nix-shell -p neovim
To temporarily use Neovim in a shell environment without modifying your system configuration, you can run:
</syntaxhighlight>
</div>


<span id="Using_Global_Configuration"></span>
{{code|lang=bash|line=no|1=$ nix-shell -p neovim}}
==== Глобально ====


<syntaxhighlight lang="text">
<div lang="en" dir="ltr" class="mw-content-ltr">
environment.systemPackages = [
This makes the Neovim editor available in your current shell. You can then launch Neovim by typing <code>neovim</code>.
  pkgs.neovim
</div>
];
</syntaxhighlight>


После изменения конфигурации примените изменения, выполнив:
<div lang="en" dir="ltr" class="mw-content-ltr">
==== System setup ====
</div>


<syntaxhighlight lang="bash">
<div lang="en" dir="ltr" class="mw-content-ltr">
sudo nixos-rebuild switch
To install Neovim system-wide, making it available to all users, add the following to your configuration:
</syntaxhighlight>
</div>


<span id="Using_Home_Configuration"></span>
{{code|lang=nix|line=no|1=<span lang="en" dir="ltr" class="mw-content-ltr"># Example for /etc/nixos/configuration.nix</span>
==== Используя Home-Manager ====
environment.systemPackages = [
 
   pkgs.neovim
<syntaxhighlight lang="text">
home.packages = [  
   pkgs.neovim  
];
];
</syntaxhighlight>


После обновления конфигурации примените изменения, выполнив:
<span lang="en" dir="ltr" class="mw-content-ltr"># User-specific installation (in ~/.config/nixpkgs/home.nix)</span>
home.packages = [
  pkgs.neovim
];}}


<syntaxhighlight lang="bash">
<div lang="en" dir="ltr" class="mw-content-ltr">
home-manager switch
After rebuilding your system with <code>nixos-rebuild switch</code> or <code>home-manager switch</code>, Neovim will be installed and accessible.
</syntaxhighlight>
</div>


<span id="Configuration"></span>
<span id="Configuration"></span>
Line 52: Line 71:
==== Начальная ====
==== Начальная ====


<syntaxhighlight lang="nix">
{{code|lang=nix|line=no|1=# Глобально
# Глобально
programs.neovim = {
programs.neovim = {
   enable = true;
   enable = true;
Line 65: Line 83:
     set number relativenumber
     set number relativenumber
   '';
   '';
};
};}}
</syntaxhighlight>


<span id="Advanced"></span>
<span id="Advanced"></span>
==== Продвинутая ====
==== Продвинутая ====


<syntaxhighlight lang="nix">
{{code|lang=nix|line=no|1=# Глобально
# Глобально
programs.neovim = {
programs.neovim = {
   enable = true;
   enable = true;
Line 96: Line 112:
# Для одного пользователя
# Для одного пользователя
# Вам нужно добавить строку ниже, чтобы установить его в качестве редактора по умолчанию:
# Вам нужно добавить строку ниже, чтобы установить его в качестве редактора по умолчанию:
environment.variables.EDITOR = "nvim";
environment.variables.EDITOR = "nvim";}}
</syntaxhighlight>


<span id="Tips_and_Tricks"></span>
<div class="mw-translate-fuzzy">
== Советы и рекомендации ==
== Советы и рекомендации ==
<span id="Location_of_Options"></span>
==== Расположение Опций ====
<div lang="en" dir="ltr" class="mw-content-ltr">
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]<ref>Nix Community, "Home Manager Option Search", Nix Community GitHub Pages, N/A. https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable</ref>.
</div>
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
The global options are listed on [https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim MyNixOS]<ref>MyNixOS Team, "Search: nixpkgs/option/programs.neovim", MyNixOS, N/A. https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim</ref>.
</div>


<span id="Package_Variations"></span>
<span id="Package_Variations"></span>
Line 117: Line 122:


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix Community, "neovim-nightly-overlay", GitHub, N/A. https://github.com/nix-community/neovim-nightly-overlay</ref> to install the most recent current nightly version of Neovim.
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay</ref> to install the most recent current nightly version of Neovim.
</div>
</div>


Line 124: Line 129:
</div>
</div>


nix run "github:nix-community/neovim-nightly-overlay"
{{code|lang=bash|line=no|1=$ nix run "github:nix-community/neovim-nightly-overlay"}}


<span id="Plugin_Management"></span>
<span id="Plugin_Management"></span>
==== Управление Плагинами ====
==== Управление Плагинами ====


<syntaxhighlight lang="nix">
{{code|lang=nix|line=no|1=plugins = [
plugins = [
   # Пример Плагина: nvim-tree-lua
   # Пример Плагина: nvim-tree-lua
   pkgs.vimPlugins.nvim-tree-lua
   pkgs.vimPlugins.nvim-tree-lua
Line 144: Line 148:
   <div lang="en" dir="ltr" class="mw-content-ltr">
   <div lang="en" dir="ltr" class="mw-content-ltr">
# Example Plugin: nvim-colorizer-lua with Lua config
# Example Plugin: nvim-colorizer-lua with Lua config
   # Due to how the runtimepath for Lua modules is processed, your configuration may require  
   # 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:
   # packadd! plugin-name to require a module. A home-manager example:
</div>
</div>
Line 208: Line 212:
   <div lang="en" dir="ltr" class="mw-content-ltr">
   <div lang="en" dir="ltr" class="mw-content-ltr">
# Option 3: Installing grammars without Nix
# Option 3: Installing grammars without Nix
   # Installing grammar packages through the built-in command can lead to errors.  
   # Installing grammar packages through the built-in command can lead to errors.
   # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
   # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
</div>
</div>
];
];}}
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 220: Line 223:
<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:
</div>  
</div>
 
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/</ref>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "LazyVim", LazyVim Official Website, N/A. https://www.lazyvim.org/</ref>
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/</ref>
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://astronvim.com/ AstroVim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A. https://astronvim.com/</ref>
* [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/</ref>
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://nvchad.com/ NVChad]<ref>NvChad Team, "NvChad", NvChad Official Website, N/A. https://nvchad.com/</ref>
==== FHS wrapper ====
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Another excellent option is [https://www.lunarvim.org/docs/installation LunarVim]<ref>LunarVim Team, "Installation", LunarVim Documentation, N/A. https://www.lunarvim.org/docs/installation</ref>. The development community describes it as "an IDE layer for Neovim with sane defaults." LunarVim includes an installer/updater for LSP modules and other features. It can be installed via the <code>lunarvim</code> package from <code>nixpkgs</code> and is started with the <code>lvim</code> command.
You can create a custom neovim FHS wrapper
</div>
</div>


Конфигурация LunarVim хранится в <code>~/.config/lvim</code>.
{{code|lang=nix|line=no|1=
{
  buildFHSEnv,
  writeShellScript,
  neovim,
}:
buildFHSEnv {
  name = "nvim-fhs";
  targetPkgs = pkgs: [ neovim ];
 
  runScript = writeShellScript "nvim-fhs.sh" ''
    exec ${neovim}/bin/nvim "$@"
  '';
}
}}


<span id="Troubleshooting"></span>
<!--T:FHS_WRAPPER_SOURCE-->
<div lang="en" dir="ltr" class="mw-content-ltr">
This FHS wrapper example is based on a contribution to nixpkgs<ref name="nixpkgs-pr-334032">NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032</ref>.
For an extended configuration that includes setting up `mason.nvim` with a similar FHS environment, see this [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs issue comment].
</div>
 
<div class="mw-translate-fuzzy">
== Решение проблем ==
== Решение проблем ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==== lua-language-server: Dynamically linked executable error ====
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
In your <code>~/.local/state/nvim/lsp.log</code>, you have the following error:
</div>
{{code|lang=text|line=no|1=[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36 "rpc" "lua-language-server" "stderr" "Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"}}
<!--T:LUA_LS_SO_REF-->
<div lang="en" dir="ltr" class="mw-content-ltr">
A solution for this issue can be found on Stack Overflow<ref name="so-lua-ls-dynlink">Stack Overflow Contributor, "Answer to 'Could not start dynamically linked executable... on NixOS'", Stack Overflow, 2025, Accessed June 2025. https://stackoverflow.com/a/78215911/27134695</ref>.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== See also ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* [[Home Manager]] – For declarative Neovim configuration at the user level: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Neovim module in Home Manager]
* [https://neovim.io/doc/ Official Documentation] – Official Neovim documentation.
* [https://search.nixos.org/options?channel=unstable&query=programs.neovim NixOS options for Neovim] – System-level Neovim configuration.
* [https://discourse.nixos.org/search?q=neovim Neovim discussions on NixOS Discourse] – Community tips, troubleshooting, and use cases.
* [https://github.com/nix-community/neovim-overlay Neovim Overlay on Nixpkgs] – For nightly builds and additional Neovim packages.
</div>


<span id="References"></span>
<span id="References"></span>
== Ссылки ==
== Ссылки ==


 
<div lang="en" dir="ltr" class="mw-content-ltr">
[[Category:Applications]]
[[Category:Applications]]
[[Category:CLI Applications]]
[[Category:Text Editor]]
[[Category:Text Editor]]
</div>

Latest revision as of 22:28, 7 October 2025

Neovim

Text Editor Application

100%
Developer(s)Neovim Core Team & Community
Latest releaseNvim 0.11.2 (May 30, 2025)
StatusActive
Operating SystemCross-platform (Linux, macOS, Windows)
Platform(s)Desktop
Language(s)C, Lua, Vim Script
LicenseApache 2.0 (with parts under Vim license)
External links
Websiteneovim.io
GitHubneovim/neovim
Bug trackerGitHub Issues
DocumentationOfficial Documentation
See also: Vim

Neovim[1] is a highly extensible and open source text editor that aims to improve upon and modernize the popular Vim[2] 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.

В нем реализована мощная архитектура плагинов, позволяющая выполнять плагины асинхронно, что может значительно повысить производительность некоторых операций. Также в него встроен эмулятор терминала, позволяющий запускать shell-команды непосредственно в редакторе. В проекте особое внимание уделяется качеству и удобству сопровождения кода, а чистая, хорошо документированная кодовая база облегчает разработчикам внесение своего вклада.

Установка

Используя nix-shell

To temporarily use Neovim in a shell environment without modifying your system configuration, you can run:

$ nix-shell -p neovim

This makes the Neovim editor available in your current shell. You can then launch Neovim by typing neovim.

System setup

To install Neovim system-wide, making it available to all users, add the following to your configuration:

<span lang="en" dir="ltr" class="mw-content-ltr"># Example for /etc/nixos/configuration.nix</span>
environment.systemPackages = [
  pkgs.neovim
];

<span lang="en" dir="ltr" class="mw-content-ltr"># User-specific installation (in ~/.config/nixpkgs/home.nix)</span>
home.packages = [
  pkgs.neovim
];

After rebuilding your system with nixos-rebuild switch or home-manager switch, Neovim will be installed and accessible.

Настройка

Начальная

# Глобально
programs.neovim = {
   enable = true;
   defaultEditor = true;
};

# Для одного пользователя
programs.neovim = {
  enable = true;
  extraConfig = ''
    set number relativenumber
  '';
};

Продвинутая

# Глобально
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 ];
    };
  };
};

# Для одного пользователя
# Вам нужно добавить строку ниже, чтобы установить его в качестве редактора по умолчанию:
environment.variables.EDITOR = "nvim";

Советы и рекомендации

Варианты Пакета

Have a look at the Neovim Nightly Overlay[3] 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"

Управление Плагинами

plugins = [
  # Пример Плагина: nvim-tree-lua
  pkgs.vimPlugins.nvim-tree-lua

  <div lang="en" dir="ltr" class="mw-content-ltr">
# Example Plugin: vim-startify with configuration
</div>
  {
    plugin = pkgs.vimPlugins.vim-startify;
    config = "let g:startify_change_to_vcs_root = 0";
  }

  <div lang="en" dir="ltr" class="mw-content-ltr">
# 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:
</div>
  {
    plugin = pkgs.vimPlugins.nvim-colorizer-lua;
    config = ''
      packadd! nvim-colorizer.lua
      lua << END
        require 'colorizer'.setup {
          '*'; <span lang="en" dir="ltr" class="mw-content-ltr">-- Highlight all files, but customize some others.</span>
          '!vim'; <span lang="en" dir="ltr" class="mw-content-ltr">-- Exclude vim from highlighting.</span>
        }
      END
    '';
  }

  # Пример плагина: nvim-treesitter с конфигурацией на языке Lua
  {
    plugin = pkgs.vimPlugins.nvim-treesitter;
    config = ''
      packadd! nvim-treesitter
      lua <<EOF
        require'nvim-treesitter.configs'.setup {
          highlight = {
            enable = true,              <span lang="en" dir="ltr" class="mw-content-ltr">-- false will disable the whole extension</span>
            disable = {},               -- список языков, которые будут отключены
          },
          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
    '';
  }

  <div lang="en" dir="ltr" class="mw-content-ltr">
# Installing grammars for tree-sitter
  # 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 ]))
</div>

  <div lang="en" dir="ltr" class="mw-content-ltr">
# Option 3: Installing grammars without Nix
  # Installing grammar packages through the built-in command can lead to errors.
  # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
</div>
];

Frameworks

If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:

FHS wrapper

You can create a custom neovim FHS wrapper

{
  buildFHSEnv,
  writeShellScript,
  neovim,
}:
buildFHSEnv {
  name = "nvim-fhs";
  targetPkgs = pkgs: [ neovim ];

  runScript = writeShellScript "nvim-fhs.sh" ''
    exec ${neovim}/bin/nvim "$@"
  '';
}

This FHS wrapper example is based on a contribution to nixpkgs[7]. For an extended configuration that includes setting up `mason.nvim` with a similar FHS environment, see this NixOS/nixpkgs issue comment.

Решение проблем

lua-language-server: Dynamically linked executable error

In your ~/.local/state/nvim/lsp.log, you have the following error:

[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36	"rpc"	"lua-language-server"	"stderr"	"Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"

A solution for this issue can be found on Stack Overflow[8].

See also

Ссылки

  1. Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/
  2. NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim
  3. Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay
  4. LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/
  5. AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/
  6. Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/
  7. NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032