uuid: - value: 8293455b-3322-4e45-a24a-2d64f77db033 langcode: - value: en type: - target_id: daily_email target_type: node_type target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7 revision_timestamp: - value: '2025-05-11T09:01:00+00:00' revision_uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 revision_log: { } status: - value: true uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 title: - value: 'I wrote a Neovim plugin' created: - value: '2022-08-13T00:00:00+00:00' changed: - value: '2025-05-11T09:01:00+00:00' promote: - value: false sticky: - value: false default_langcode: - value: true revision_translation_affected: - value: true path: - alias: /daily/2022/08/13/i-wrote-a-neovim-plugin langcode: en body: - value: |
I enjoy writing and working with open-source software, starting back to when I started working with PHP and Drupal in 2007.
Since then, I've written and maintained a number of Drupal modules and themes, PHP libraries, npm packages, Ansible roles and Docker images - all of which are available on my GitHub and Drupal.org pages.
Just over a year ago, I switched to using Neovim full-time for my development and DevOps work, and last week, I wrote my first Neovim plugin, written in Lua.
I've used Lua to configure Neovim but this is the first time that I've written and open-sourced a standalone Neovim plugin.
It's called toggle-checkbox.nvim and is used toggle checkboxes in Markdown files - something that I use frequently for to-do lists.
For example, this a simple list containing both checked and unchecked checkboxes:
- [x] A completed task
- [ ] An incomplete task
To toggle a checkbox, the x
character needs to be either added or removed, depending on whether we're checking or unchecking it.
This is done by calling the toggle()
function within the plugin.
In my Neovim configuration, I've added a keymap to do this:
vim.keymap.set(
"n",
"<leader>tt",
"require('toggle-checkbox').toggle()"
)
This means that I can use the same keymap by running <leader>tt
to check or uncheck a checkbox. I could use Vim's replace mode to do this, but I really wanted to have one keymap that I could use for both.
As it's my first Neovim plugin, I decided to keep it simple.
The main toggle-checkbox.lua
file is currently only 41 lines of code, and whilst there is an existing Vim plugin that I could have used, I was excited to write my own plugin for Neovim, to start contributing to the Neovim ecosystem, and add a Neovim plugin to my portfolio of open-source projects.
You can view the plugin at https://github.com/opdavies/toggle-checkbox.nvim, as well as my Neovim configuration (which is also written in Lua) as part of my Dotfiles repository.
format: full_html processed: |I enjoy writing and working with open-source software, starting back to when I started working with PHP and Drupal in 2007.
Since then, I've written and maintained a number of Drupal modules and themes, PHP libraries, npm packages, Ansible roles and Docker images - all of which are available on my GitHub and Drupal.org pages.
Just over a year ago, I switched to using Neovim full-time for my development and DevOps work, and last week, I wrote my first Neovim plugin, written in Lua.
I've used Lua to configure Neovim but this is the first time that I've written and open-sourced a standalone Neovim plugin.
It's called toggle-checkbox.nvim and is used toggle checkboxes in Markdown files - something that I use frequently for to-do lists.
For example, this a simple list containing both checked and unchecked checkboxes:
- [x] A completed task
- [ ] An incomplete task
To toggle a checkbox, the x
character needs to be either added or removed, depending on whether we're checking or unchecking it.
This is done by calling the toggle()
function within the plugin.
In my Neovim configuration, I've added a keymap to do this:
vim.keymap.set(
"n",
"<leader>tt",
"require('toggle-checkbox').toggle()"
)
This means that I can use the same keymap by running <leader>tt
to check or uncheck a checkbox. I could use Vim's replace mode to do this, but I really wanted to have one keymap that I could use for both.
As it's my first Neovim plugin, I decided to keep it simple.
The main toggle-checkbox.lua
file is currently only 41 lines of code, and whilst there is an existing Vim plugin that I could have used, I was excited to write my own plugin for Neovim, to start contributing to the Neovim ecosystem, and add a Neovim plugin to my portfolio of open-source projects.
You can view the plugin at https://github.com/opdavies/toggle-checkbox.nvim, as well as my Neovim configuration (which is also written in Lua) as part of my Dotfiles repository.
summary: null field_daily_email_cta: { }