From 80a277b06231ae7a39788232b690458ad1c3ae45 Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Mon, 25 Dec 2023 17:46:56 +0100 Subject: [PATCH] Add article about vim configuration. --- content/images/nvim-which-keys.png | Bin 0 -> 38451 bytes content/software/nvim-configure.md | 327 +++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 content/images/nvim-which-keys.png create mode 100644 content/software/nvim-configure.md diff --git a/content/images/nvim-which-keys.png b/content/images/nvim-which-keys.png new file mode 100644 index 0000000000000000000000000000000000000000..58802c6fc98a2f8627ac5a8e64cc7866830a2ee1 GIT binary patch literal 38451 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 literal 0 HcmV?d00001 diff --git a/content/software/nvim-configure.md b/content/software/nvim-configure.md new file mode 100644 index 0000000..9b0f7ff --- /dev/null +++ b/content/software/nvim-configure.md @@ -0,0 +1,327 @@ +--- +Title: Setup Neovim with kickstart.nvim +Date: 2023-12-25 14:00 +Lang: en +Author: Fabrice +Category: software +Tags: vim, neovim, setup +Slug: nvim-kickstart +table-of-contents: true +Header_Cover: ../images/covers/antennae.jpg +Summary: How to create a sane Neovim configuration with kickstart.nvim as a + starting point. +--- + +# Introduction + +## How I managed my configuration + +When I started using Vim, I started editing my `.vimrc` bit by bit and +incrementally before it starts getting too big for me to find anything inside +it and not using even half of the plugins I installed. That goes without saying, +there were quite a bit on conflicting keymaps as well as I'm using +[bépo](http://bepo.fr/) as my keyboard layout with [partial remaps +(fr)](https://cdn.bepo.fr/Vim-bepo-066.png). + +Obviously, it slowly became quite a mess. To address this issue, I +decided to reorganise my `$HOME/.config/vim` directory using the [vim directory +structure](www.panozzaj.com/blog/2011/09/09/vim-directory-structure/) and did +some cleanup at this point of time. I think it was also around this period that +I discovered that Vim8 added a native package manager that I started to use. +Thus, at this point, I started organising my configuration with semantic files, +such as `$VIMHOME/plugin/spelling.vim` to manage my spelling configuration for +instance. This approach makes debugging easier, and also checking custom +keyboard shortcuts easier, as I just have to check +`$VIMHOME/plugin/omnicomplete.vim` for instance to know which shortcuts I set up +when I'm still getting the habits of using them. + +At some point of time, I moved to Neovim, and I simply moved my configuration +from Vim to Neovim and continue on adding more and more plugins on top of each +other depending on my hype, especially because the world of Neovim plugins +opened up to me. Needless to say that less than half of these plugins were put +into good use. Which leads to my first configuration big cleanup. + +Six months ago, I wiped my frankenconfig, and started back from scratch in +[lua](https://lua.org/about.html), with the same structural approach as +previously, but now wondering if the plugin would be useful or not. Since my +first time using Vim, there were some big changes in the vim ecosystem, +especially in language management with +[tree-sitter](https://tree-sitter.github.io/tree-sitter/) and +[lsp](https://en.wikipedia.org/wiki/Language_Server_Protocol). These two bring +into the environment a unified way to manage languages without having to depend +on language-specific plugins, henceforth I didn't need specific plugins to have +nice syntax coloration for obscure languages anymore, or get frustrated with +[omnicomplete](https://vim.fandom.com/wiki/Omni_completion) which decided not to +work for some languages… While it's not an absolute rule (for instance, I'm +using [vimtex]({filename}./nvim-latex.md) for latex, which includes a more +accurate syntax coloring than tree-sitter). I also moved from the native vim way +of managing plugins to use [`Lazy`](https://github.com/folke/lazy.nvim) as a +proper plugin manager, which helped me synchronize my configuration between my +different computers. It was working nice and well, with some weird bugs (see +below) on first install, but as it was punctual… I just ignored it. + +```plain +E5113: Error while calling lua chunk: +$VIMHOME/nvim/init.lua:13: E21: Cannot make changes, 'modifiable' is off +``` + +However, I was unhappy with some of my configurations, and if I managed to have +something functional, there were many details that annoy me that stemmed for +some configuration I wrote some times ago and of course didn't document. This +leads us to today, where I just decided to use +[`kickstart.nvim`](https://github.com/nvim-lua/kickstart.nvim), which is a +well-documented vim starting configuration (it's not a distribution, it still +requires your input to obtain something that fits your needs), which was exactly +what I needed to start anew… but not fully from scratch. + +## The migration + +To move my configuration from `kickstart.nvim`, I wanted to get the best of both +world. For instance, I didn't want to have an +[`init.lua`](https://github.com/nvim-lua/kickstart.nvim/blob/master/init.lua) +that is over 600 lines long. I thus decided to split it into short files that +manages a specific part of the configuration: completion, lsps, treesitter, +mappings after reading the different configuration default from nvim-kickstart +and changing what I disliked. To do that, I started with using the +[`NVIM_APP`](https://practical.li/neovim/configuration/) environment option in +order to make the move in a non-destructive way. After installing the bare +minimum to make it usable for me (as a bépo user), I exported the `NVIM_APP` +variable to start using my configuration to help me debug it on the fly. +I also decided to write this blog post to remember the process and maybe helped +some people who want to configure their text editor. + +Note that in the following, we will assume that the reader is already familiar +with Neovim and lua. + +# Configuring Neovim + +My (in use) configuration for Neovim is available [here](https://git.epheme.re/fmouhart/nvim-config-kickstart). + +I started using git from the start in order to remember what I did by using its +[history](https://git.epheme.re/fmouhart/nvim-config-kickstart/commits/branch/master). +As it's not the easier thing to read however, here follows my rationals, and +thought during this process in a chronological order. + +## kickstart.nvim + +`kickstart.nvim` is a starting Neovim configuration file which was created by +[TJ DeVries](https://github.com/tjdevries), a core developer of Neovim, author +of [telescope.nvim](https://github.com/nvim-lua/telescope.nvim) and content +creator about Neovim. You can see a quick presentation on his YouTube channel +[[here]](https://www.youtube.com/watch?v=stqUbv-5u2s). + +To summarise, it is a starting configuration including a minimal set of plugins +that helps to have a modern editor, that has a working and customizable LSP +configuration with [Mason](https://github.com/williamboman/mason.nvim) to help +install LSP servers, git helpers, completion, telescope, and a choice of +shortcuts that are quite natural to learn (unlike what I used previously because +I was simply adding shortcuts one after another without thinking of the +compatibility between them). + +Note that it is made for educational purpose, and thus is not modularised as is +(hence the single self-contained `init.lua` file). Which leads us to our first +step after simply pasting the content of `init.lua` into the `$VIMHOME/init.lua` +file. + +## Modular configuration + +When in doubt about some shortcuts, I'm under the habit of going to read the +corresponding configuration file in my `$VIMHOME/plugin` directory. +`kickstart.nvim` includes `which-key`, that is a plugin that pops a helper when +waiting for a command as shown hereunder. + +[![which-key plugin +illustration](../images/nvim-which-keys.png)](../images/nvim-which-keys.png) + +Thanks to that, I start getting rid of this habit. However, having a modular +configuration helps debugging it. Usually, when an error spawns, the filename +and location of what has triggered it appears in the stack trace, and it's +easier to search in a short file than a thousand-line long one. + +After a first read of the configuration file, I decided to split it into smaller +files. Note that if you want to start directly from there a project that does +exactly that exists: + +* [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim) + +However, I find it easier for educational purpose to have everything in one +place to linearly read it first. + +The process was quite simple, as the file was already divided logically into +components that make sense, I just had to take the content of those sections and +move them into the `$VIMHOME/lua` folder before including them in `init.lua`. I +hesitated to continue using the `$VIMHOME/plugin` directory for that, but I then +realised that having it inside init.lua allows having a structure that allows +using `init.lua` as an index, and I can start +[jumping](https://vimhelp.org/motion.txt.html) from there to access my +specific configurations. + +To illustrate it, let's take the example of completion. In `kickstart.nvim`, +there is a section called "Configure nvim-cmp", that deleted and pasted into a +file `$VIMHOME/lua/complete.lua` before adding the line `require('complete')` to +load it. You can see the result in this +[commit](https://git.epheme.re/fmouhart/nvim-config-kickstart/commit/7ce423fade9d6877b2e9174dd9b9dea36254ac19). + +## Survival + +Now that it's done, I need my basic keymaps for using Vim/Neovim in bépo. I +added the file `$VIMHOME/lua/bepo.lua` and simply load it with a line +`require('bepo')` in my `$VIMHOME/init.lua` file. + +I also merged my personal remap inside the `$VIMHOME/lua/mappings.lua` file +which already contained the ones imported from `kickstart.nvim` from the +previous step. These mappings are convenient ones such as the following one to +easily open folds to a given level. + +```lua +local keymap = vim.keymap.set + +-- z0…z9 to open folds to a certain level +for i=0,9 do + keymap('n', 'z' .. i , ':set fdl=' .. i .. '', {noremap = true, silent = false}) +end +``` + +I also merged and cleaned redundant general options in the +`$VIMHOME/lua/general-options.lua` file. For instance to ignore folded content +when jumping between paragraphs for instance, there is the following line in the +aforementioned file: + +```lua +-- folds +vim.g.ip_skipfold=true +``` + +Once all of that is done, at this point of time, I started moving to use the +configuration by exporting `NVIM_APP=new_nvim` inside my `.zshrc`. The idea is +that now I bootstrapped my Neovim config to proficiently edit the configuration, +which in lua also uses LSP and many of `kickstart.nvim` features. During this +process I notice what I liked and disliked to know how to edit the configuration +while editing the configuration. + +## Importing my former configuration + +After having the minimal setup top edit a configuration, I now need to make +things work for other things as well. + +That is dependent of your workflow. For reference, I personally use Neovim to: + +* Write text in [markdown](https://daringfireball.net/projects/markdown/) (such as what I'm currently doing) + for different purposes; + * blog post, emails or more generally text blocks that will be exported in + html. +* Read text written in Markdown; +* Try to organise my life using [neorg](https://github.com/nvim-neorg/neorg); +* [LaTeX](https://en.wikipedia.org/wiki/LaTeX) documents and slideshows; +* Write code in a variety of languages. + +To do that I went to my previous configuration (which fortunately was already +using [`Lazy`](https://github.com/folke/lazy.nvim) as a plugin manager). To do +that, I picked my specific plugins, for instance `Neorg`, to import the +configuration. For the example of `Neorg` it has multiple steps as I had a +`$VIMHOME/plugin/neorg.lua` that contained my general configuration and +`$VIMHOME/ftplugin/norg.lua` which has specific configuration when editing a +note in `Neorg`. + +After asking `Lazy` to install `Neorg`, I first imported the general +configuration from my previous `plugin` folder in my new `lua` folder, as +depicted by this +[commit](https://git.epheme.re/fmouhart/nvim-config-kickstart/commit/0e8587b461b67082c1e34ef9cb07180ccfee9f8b). + +After wondering if I should create a `ftplugin` directory, I finally decided to +move to autocommands to manage different filetypes. The reason behind that was +that I had a limited amount of lines in total in my former `ftplugin` directory, +and the subdivision with `augroup` and `autocmd` in Vim makes it reasonably +readable. Which brought me to this +[commit](https://git.epheme.re/fmouhart/nvim-config-kickstart/commit/c506a7ea7868ba80dc053a59cbb66c5efa666e2c). + +Then some sanity and cleanup have been made. For example, adding a description +field to my key maps so that `which-key` nicely prints them. See this +[commit](https://git.epheme.re/fmouhart/nvim-config-kickstart/commit/689bb2024d97fdc9e5e656517f00e446e95ae198). + +Now, rinse and repeat for each plugin/specific configuration set: `vimtex`, +`vim-pandoc-syntax` (which I mainly use for the +[concealer](https://vimhelp.org/syntax.txt.html#conceal)), spelling +configuration, etc. + +All the while keeping a critical eye on what I'm moving. For instance, I have a +mapping on the following command to fix typo on a misspelled word under the +cursor when writing text: mz[s1z=\`z. However, the key was bound at +anytime, even when spelling was not enabled. To fix that, we changed the way the +binding was called: instead of being called everytime, we embedded it inside an +[`autocmd`](https://vimhelp.org/autocmd.txt.html#autocommands) which [triggers +when the option](https://vimhelp.org/autocmd.txt.html#OptionSet) `spell` is set. +To see the resulting configuration, see these two files: +[`autocommands.lua`](https://git.epheme.re/fmouhart/nvim-config-kickstart/src/commit/d0afa1066cabab3d2b0aa7e2e84a267ce0532c61/lua/autocommands.lua#L32-L37) +for the autocommand setting, and +[`spelling.lua`](https://git.epheme.re/fmouhart/nvim-config-kickstart/src/commit/d0afa1066cabab3d2b0aa7e2e84a267ce0532c61/lua/spelling.lua) +for the utils module. + +Just for the record, this is what it does: + +1. Store the current cursor location: `mz` [sets a + mark](https://vimhelp.org/motion.txt.html#mark) z on current position; +2. [Go to the previous spelling error](https://vimhelp.org/spell.txt.html#%5Bs): `[s`; +3. [Pick the first spelling suggestion](https://vimhelp.org/spell.txt.html#z%3D): `1z=`; +4. Go back to the stored location: \`z [jumps to + mark](https://vimhelp.org/motion.txt.html#%60) z at the right column. + +## Adjusting the configuration + +While testing the default behaviour of `kickstart.nvim`, which changes quite a +few things for me, I realised that some of them were quite smart, such as + as the leader key, which was on `,` before because of its accessibility +in bépo, disabling quite a [useful motion +binding](https://vimhelp.org/motion.txt.html#%2C), some are more personal +tastes, such as the default register to be the system one or not. + +I thus tried some of these options and decided while editing the configuration +and writing this blog post which one where working nicely for me (with the help +of `which-key` to help me during this whole process), and which one were not +quite working (`unnamedplus` as default clipboard, I really use both separately, +and I don't want to have my system clipboard polluted) + +Moreover, `:healthcheck which-keys` was really helpful to debug some colliding +key bindings, especially because of bépo, which has been incrementally fixed +while editing the configuration. I already wrote a blog post about how I handle +those in [vimtex]({filename}./nvim-latex.md). + +My former configuration also featured LSP, but Mason was not used, which made me +install my LSP server from my system package manager. However, I still prefer +using the system one for some languages that features some changes between +versions, which I [also +configured](https://git.epheme.re/fmouhart/nvim-config-kickstart/src/commit/d0afa1066cabab3d2b0aa7e2e84a267ce0532c61/lua/lsp.lua#L120-L149) +in the `$VIMHOME/lua/lsp-configure.lua` file. + +# Final thoughts + +To conclude, I would like to say thanks to the French +[tuppervim](https://tuppervim.org) community, which regularly organises meetings +where we can show our latest configuration file, or just exchange nice tips. I +discovered both [TJ DeVries](https://www.youtube.com/c/TJDeVries) and +[`kickstart.nvim`](https://github.com/nvim-lua/kickstart.nvim) there. + +I still have to get rid of some habits (such as the comma as a leader key) and +get used to it, but I'm happy with the change so far, beside knowing exactly +what is in my configuration, it also helped me fix some weird key conflicts +while editing markdown, making writing this blog post quite pleasant. + +While trying the Git-related key bindings utilities bundled with +`kickstart.nvim`, while being quite minimal, it still filled my needs +(especially adding a hunk from visual selection, which is helpful to split +commits into sub-blocks when `git add -p` would have been quite tedious to use). + +The [status bar](https://github.com/nvim-lualine/lualine.nvim) was also a +pleasant surprise for me. It is exactly the kind of things I find useful but a +pain to configure. I may tweak it a bit in the future, but so far it's fine as +it is. + +The configuration will continue to evolve from this point, as my use of computer +and Neovim will change as well. And to finish, I think what TJ Devries said in +[this video](https://www.youtube.com/watch?v=QMVIJhC9Veg) about text editor is +quite on point: you don't have to spend time in your configuration if it is not +fun for you, just take something that works for you. I actually took the time to +do it because I find it interesting and fun 🙂 + +If you also find it fun, and want to try it, I strongly encourage you to take a +cup of hot cocoa, put on some relaxing music, and just dive head first!