--- title: My neovim setup date: 2024-05-16T12:16:06+0200 id: 20240516121606 tags: [neovim, editor, configuration, README] --- # [Neovim setup][1] This new configuration is written with the help of: - [`kickstart.nvim`][4]. This is a good project to kickstart a configuration, but then it takes time to understand what it makes, how to use it, and how to modify it. - *[Tutoriel : configurer Neovim comme IDE/éditeur de code à partir de zéro][5]*. This blog post, in French, helped me a lot to understand better my configuration and to rewrite it. ## Requirements - Neovim > 0.10. - [Ripgrep][2]. - A [nerd font][3]. - [`vscode-langservers-extracted`][6]. It's mandatory for the JSON LSP. ## Python provider I'm using a virtual environment for the python provider, as the [documentation][7], using `pyenv`. ## Structure - `init.lua` is the configuration file, with the required includes. - `lua/` is the folder where specific configuration and plugins are. - `lua/core` contains the basic configuration: - `options.lua` with the global neovim options. - `keymaps.lua` with the global neovim key mappings. - `lua/config` contains the Lazy plugin manager installation and configuration. - `lua/plugins` of course contains all other plugins installation and configuration. ## Plugins I won't provide links for each of these plugins as they are easily to be found. - `lazy.nvim` as plugins manager. - `plenary` to get lua functions used by many plugins. - Adwaita for the colorscheme. - `which-key.nvim` to find out shortkeys. - `nvim-tree` as file explorer. - `telescope.nvim` for the fuzzy finder interface. It has some specific dependencies: - `telescope-fzf-native.nvim` to get a C implementation of fzf, with improved performances. - `telescope-luasnip.nvim` to search for snippets. LuaSnip is a dependency for `nvim-cmp` which provides completion. - `telescope-ag` to use Ag or Ripgrep to filter results. - `nvim-web-devicons` as a dependency to add icons to the interface, when it is used (file explorer, fuzzy finder). - `treesitter` for language grammar support (with `treesitter-textobjects` as dependency, to improve bloc selection and navigation. It is deactivated for markdown. - Markdown: - `vim-pandoc` and `vim-pandoc-syntax` to support the pandoc markdown, nice concealing, easy folding and hard wrap automatic formatting. - `mkdnflow.nvim` to improve links navigation, table formatting, file creation, and so on. It improves also the link concealing. - `markdown-preview.nvim` to provide a live HTML preview. - Completion with `nvim-cmp` with the following dependencies: - `cmp-buffer` to get text completion from the current buffer text. - `cmp-path` to get path completion. - `cmp-cmdline` to get vim cmdline completion. - `LuaSnip` to get snippet expansion, with the nvim-cmp source for it: `cmp_luasnip`. - `friendly-snippets` which adds some user-friendly snippets. - `cmp-emoji` for emoji completion after ':'. - `lspkind.nvim` to add text symbols to spot the type of source completion. - Language servers: - `lsp-zero.nvim` to ease LSP configuration. - `nvim-lspconfig` to configure LSP support and completion, with dependencies: - `cmp-nvim-lsp` to get LSP results in completion. - `nvim-lsp-file-operations` to add some code actions. - `fidget.nvim` for LSP progress message and neovim notifications. - `mason.nvim` with `mason-lspconfig.nvim` to install automatically the needed LSP. And also with `mason-tool-installer` to extend it's package manager capabilities. - `schemastore.nvim` which provides the schemas needed by JSON and YAML validators. - `trouble.nvim` to display all *trouble* messages (LSP, diagnostics, etc.) in a pretty list. - `lazdev.nvim` to improve `lua_ls` configuration. - `vim-fugitive`. - `gitsigns.nvim` to see changes in the sign column. - `vim-speeddating` to increment dates, times, etc. - `vim-surround` to improve surroundings management. - `autopairs.nvim`. - `Comment.nvim` to comment lines and blocs. - `ident-blankline.nvim` to improve readability of indentation. - `zen-mode.nvim` for a good zen mode. - `toggleterm.nvim` to quickly get a terminal. Might find a better one. - `rainbow-csv.nvim` to manage CSV files. - `venv-selector.nvim` to ease python virtual env. - `vim-grammalecte` to get a good grammar checker for French. [1]: ./README.md [2]: https://github.com/BurntSushi/ripgrep/ [3]: https://github.com/ryanoasis/nerd-fonts/ [4]: https://github.com/nvim-lua/kickstart.nvim [5]: https://vincent.jousse.org/blog/fr/tech/configurer-neovim-comme-ide-a-partir-de-zero-tutoriel-guide [6]: https://github.com/hrsh7th/vscode-langservers-extracted [7]: https://neovim.io/doc/user/provider.html#python-virtualenv