Vim/ja: Difference between revisions
Haruki7049 (talk | contribs) No edit summary |
Updating to match new version of source page |
||
| (21 intermediate revisions by 2 users not shown) | |||
| Line 9: | Line 9: | ||
<span id="Basic_Install"></span> | <span id="Basic_Install"></span> | ||
=== ベーシックインストール === | === ベーシックインストール === | ||
<syntaxhighlight lang="nix> | <syntaxhighlight lang="nix> | ||
programs.vim.enable = true; | programs.vim.enable = true; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
もしくは | |||
<syntaxhighlight lang="nix> | <syntaxhighlight lang="nix"> | ||
programs.vim = { | programs.vim = { | ||
enable = true; | enable = true; | ||
package = pkgs. | package = pkgs.vim-full; | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
もしくは | もしくは | ||
<syntaxhighlight lang="nix> | <syntaxhighlight lang="nix"> | ||
environment.systemPackages = with pkgs; [ | environment.systemPackages = with pkgs; [ vim-full ]; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 66: | Line 51: | ||
=== Vimスペルファイル === | === Vimスペルファイル === | ||
<div class="mw-translate-fuzzy"> | |||
個々のスペルファイルをパッケージ化することで、ユーザーディレクトリにスペルファイルをインストールするようにhome-managerを設定することができます。以下はneovimとフランス語の例です: | 個々のスペルファイルをパッケージ化することで、ユーザーディレクトリにスペルファイルをインストールするようにhome-managerを設定することができます。以下はneovimとフランス語の例です: | ||
</div> | |||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
| Line 107: | Line 94: | ||
</div> | </div> | ||
< | <span id="System_wide_vim/nvim_configuration"></span> | ||
== | == システム全体でのvim/nvim設定 == | ||
vim/nvimのシステム全体の"ベースライン"設定が必要な場合は、次の二つの例を参照してください: | |||
unstableでは: | |||
< | <syntaxhighlight lang="nix"> | ||
{ pkgs, ... }: | { pkgs, ... }: | ||
{ | { | ||
| Line 125: | Line 107: | ||
enable = true; | enable = true; | ||
defaultEditor = true; | defaultEditor = true; | ||
package = (pkgs. | package = (pkgs.vim-full.override { }).customize{ | ||
name = "vim"; | name = "vim"; | ||
# 例として、Nixファイルのシンタックスハイライト表示用のプラグインをインストールする | |||
# | |||
vimrcConfig.packages.myplugins = with pkgs.vimPlugins; { | vimrcConfig.packages.myplugins = with pkgs.vimPlugins; { | ||
start = [ vim-nix vim-lastplace ]; | start = [ vim-nix vim-lastplace ]; | ||
| Line 135: | Line 115: | ||
}; | }; | ||
vimrcConfig.customRC = '' | vimrcConfig.customRC = '' | ||
" 自分のカスタムvimrc | |||
set nocompatible | set nocompatible | ||
set backspace=indent,eol,start | set backspace=indent,eol,start | ||
" シンタックスハイライトをデフォルトでオンにする | |||
syntax on | syntax on | ||
" ... | " ... | ||
| Line 149: | Line 125: | ||
}; | }; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
{ pkgs, ... }: | { pkgs, ... }: | ||
| Line 195: | Line 135: | ||
configure = { | configure = { | ||
customRC = '' | customRC = '' | ||
" 自分のカスタムvimrc | |||
set nocompatible | set nocompatible | ||
set backspace=indent,eol,start | set backspace=indent,eol,start | ||
| Line 211: | Line 149: | ||
</syntaxHighlight> | </syntaxHighlight> | ||
これらのファイルを自分の<code>configuration.nix</code>でインポートする | |||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
{ | { | ||
| Line 224: | Line 160: | ||
</syntaxHighlight> | </syntaxHighlight> | ||
< | <span id="Custom_setup_without_using_Home_Manager"></span> | ||
== | == Home Managerを使用しないカスタムセットアップ == | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 232: | Line 167: | ||
</div> | </div> | ||
Vimプラグインはnixの助けを借りてインストールすることができます。vimプラグインマネージャーを使用せず、すべて<code>.nixpkgs/config</code>で行うことができます。 | |||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
A lot of documentation about package management and configuration of vim in nix is stored at [https://github.com/NixOS/nixpkgs/blob/master/ | A lot of documentation about package management and configuration of vim in nix is stored at [https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md] in nixpkgs. | ||
</div> | </div> | ||
< | <span id="Customizations"></span> | ||
=== | === カスタマイズする === | ||
vimもneovimも、あなたの好きなプラグインや追加ライブラリを含むようにさらに設定することができます。利用可能な全ての vim プラグインをリストアップするには、<code>nix search nixpkgs#vimPlugins</code>を実行してください。 | |||
以下のコードを<code>~/.nixpkgs/config.nix</code>に追加してください: | |||
< | <syntaxhighlight lang="nix"> | ||
{ | { | ||
packageOverrides = pkgs: with pkgs; { | packageOverrides = pkgs: with pkgs; { | ||
myVim = | myVim = vim-full.customize { | ||
name = "vim-with-plugins"; | name = "vim-with-plugins"; | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 279: | Line 207: | ||
}; | }; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 297: | Line 225: | ||
</div> | </div> | ||
< | <syntaxhighlight lang="nix"> | ||
vim-full.customize { | |||
name = "vim-with-plugins"; | name = "vim-with-plugins"; | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 308: | Line 236: | ||
''; | ''; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 318: | Line 246: | ||
</div> | </div> | ||
< | <syntaxhighlight lang="nix"> | ||
vim-full.customize { | |||
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { | vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 335: | Line 263: | ||
} | } | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 367: | Line 295: | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
Please see https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md. | |||
</div> | </div> | ||
| Line 410: | Line 314: | ||
</div> | </div> | ||
< | <syntaxhighlight lang="nix"> | ||
let | let | ||
vim-better-whitespace = pkgs.vimUtils.buildVimPlugin { | vim-better-whitespace = pkgs.vimUtils.buildVimPlugin { | ||
| Line 423: | Line 327: | ||
in { | in { | ||
users.users.<yourNickname>.packages = [ | users.users.<yourNickname>.packages = [ | ||
(pkgs. | (pkgs.vim-full.customize { | ||
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { | vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; { | ||
start = [ vim-better-whitespace ]; | start = [ vim-better-whitespace ]; | ||
| Line 430: | Line 334: | ||
]; | ]; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 494: | Line 398: | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
The following snippet will make a full featured python IDE. | The following snippet will make a full featured [[python]] IDE. | ||
</div> | </div> | ||
| Line 501: | Line 405: | ||
</div> | </div> | ||
< | <syntaxhighlight lang="nix"> | ||
vim-full.customize { | |||
vimrcConfig = { | vimrcConfig = { | ||
customRC = '' | customRC = '' | ||
| Line 520: | Line 424: | ||
} | } | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
| Line 566: | Line 470: | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
== | == gvim and gview == | ||
</div> | </div> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
You can enable <code>guiSupport</code> to make <code>gvim</code> available, though this won't give you <code>gview</code>: | |||
</div> | </div> | ||
< | <syntaxhighlight lang="nix"> | ||
(pkgs. | (pkgs.vim-full.customize { | ||
guiSupport = true; | |||
}) | }) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:CLI Applications]] | |||
[[Category:Text Editor{{#translation:}}]] | [[Category:Text Editor{{#translation:}}]] | ||
Latest revision as of 14:22, 20 November 2025
Vim (vi improved) is a highly configurable modal text editor program for the terminal.
インストール
ベーシックインストール
programs.vim.enable = true;
もしくは
programs.vim = {
enable = true;
package = pkgs.vim-full;
};
もしくは
environment.systemPackages = with pkgs; [ vim-full ];
Home Managerを使用した例
VimはHome Managerを使用して簡単にセットアップ出来ます。以下は最低限の一例です:
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 with Coc for Python
For NeoVim use this home manager config: https://github.com/NixOS/nixpkgs/issues/98166#issuecomment-725319238
システム全体でのvim/nvim設定
vim/nvimのシステム全体の"ベースライン"設定が必要な場合は、次の二つの例を参照してください:
unstableでは:
{ pkgs, ... }:
{
programs.vim = {
enable = true;
defaultEditor = true;
package = (pkgs.vim-full.override { }).customize{
name = "vim";
# 例として、Nixファイルのシンタックスハイライト表示用のプラグインをインストールする
vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
start = [ vim-nix vim-lastplace ];
opt = [];
};
vimrcConfig.customRC = ''
" 自分のカスタムvimrc
set nocompatible
set backspace=indent,eol,start
" シンタックスハイライトをデフォルトでオンにする
syntax on
" ...
'';
};
};
}
{ pkgs, ... }:
{
programs.neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
configure = {
customRC = ''
" 自分のカスタムvimrc
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を使用しないカスタムセットアップ
Vimプラグインはnixの助けを借りてインストールすることができます。vimプラグインマネージャーを使用せず、すべて.nixpkgs/configで行うことができます。
A lot of documentation about package management and configuration of vim in nix is stored at [2] in nixpkgs.
カスタマイズする
vimもneovimも、あなたの好きなプラグインや追加ライブラリを含むようにさらに設定することができます。利用可能な全ての vim プラグインをリストアップするには、nix search nixpkgs#vimPluginsを実行してください。
以下のコードを~/.nixpkgs/config.nixに追加してください:
{
packageOverrides = pkgs: with pkgs; {
myVim = vim-full.customize {
name = "vim-with-plugins";
<div lang="en" dir="ltr" class="mw-content-ltr">
# add here code from the example section
</div>
};
myNeovim = neovim.override {
configure = {
customRC = ''
<div lang="en" dir="ltr" class="mw-content-ltr">
# here your custom configuration goes!
</div>
'';
packages.myVimPackage = with pkgs.vimPlugins; {
<div lang="en" dir="ltr" class="mw-content-ltr">
# see examples below how to use custom packages
</div>
start = [ ];
opt = [ ];
};
};
};
};
}
After that you can install your special grafted `myVim` or `myNeovim` packages.
Examples
Apply custom vimrc configuration
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-full.customize {
name = "vim-with-plugins";
<div lang="en" dir="ltr" class="mw-content-ltr">
# add custom .vimrc lines like this:
</div>
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-full.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.
Using Pathogen as manager
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" ];
Using Vim-Plug as manager
vimrcConfig.plug.plugins = with pkgs.vimPlugins; [vim-addon-nix youcompleteme];
Adding new plugins
Notes Regarding Plugins
For additional info, you may wish to look at documentation on the nixpkgs repository.
Add a new custom plugin to the users packages
Sometimes you do not want to change upstream plugins, for this you can use vimUtils.buildVimPlugin to create your own:
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-full.customize {
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
start = [ vim-better-whitespace ];
};
})
];
};
Using 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 as a Python IDE
The following snippet will make a full featured python IDE.
Using language client
vim-full.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
]))
Real life examples
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
gvim and gview
You can enable guiSupport to make gvim available, though this won't give you gview:
(pkgs.vim-full.customize {
guiSupport = true;
})