-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
doc: give neovim its own neovim.section.md #373090
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -96,4 +96,5 @@ swift.section.md | |
tcl.section.md | ||
texlive.section.md | ||
vim.section.md | ||
neovim.section.md | ||
``` |
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,107 @@ | ||||||||
# Neovim {#neovim} | ||||||||
|
||||||||
Install `neovim-unwrapped` to get a barebone neovim to configure imperatively. | ||||||||
Neovim can be configured to include your favorite plugins and additional libraries by installing `neovim` instead. | ||||||||
See the next section for more details. | ||||||||
|
||||||||
## Custom configuration {#neovim-custom-configuration} | ||||||||
|
||||||||
For Neovim the `configure` argument can be overridden to achieve the same: | ||||||||
|
||||||||
```nix | ||||||||
neovim.override { | ||||||||
configure = { | ||||||||
customRC = '' | ||||||||
# here your custom configuration goes! | ||||||||
''; | ||||||||
}; | ||||||||
} | ||||||||
``` | ||||||||
|
||||||||
If you want to use `neovim-qt` as a graphical editor, you can configure it by overriding Neovim in an overlay | ||||||||
or passing it an overridden Neovim: | ||||||||
|
||||||||
```nix | ||||||||
neovim-qt.override { | ||||||||
neovim = neovim.override { | ||||||||
configure = { | ||||||||
customRC = '' | ||||||||
# your custom configuration | ||||||||
''; | ||||||||
}; | ||||||||
}; | ||||||||
} | ||||||||
``` | ||||||||
|
||||||||
### Specificities for some plugins {#neovim-plugin-specificities} | ||||||||
#### Treesitter {#neovim-plugin-treesitter} | ||||||||
|
||||||||
By default `nvim-treesitter` encourages you to download, compile and install | ||||||||
the required Treesitter grammars at run time with `:TSInstall`. This works | ||||||||
poorly on NixOS. Instead, to install the `nvim-treesitter` plugins with a set | ||||||||
of precompiled grammars, you can use the `nvim-treesitter.withPlugins` function: | ||||||||
|
||||||||
```nix | ||||||||
(pkgs.neovim.override { | ||||||||
configure = { | ||||||||
packages.myPlugins = with pkgs.vimPlugins; { | ||||||||
start = [ | ||||||||
(nvim-treesitter.withPlugins ( | ||||||||
plugins: with plugins; [ | ||||||||
nix | ||||||||
python | ||||||||
] | ||||||||
)) | ||||||||
]; | ||||||||
}; | ||||||||
}; | ||||||||
}) | ||||||||
``` | ||||||||
|
||||||||
To enable all grammars packaged in nixpkgs, use `pkgs.vimPlugins.nvim-treesitter.withAllGrammars`. | ||||||||
|
||||||||
|
||||||||
### Testing Neovim plugins {#testing-neovim-plugins} | ||||||||
|
||||||||
#### neovimRequireCheck {#testing-neovim-plugins-neovim-require-check} | ||||||||
`neovimRequireCheck` is a simple test which checks if Neovim can requires lua modules without errors. This is often enough to catch missing dependencies. | ||||||||
|
||||||||
It accepts a single string for a module, or a list of module strings to test. | ||||||||
- `nvimRequireCheck = MODULE;` | ||||||||
- `nvimRequireCheck = [ MODULE1 MODULE2 ];` | ||||||||
|
||||||||
When `nvimRequireCheck` is not specified, we will search the plugin's directory for lua modules to attempt loading. This quick smoke test can catch obvious dependency errors that might be missed. | ||||||||
The check hook will fail the build if any modules cannot be loaded. This encourages inspecting the logs to identify potential issues. | ||||||||
|
||||||||
To only check a specific module, add it manually to the plugin definition [overrides](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/overrides.nix). | ||||||||
|
||||||||
```nix | ||||||||
gitsigns-nvim = super.gitsigns-nvim.overrideAttrs { | ||||||||
dependencies = [ self.plenary-nvim ]; | ||||||||
nvimRequireCheck = "gitsigns"; | ||||||||
}; | ||||||||
``` | ||||||||
Some plugins will have lua modules that require a user configuration to function properly or can contain optional lua modules that we dont want to test requiring. | ||||||||
We can skip specific modules using `nvimSkipModule`. Similar to `nvimRequireCheck`, it accepts a single string or a list of strings. | ||||||||
- `nvimSkipModule = MODULE;` | ||||||||
- `nvimSkipModule = [ MODULE1 MODULE2 ];` | ||||||||
|
||||||||
```nix | ||||||||
asyncrun-vim = super.asyncrun-vim.overrideAttrs { | ||||||||
nvimSkipModule = [ | ||||||||
# vim plugin with optional toggleterm integration | ||||||||
"asyncrun.toggleterm" | ||||||||
"asyncrun.toggleterm2" | ||||||||
]; | ||||||||
}; | ||||||||
``` | ||||||||
|
||||||||
In rare cases, we might not want to actually test loading lua modules for a plugin. In those cases, we can disable `neovimRequireCheck` with `doCheck = false;`. | ||||||||
|
||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @khaneliman is there any instance of us disabling doCheck just because of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. also there is a mix of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Most other language/framework sections contain some mention about the usage of supermaven-nvim = super.supermaven-nvim.overrideAttrs {
# TODO: handle supermaven binary
doCheck = false;
}; |
||||||||
This can be manually added through plugin definition overrides in the [overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/overrides.nix). | ||||||||
```nix | ||||||||
vim-test = super.vim-test.overrideAttrs { | ||||||||
# Vim plugin with a test lua file | ||||||||
doCheck = false; | ||||||||
}; | ||||||||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,12 @@ | |
"chap-release-notes": [ | ||
"release-notes.html#chap-release-notes" | ||
], | ||
"neovim": [ | ||
"index.html#neovim" | ||
], | ||
"neovim-custom-configuration": [ | ||
"index.html#neovim-custom-configuration" | ||
], | ||
"nixpkgs-manual": [ | ||
"index.html#nixpkgs-manual" | ||
], | ||
|
@@ -3763,7 +3769,8 @@ | |
"vim": [ | ||
"index.html#vim" | ||
], | ||
"custom-configuration": [ | ||
"vim-custom-configuration": [ | ||
"index.html#vim-custom-configuration", | ||
"index.html#custom-configuration" | ||
], | ||
"managing-plugins-with-vim-packages": [ | ||
|
@@ -3772,10 +3779,12 @@ | |
"what-if-your-favourite-vim-plugin-isnt-already-packaged": [ | ||
"index.html#what-if-your-favourite-vim-plugin-isnt-already-packaged" | ||
], | ||
"vim-plugin-specificities": [ | ||
"index.html#vim-plugin-specificities" | ||
"neovim-plugin-specificities": [ | ||
"index.html#neovim-plugin-specificities", | ||
"neovim-plugin-specificities#vim-plugin-specificities" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should probably have been But great to see that @GetPsyched's work is useful to avoid documentation falling apart 😄 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe ? Because I had seen the PR about the redirection and all I had an idea of what was going on, otherwise I think the feedback would have surprised me more. I understand the idea behind the redirects but as a maintainer it's one additional hurdle to contribute to the doc and the UX frustrated me quite a bit. I spent more time trying to work out the redirections rather than the doc changes. Note that I contribute to the doc reluctantly as a last resort so I am already grumpy by then ^^' There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the feedback! And sorry that the experience was frustrating. Good point about input validation! The format is documented in the source code for the tool dealing with it, but it sounds reasonable to indeed document it in place. |
||
], | ||
"vim-plugin-treesitter": [ | ||
"neovim-plugin-treesitter": [ | ||
"index.html#neovim-plugin-treesitter", | ||
"index.html#vim-plugin-treesitter" | ||
], | ||
"managing-plugins-with-vim-plug": [ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I prefer the "require" mention that makes it clearer for the initiated (which this subsection is for).