Vim/ru: Difference between revisions

From NixOS Wiki
Unabomberlive (talk | contribs)
Created page with "=== Примеры ==="
Tags: Mobile edit Mobile web edit
Unabomberlive (talk | contribs)
Created page with "Иногда вы не хотите изменять плагины, находящиес в upstream, для этого вы можете использовать <code>vimUtils.buildVimPlugin</code> для создания своего собственного плагина:"
 
(49 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
<div lang="en" dir="ltr" class="mw-content-ltr">
[www.vim.org Vim] (vi improved) - свободный текстовый редактор, созданный на основе более старого vi. Ныне это мощный текстовый редактор с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам. 
[https://www.vim.org/ Vim] (vi improved) is a highly configurable modal text editor program for the terminal.
 
</div>  
<span id="Installation"></span>
== Установка ==
 
<span id="Basic_Install"></span>
=== Начальная Установка ===
 
На unstable ветке:
 
<syntaxhighlight lang="nix>
  programs.vim.enable = true;
</syntaxhighlight>
 
или


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxhighlight lang="nix>
== Installation ==
  programs.vim = {
</div>
    enable = true;
    package = pkgs.vim_configurable;
  };
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
На 24.05 или старше:
=== Basic Install ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
   environment.systemPackages = with pkgs; [ vim ];
   environment.systemPackages = with pkgs; [ vim ];
</syntaxhighlight>
</syntaxhighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
или
or
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
   environment.systemPackages = with pkgs; [ vim_configurable ];
   environment.systemPackages = with pkgs; [ vim_configurable ];
</syntaxhighlight>
</syntaxhighlight>
</div>
 
<span id="Using_Home_Manager"></span>
=== Используя Home-Manager ===


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Using Home Manager ===
Vim can easily be set up using [[Special:MyLanguage/Home Manager|Home Manager]]. Here's a minimal example:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Vim can easily be set up using [[Special:MyLanguage/Home Manager|Home Manager]]. Here's a minimal example:
<syntaxhighlight lang="nix>
<syntaxhighlight lang="nix>
   programs.vim = {
   programs.vim = {
Line 44: Line 52:
   };
   };
</syntaxhighlight>
</syntaxhighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 50: Line 57:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Vim_Spell_Files"></span>
=== Vim Spell Files ===
=== Файлы Правописания Vim ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Вы можете настроить на установку файлов правописания в каталог пользователя через home-manager, упаковывая отдельные файлы правописанияВот пример для neovim и французского языка:
You can configure home-manager to install spelling files into your user directory by packaging individual spell filesHere' an example for neovim and French:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
let
let
Line 65: Line 68:
   sha256 = "abfb9702b98d887c175ace58f1ab39733dc08d03b674d914f56344ef86e63b61";
   sha256 = "abfb9702b98d887c175ace58f1ab39733dc08d03b674d914f56344ef86e63b61";
};
};
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
nvim-spell-fr-utf8-suggestions = builtins.fetchurl {
nvim-spell-fr-utf8-suggestions = builtins.fetchurl {
   url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.sug";
   url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.sug";
   sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58";
   sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58";
};
};
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
nvim-spell-fr-latin1-dictionary = builtins.fetchurl {
nvim-spell-fr-latin1-dictionary = builtins.fetchurl {
   url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.spl";
   url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.spl";
   sha256 = "086ccda0891594c93eab143aa83ffbbd25d013c1b82866bbb48bb1cb788cc2ff";
   sha256 = "086ccda0891594c93eab143aa83ffbbd25d013c1b82866bbb48bb1cb788cc2ff";
};
};
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
nvim-spell-fr-latin1-suggestions = builtins.fetchurl {
nvim-spell-fr-latin1-suggestions = builtins.fetchurl {
   url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.sug";
   url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.sug";
Line 88: Line 85:
in
in
{
{
   home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
   xdg.configFile."nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
   home.file."${config.xdg.configHome}/nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions;
   xdg.configFile."nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions;
   home.file."${config.xdg.configHome}/nvim/spell/fr.latin1.spl".source = nvim-spell-fr-latin1-dictionary;
   xdg.configFile."nvim/spell/fr.latin1.spl".source = nvim-spell-fr-latin1-dictionary;
   home.file."${config.xdg.configHome}/nvim/spell/fr.latin1.sug".source = nvim-spell-fr-latin1-suggestions;
   xdg.configFile."nvim/spell/fr.latin1.sug".source = nvim-spell-fr-latin1-suggestions;
}
}
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="NeoVim_with_Coc_for_Python"></span>
==== NeoVim with Coc for Python ====
==== NeoVim с Coc.nvim для Python ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 104: Line 99:
https://github.com/NixOS/nixpkgs/issues/98166#issuecomment-725319238
https://github.com/NixOS/nixpkgs/issues/98166#issuecomment-725319238
</div>
</div>
<span id="System_wide_vim/nvim_configuration"></span>
== Глобальная настройка vim/nvim ==


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
== System wide vim/nvim configuration ==
If you want a system wide "baseline" configuration for vim/nvim here are two examples:.
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
On unstable ветке:
If you want a system wide "baseline" configuration for vim/nvim here are two examples:.
 
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
{ pkgs, ... }:
{ pkgs, ... }:
{
{
   environment.variables = { EDITOR = "vim"; };
   programs.vim = {
    enable = true;
    defaultEditor = true;
    package = (pkgs.vim_configurable.override { }).customize{
      name = "vim";
      <div lang="en" dir="ltr" class="mw-content-ltr">
# Install plugins for example for syntax highlighting of nix files
</div>
</div>
      vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
        start = [ vim-nix vim-lastplace ];
        opt = [];
      };
      vimrcConfig.customRC = ''
        <div lang="en" dir="ltr" class="mw-content-ltr">
" your custom vimrc
</div>
        set nocompatible
        set backspace=indent,eol,start
        " Включить подсветку синтаксиса по умолчанию
        syntax on
        " ...
      '';
    };
  };
}
</syntaxHighlight>


  <div lang="en" dir="ltr" class="mw-content-ltr">
На 24.05 или старше:
environment.systemPackages = with pkgs; [
 
<syntaxHighlight lang="nix">
{ pkgs, ... }:
{
  environment.variables = { EDITOR = "vim";
  environment.systemPackages = with pkgs; [
     ((vim_configurable.override {  }).customize{
     ((vim_configurable.override {  }).customize{
       name = "vim";
       name = "vim";
       # Install plugins for example for syntax highlighting of nix files
       <div lang="en" dir="ltr" class="mw-content-ltr">
# Install plugins for example for syntax highlighting of nix files
</div>
       vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
       vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
         start = [ vim-nix vim-lastplace ];
         start = [ vim-nix vim-lastplace ];
Line 128: Line 156:
       };
       };
       vimrcConfig.customRC = ''
       vimrcConfig.customRC = ''
         " your custom vimrc
         <div lang="en" dir="ltr" class="mw-content-ltr">
" your custom vimrc
</div>
         set nocompatible
         set nocompatible
         set backspace=indent,eol,start
         set backspace=indent,eol,start
         " Turn on syntax highlighting by default
         " Включить подсветку синтаксиса по умолчанию
         syntax on
         syntax on
         " ...
         " ...
Line 139: Line 169:
}
}
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
{ pkgs, ... }:
{ pkgs, ... }:
{
{
   environment.variables = { EDITOR = "vim"; };
   programs.neovim = {
    enable = true;
    defaultEditor = true;
    vimAlias = true;
    configure = {
      customRC = ''
        <div lang="en" dir="ltr" class="mw-content-ltr">
" your custom vimrc
</div>
</div>
  <div lang="en" dir="ltr" class="mw-content-ltr">
environment.systemPackages = with pkgs; [
    (neovim.override {
      vimAlias = true;
      extraConfig = ''
        " your custom vimrc
         set nocompatible
         set nocompatible
         set backspace=indent,eol,start
         set backspace=indent,eol,start
         " ...
         " ...
       '';
       '';
       configure = {
       packages.myPlugins = with pkgs.vimPlugins; {
        packages.myPlugins = with pkgs.vimPlugins; {
        start = [ vim-lastplace vim-nix ];  
          start = [ vim-lastplace vim-nix ];  
        opt = [];
          opt = [];
        };
       };
       };
     }
     };
   )];
   };
}
}
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
импортируйте их в свой <code>configuration.nix</code> и
import these in your <code>configuration.nix</code> and
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
{     
{     
Line 181: Line 205:
}
}
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Custom_setup_without_using_Home_Manager"></span>
== Custom setup without using Home Manager ==
== Пользовательская настройка без использования Home Manager ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 191: Line 213:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Плагины Vim могут быть установлены с помощью Nix. Вы можете не использовать менеджеры плагинов и сделать все самостоятельно в <code>.nixpkgs/config</code>.
Vim plugins can be installed with the help of nix. You can omit using vim plugin managers and do everything in your <code>.nixpkgs/config</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 203: Line 223:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
И в vim, и в neovim можно дополнительно включенить ваши любимые плагины и дополнительные библиотеки. Чтобы получить список всех доступных плагинов vim, выполните команду <code>nix search nixpkgs#vimPlugins</code>.
Both vim and neovim can be further configured to include your favorite plugins and additional libraries. To list all available vim plugins, run <code>nix search nixpkgs#vimPlugins</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Добавьте следующий код в ваш <code>~/.nixpkgs/config.nix</code>
Add the following code to your <code>~/.nixpkgs/config.nix</code>:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
{
{
Line 217: Line 232:
     myVim = vim_configurable.customize {
     myVim = vim_configurable.customize {
       name = "vim-with-plugins";
       name = "vim-with-plugins";
       # add here code from the example section
       # добавьте сюда код из секции с примером
     };
     };
     myNeovim = neovim.override {
     myNeovim = neovim.override {
       configure = {
       configure = {
         customRC = ''
         customRC = ''
           # here your custom configuration goes!
           # здесь должна находится ваша пользовательская конфигурация!
         '';
         '';
         packages.myVimPackage = with pkgs.vimPlugins; {
         packages.myVimPackage = with pkgs.vimPlugins; {
           # see examples below how to use custom packages
           # смотрите примеры ниже чтобы узнать как использовать пользовательские пакеты
           start = [ ];
           start = [ ];
           opt = [ ];
           opt = [ ];
Line 234: Line 249:
}
}
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 243: Line 257:
=== Примеры ===
=== Примеры ===


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Apply_custom_vimrc_configuration"></span>
==== Apply custom vimrc configuration ====
==== Добавить пользовательские настройка в вашу конфигурацию vimrc ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 251: Line 264:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
vim_configurable.customize {
vim_configurable.customize {
   name = "vim-with-plugins";
   name = "vim-with-plugins";
   # add custom .vimrc lines like this:
   # добавьте пользовательские строки в .vimrc, например, такие:
   vimrcConfig.customRC = ''
   vimrcConfig.customRC = ''
     set hidden
     set hidden
Line 262: Line 274:
}
}
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 272: Line 283:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
vim_configurable.customize {
vim_configurable.customize {
   vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
   vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
     # loaded on launch
     <div lang="en" dir="ltr" class="mw-content-ltr">
# loaded on launch
</div>
     start = [ YouCompleteMe fugitive ];
     start = [ YouCompleteMe fugitive ];
     # manually loadable by calling `:packadd $plugin-name`
     <div lang="en" dir="ltr" class="mw-content-ltr">
# manually loadable by calling `:packadd $plugin-name`
</div>
     opt = [ phpCompletion elm-vim ];
     opt = [ phpCompletion elm-vim ];
     # To automatically load a plugin when opening a filetype, add vimrc lines like:
     <div lang="en" dir="ltr" class="mw-content-ltr">
# To automatically load a plugin when opening a filetype, add vimrc lines like:
</div>
     # autocmd FileType php :packadd phpCompletion
     # autocmd FileType php :packadd phpCompletion
   }
   }
};
};
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Note that dynamically loading with opt may be buggy and the workaround is to use [https://vi.stackexchange.com/a/20818/30821 start instead].
Note that dynamically loading with opt may be buggy and the workaround is to use [https://vi.stackexchange.com/a/20818/30821 start instead].
</div>
</div>
<span id="Using_Pathogen_as_manager"></span>
=== Использование Pathogen в качестве менеджера плагинов ===


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Using Pathogen as manager ===
There is a pathogen implementation as well, but its startup is slower and [VAM] has more features.
</div>
</div>  


<div lang="en" dir="ltr" class="mw-content-ltr">
There is a pathogen implementation as well, but its startup is slower and [VAM] has more features.
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
vimrcConfig.pathogen.knownPlugins = vimPlugins; # optional
vimrcConfig.pathogen.knownPlugins = vimPlugins; # optional
vimrcConfig.pathogen.pluginNames = [ "vim-addon-nix" "youcompleteme" ];
vimrcConfig.pathogen.pluginNames = [ "vim-addon-nix" "youcompleteme" ];
</syntaxhighlight>
</syntaxhighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_Vim-Plug_as_manager"></span>
=== Using Vim-Plug as manager ===
=== Использование Vim-plug в качестве менеджера плагинов ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
vimrcConfig.plug.plugins = with pkgs.vimPlugins; [vim-addon-nix youcompleteme];
vimrcConfig.plug.plugins = with pkgs.vimPlugins; [vim-addon-nix youcompleteme];
</syntaxhighlight>
</syntaxhighlight>
</div>
 
<span id="Adding_new_plugins"></span>
=== Добавление новых плагинов ===


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Adding new plugins ===
As per the instructions found in https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md
</div>
</div>
* Сначала выполните <code>./update.py</code>.


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
As per the instructions found in https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md
* First run <code>./update.py</code>.
* Commit the changes with the commit message "vimPlugins: Update".
* Commit the changes with the commit message "vimPlugins: Update".
* Add your plugin to ./vim-plugin-names (please try to maintain the list alphabetically sorted). You can customize the branch by appending for example <code>@main</code> to an entry (search the file for examples)
* Run <code>./update.py</code> once again to generate the plugin's nix expression.
* Commit your changes one more time, this time with the message formated as such: "vimPlugins.[plugin-name]: init at [version]".
* If you need to add additional code/patches to the generated code, add those lines to <code>pkgs/misc/vim-plugins/vim2nix/additional-nix-code</code> and rerun <code>./update.py</code>. They will be included in the generated code.
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
==== Notes Regarding Plugins ====
* Add your plugin to ./vim-plugin-names (please try to maintain the list alphabetically sorted). You can customize the branch by appending for example <code>@main</code> to an entry (search the file for examples)
</div>
</div>
* Запустите <code>./update.py</code> еще раз, чтобы сгенерировать nix-выражение плагина.


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
For additional info, you may wish to look at [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md documentation on the nixpkgs repository].
* Commit your changes one more time, this time with the message formated as such: "vimPlugins.[plugin-name]: init at [version]".
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Add a new custom plugin to the users packages  ===
* If you need to add additional code/patches to the generated code, add those lines to <code>pkgs/misc/vim-plugins/vim2nix/additional-nix-code</code> and rerun <code>./update.py</code>. They will be included in the generated code.
</div>
</div>
<span id="Notes_Regarding_Plugins"></span>
==== Плагины заслуживающие внимания ====


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Sometimes you do not want to change upstream plugins, for this you can use  <code>vimUtils.buildVimPlugin</code> to create your own:
For additional info, you may wish to look at [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md documentation on the nixpkgs repository].
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Add_a_new_custom_plugin_to_the_users_packages"></span>
=== Добавьте новый пользовательский плагин в пользовательские пакеты ===
 
Иногда вы не хотите изменять плагины, находящиес в upstream, для этого вы можете использовать <code>vimUtils.buildVimPlugin</code> для создания своего собственного плагина:
 
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
let
let
Line 355: Line 375:
     };
     };
   };
   };
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
in {
in {
   users.users.<yourNickname>.packages = [
   users.users.<yourNickname>.packages = [
Line 368: Line 385:
};
};
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Using_flake"></span>
==== Using flake ====
==== Используя Flake ====
</div>


<code>configuration.nix</code>:
<code>configuration.nix</code>:
Line 398: Line 413:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>flake.nix</code>:
<code>flake.nix</code>:
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
Line 409: Line 423:
     };
     };
   };
   };
</div>


   outputs = inputs@{ nixpkgs, ... }: {
   outputs = inputs@{ nixpkgs, ... }: {
Line 430: Line 443:


<span id="Vim_as_a_Python_IDE"></span>
<span id="Vim_as_a_Python_IDE"></span>
=== Vim как Python IDE ===
=== Vim в качестве Python IDE ===


<div lang="en" dir="ltr" class="mw-content-ltr">
Следующий фрагмент создаст полнофункциональную IDE для python.
The following snippet will make a full featured python IDE.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 440: Line 451:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
vim_configurable.customize {
vim_configurable.customize {
Line 461: Line 471:
};
};
</syntaxHighlight>
</syntaxHighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Then put the following expression in <code>environment.systemPackages</code> or in the home-manager package list,
Then put the following expression in <code>environment.systemPackages</code> or in the home-manager package list,
to install python-language-server:
to install python-language-server:
</div>
 
<syntaxHighlight  lang="nix">
<syntaxHighlight  lang="nix">
(python3.withPackages(ps: [
(python3.withPackages(ps: [
   ps.python-language-server
   ps.python-language-server
   # the following plugins are optional, they provide type checking, import sorting and code formatting
   <div lang="en" dir="ltr" class="mw-content-ltr">
# the following plugins are optional, they provide type checking, import sorting and code formatting
</div>
   ps.pyls-mypy ps.pyls-isort ps.pyls-black
   ps.pyls-mypy ps.pyls-isort ps.pyls-black
]))
]))
</syntaxHighlight>
</syntaxHighlight>
<span id="Real_life_examples"></span>
=== Примеры из реальной жизни ===
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://github.com/jagajaga/my_configs/blob/master/.nixpkgs/common.nix Jagajaga’s config]
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Real life examples ===
* [https://github.com/andrewrk/dotfiles/blob/master/.nixpkgs/config.nix andrewrk's config]
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://github.com/jagajaga/my_configs/blob/master/.nixpkgs/common.nix Jagajaga’s config]
* [https://github.com/andrewrk/dotfiles/blob/master/.nixpkgs/config.nix andrewrk's config]
* [https://github.com/wagnerf42/nixos-config/blob/master/config/my_vim.nix wagnerf42's config (good for rust language)]
* [https://github.com/wagnerf42/nixos-config/blob/master/config/my_vim.nix wagnerf42's config (good for rust language)]
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
=== YouCompleteMe ===
=== YouCompleteMe ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 501: Line 515:
== Поддержка Python 3 для Vim ==
== Поддержка Python 3 для Vim ==


<div lang="en" dir="ltr" class="mw-content-ltr">
Если вы определили конфигурацию vim в файле `./my_vim.nix`, вы можете установить vim с поддержкой python3 вместо python2, переопределив версию python, как показано ниже:
If you have defined your vim configuration in a `./my_vim.nix` file you can install vim with the python 3 support instead of python2 by overriding the python version like the following:
 
<syntaxHighlight  lang="nix">
<syntaxHighlight  lang="nix">
(pkgs.callPackage ./my_vim.nix {                                                                                                                                                           
(pkgs.callPackage ./my_vim.nix {                                                                                                                                                           
Line 509: Line 522:
})
})
</syntaxHighlight>
</syntaxHighlight>
</div>
 
<span id="gvim_and_gview"></span>
== Gvim и Gview ==


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
== gvim and gview ==
<code>gvim</code> and <code>gview</code> may be installed using the <code>[https://search.nixos.org/packages/?query=vimHugeX vimHugeX]</code> attribute name (package name <code>[https://search.nixos.org/packages/?query=vim_configurable vim_configurable]</code>).
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>gvim</code> and <code>gview</code> may be installed using the <code>[https://search.nixos.org/packages/?query=vimHugeX vimHugeX]</code> attribute name (package name <code>[https://search.nixos.org/packages/?query=vim_configurable vim_configurable]</code>).
<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
$ nix-env -iA nixos.vimHugeX
$ nix-env -iA nixos.vimHugeX
</syntaxhighlight>
</syntaxhighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are using <code>vim_configurable.customize</code>, you can enable <code>wrapGui</code> to make <code>gvim</code> available, though this won't give you <code>gview</code>:
If you are using <code>vim_configurable.customize</code>, you can enable <code>wrapGui</code> to make <code>gvim</code> available, though this won't give you <code>gview</code>:
</div>
<syntaxhighlight lang=nix>
<syntaxhighlight lang=nix>
vim_configured = pkgs.vim_configurable.customize {
vim_configured = pkgs.vim_configurable.customize {
Line 530: Line 544:
};
};
</syntaxhighlight>
</syntaxhighlight>
</div>


[[Category:Applications]]
[[Category:Applications]]
[[Category:Text Editor{{#translation:}}]]
[[Category:Text Editor{{#translation:}}]]

Latest revision as of 20:39, 22 August 2024

[www.vim.org Vim] (vi improved) - свободный текстовый редактор, созданный на основе более старого vi. Ныне это мощный текстовый редактор с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам.

Установка

Начальная Установка

На unstable ветке:

  programs.vim.enable = true;

или

  programs.vim = {
    enable = true;
    package = pkgs.vim_configurable;
  };

На 24.05 или старше:

  environment.systemPackages = with pkgs; [ vim ];

или

  environment.systemPackages = with pkgs; [ vim_configurable ];

Используя Home-Manager

Vim can easily be set up using Home Manager. Here's a minimal example:

  programs.vim = {
    enable = true;
    plugins = with pkgs.vimPlugins; [ vim-airline ];
    settings = { ignorecase = true; };
    extraConfig = ''
      set mouse=a
    '';
  };

See [1] for the full set of options.

Файлы Правописания Vim

Вы можете настроить на установку файлов правописания в каталог пользователя через home-manager, упаковывая отдельные файлы правописания. Вот пример для neovim и французского языка:

let
nvim-spell-fr-utf8-dictionary = builtins.fetchurl {
  url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.spl";
  sha256 = "abfb9702b98d887c175ace58f1ab39733dc08d03b674d914f56344ef86e63b61";
};

nvim-spell-fr-utf8-suggestions = builtins.fetchurl {
  url = "http://ftp.vim.org/vim/runtime/spell/fr.utf-8.sug";
  sha256 = "0294bc32b42c90bbb286a89e23ca3773b7ef50eff1ab523b1513d6a25c6b3f58";
};

nvim-spell-fr-latin1-dictionary = builtins.fetchurl {
  url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.spl";
  sha256 = "086ccda0891594c93eab143aa83ffbbd25d013c1b82866bbb48bb1cb788cc2ff";
};

nvim-spell-fr-latin1-suggestions = builtins.fetchurl {
  url = "http://ftp.vim.org/vim/runtime/spell/fr.latin1.sug";
  sha256 = "5cb2c97901b9ca81bf765532099c0329e2223c139baa764058822debd2e0d22a";
};
in
{
  xdg.configFile."nvim/spell/fr.utf-8.spl".source = nvim-spell-fr-utf8-dictionary;
  xdg.configFile."nvim/spell/fr.utf-8.sug".source = nvim-spell-fr-utf8-suggestions;
  xdg.configFile."nvim/spell/fr.latin1.spl".source = nvim-spell-fr-latin1-dictionary;
  xdg.configFile."nvim/spell/fr.latin1.sug".source = nvim-spell-fr-latin1-suggestions;
}

NeoVim с Coc.nvim для Python

Глобальная настройка vim/nvim

If you want a system wide "baseline" configuration for vim/nvim here are two examples:.

On unstable ветке:

{ pkgs, ... }:
{
  programs.vim = {
    enable = true;
    defaultEditor = true;
    package = (pkgs.vim_configurable.override {  }).customize{
      name = "vim";
      <div lang="en" dir="ltr" class="mw-content-ltr">
# Install plugins for example for syntax highlighting of nix files
</div>
      vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
        start = [ vim-nix vim-lastplace ];
        opt = [];
      };
      vimrcConfig.customRC = ''
        <div lang="en" dir="ltr" class="mw-content-ltr">
" your custom vimrc
</div>
        set nocompatible
        set backspace=indent,eol,start
        " Включить подсветку синтаксиса по умолчанию
        syntax on
        " ...
      '';
    };
  };
}

На 24.05 или старше:

{ pkgs, ... }:
{
  environment.variables = { EDITOR = "vim";
  environment.systemPackages = with pkgs; [
    ((vim_configurable.override {  }).customize{
      name = "vim";
      <div lang="en" dir="ltr" class="mw-content-ltr">
# Install plugins for example for syntax highlighting of nix files
</div>
      vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
        start = [ vim-nix vim-lastplace ];
        opt = [];
      };
      vimrcConfig.customRC = ''
        <div lang="en" dir="ltr" class="mw-content-ltr">
" your custom vimrc
</div>
        set nocompatible
        set backspace=indent,eol,start
        " Включить подсветку синтаксиса по умолчанию
        syntax on
        " ...
      '';
    }
  )];
}
{ pkgs, ... }:
{
  programs.neovim = {
    enable = true;
    defaultEditor = true;
    vimAlias = true;
    configure = {
      customRC = ''
        <div lang="en" dir="ltr" class="mw-content-ltr">
" your custom vimrc
</div>
        set nocompatible
        set backspace=indent,eol,start
        " ...
      '';
      packages.myPlugins = with pkgs.vimPlugins; {
        start = [ vim-lastplace vim-nix ]; 
        opt = [];
      };
    };
  };
}

импортируйте их в свой configuration.nix и

{    
  imports =    
    [
      ./vim.nix
    ];
  # ...
}

Пользовательская настройка без использования Home Manager

Note: To get a general overview about how to set up your vim in nix, refer to mpscholten's blog

Плагины Vim могут быть установлены с помощью Nix. Вы можете не использовать менеджеры плагинов и сделать все самостоятельно в .nixpkgs/config.

A lot of documentation about package management and configuration of vim in nix is stored at [2] in nixpkgs.

Customizations

И в vim, и в neovim можно дополнительно включенить ваши любимые плагины и дополнительные библиотеки. Чтобы получить список всех доступных плагинов vim, выполните команду nix search nixpkgs#vimPlugins.

Добавьте следующий код в ваш ~/.nixpkgs/config.nix

{
  packageOverrides = pkgs: with pkgs; {
    myVim = vim_configurable.customize {
      name = "vim-with-plugins";
      # добавьте сюда код из секции с примером
    };
    myNeovim = neovim.override {
      configure = {
        customRC = ''
          # здесь должна находится ваша пользовательская конфигурация!
        '';
        packages.myVimPackage = with pkgs.vimPlugins; {
          # смотрите примеры ниже чтобы узнать как использовать пользовательские пакеты
          start = [ ];
          opt = [ ];
        }; 
      };     
    };
  };
}

After that you can install your special grafted `myVim` or `myNeovim` packages.

Примеры

Добавить пользовательские настройка в вашу конфигурацию vimrc

NB: you must use vimrcConfig.customRC rather than installing a ~/.vimrc by hand, since the customized Vim will silently ignore any vimrc in your home directory.

vim_configurable.customize {
  name = "vim-with-plugins";
  # добавьте пользовательские строки в .vimrc, например, такие:
  vimrcConfig.customRC = ''
    set hidden
    set colorcolumn=80 
  '';
}

If you need to run code before plugins are added, you can use vimrcConfig.beforePlugins (be sure to include set nocompatible if you override the default value).

Using vim's builtin packaging capability

vim_configurable.customize {
  vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
    <div lang="en" dir="ltr" class="mw-content-ltr">
# loaded on launch
</div>
    start = [ YouCompleteMe fugitive ];
    <div lang="en" dir="ltr" class="mw-content-ltr">
# manually loadable by calling `:packadd $plugin-name`
</div>
    opt = [ phpCompletion elm-vim ];
    <div lang="en" dir="ltr" class="mw-content-ltr">
# To automatically load a plugin when opening a filetype, add vimrc lines like:
</div>
    # autocmd FileType php :packadd phpCompletion
  }
};

Note that dynamically loading with opt may be buggy and the workaround is to use start instead.

Использование Pathogen в качестве менеджера плагинов

There is a pathogen implementation as well, but its startup is slower and [VAM] has more features.

vimrcConfig.pathogen.knownPlugins = vimPlugins; # optional
vimrcConfig.pathogen.pluginNames = [ "vim-addon-nix" "youcompleteme" ];

Использование Vim-plug в качестве менеджера плагинов

vimrcConfig.plug.plugins = with pkgs.vimPlugins; [vim-addon-nix youcompleteme];

Добавление новых плагинов

  • Сначала выполните ./update.py.
  • Commit the changes with the commit message "vimPlugins: Update".
  • Add your plugin to ./vim-plugin-names (please try to maintain the list alphabetically sorted). You can customize the branch by appending for example @main to an entry (search the file for examples)
  • Запустите ./update.py еще раз, чтобы сгенерировать nix-выражение плагина.
  • Commit your changes one more time, this time with the message formated as such: "vimPlugins.[plugin-name]: init at [version]".
  • If you need to add additional code/patches to the generated code, add those lines to pkgs/misc/vim-plugins/vim2nix/additional-nix-code and rerun ./update.py. They will be included in the generated code.

Плагины заслуживающие внимания

For additional info, you may wish to look at documentation on the nixpkgs repository.

Добавьте новый пользовательский плагин в пользовательские пакеты

Иногда вы не хотите изменять плагины, находящиес в upstream, для этого вы можете использовать vimUtils.buildVimPlugin для создания своего собственного плагина:

let
  vim-better-whitespace = pkgs.vimUtils.buildVimPlugin {
    name = "vim-better-whitespace";
    src = pkgs.fetchFromGitHub {
      owner = "ntpeters";
      repo = "vim-better-whitespace";
      rev = "984c8da518799a6bfb8214e1acdcfd10f5f1eed7";
      sha256 = "10l01a8xaivz6n01x6hzfx7gd0igd0wcf9ril0sllqzbq7yx2bbk";
    };
  };
in {
  users.users.<yourNickname>.packages = [
    (pkgs.vim_configurable.customize {
      vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
        start = [ vim-better-whitespace ];
      };
    })
  ];
};

Используя Flake

configuration.nix:

{ inputs, ... }:
{
  nixpkgs = {
    overlays = [
      (self: super:
        let
          winresizer-vim = super.vimUtils.buildVimPlugin {
            name = "winresizer-vim";
            src = inputs.winresizer-vim;
          };
        in
        {
          vimPlugins =
            super.vimPlugins // {
              inherit winresizer-vim;
            };
        }
      )
    ];
  };

flake.nix:

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-22.05";
    winresizer-vim = {
      url = "github:simeji/winresizer";
      flake = false;
    };
  };

  outputs = inputs@{ nixpkgs, ... }: {
    nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      specialArgs = { inherit inputs; };
      modules = [
        ./configuration.nix
        ./hardware-configuration.nix
        { nix.registry.nixpkgs.flake = nixpkgs; }
      ];
    };
  };
}

Then we can update the package with nix flake lock --update-input winresizer-vim, or update all inputs in flake.nix with nix flake update.

Vim в качестве Python IDE

Следующий фрагмент создаст полнофункциональную IDE для python.

Using language client

vim_configurable.customize {
  vimrcConfig = {
    customRC = ''
      let g:LanguageClient_serverCommands = {
        \ 'python': ['pyls']
        \ }
       nnoremap <F5> :call LanguageClient_contextMenu()<CR>
       nnoremap <silent> gh :call LanguageClient_textDocument_hover()<CR>
       nnoremap <silent> gd :call LanguageClient_textDocument_definition()<CR>
       nnoremap <silent> gr :call LanguageClient_textDocument_references()<CR>
       nnoremap <silent> gs :call LanguageClient_textDocument_documentSymbol()<CR>
       nnoremap <silent> <F2> :call LanguageClient_textDocument_rename()<CR>
       nnoremap <silent> gf :call LanguageClient_textDocument_formatting()<CR>
    '';
    packages.myVimPackage = with pkgs.vimPlugins; {
      start = [ LanguageClient-neovim ];
    }
};

Then put the following expression in environment.systemPackages or in the home-manager package list, to install python-language-server:

(python3.withPackages(ps: [
  ps.python-language-server
  <div lang="en" dir="ltr" class="mw-content-ltr">
# the following plugins are optional, they provide type checking, import sorting and code formatting
</div>
  ps.pyls-mypy ps.pyls-isort ps.pyls-black
]))

Примеры из реальной жизни

YouCompleteMe

Currently the youcompleteme plugin uses unwrapped clang on linux. This causes it to not find stdlib.h. There is a workaround you can put in your .ycm_extra_conf.py file, which works by executing the C/C++ compiler and getting it to output the list of search paths - which includes the search path to find stdlib.h.

A better alternative to youcompleteme for C/C++ is to use cquery in combination with the LanguageClient-neovim. It will also find in c header files when used in a nix-shell if you install cquery from nixpkgs as it uses a custom shell wrapper

Поддержка Python 3 для Vim

Если вы определили конфигурацию vim в файле `./my_vim.nix`, вы можете установить vim с поддержкой python3 вместо python2, переопределив версию python, как показано ниже:

(pkgs.callPackage ./my_vim.nix {                                                                                                                                                          
      vim_configurable = vim_configurable.override { python = python3; };                                                                                                                     
})

Gvim и Gview

gvim and gview may be installed using the vimHugeX attribute name (package name vim_configurable).

$ nix-env -iA nixos.vimHugeX

If you are using vim_configurable.customize, you can enable wrapGui to make gvim available, though this won't give you gview:

vim_configured = pkgs.vim_configurable.customize {
  name = "vim";
  wrapGui = true;
};