template.nvim is a neovim plugin that allows neovim users to <action>
.
✨ Features
- Modern Plugin Architecture: Ready-to-go Neovim plugin template with best practices
- Unified Command System: Modern command interface with tab completion support
- Type Safety: Comprehensive type annotations using LSP-compatible
@class
and @param
- DRY Code Patterns: Reusable helper functions and modular design
- CI/CD Ready: Lint and test GitHub Actions included
- Auto Documentation: GitHub Action to auto-generate vimdocs
- Professional README: Complete template with modern formatting
- Integration Ready: Works seamlessly with mkrepo
⚡ Setup
⚙️ Requirements
💻 Installation
-- Lazy
{
'2kabhishek/template.nvim',
cmd = { 'Template' },
keys = { '<leader>th', '<leader>tH', },
-- Add your custom configs here, keep it blank for default configs (required)
opts = {},
-- Use this for local development
-- dir = '~/path-to/template.nvim',
},
🚀 Usage
- Fork the
template.nvim
repo
- Update the plugin name, file names etc, change
template
to your-plugin-name
- Add the code required for your plugin:
- Code entrypoint: template.lua - Main setup function
- User configs: config.lua - Configuration with type annotations
- Commands: commands.lua - Modern command system with completion
- Plugin logic: module.lua - Core functionality with type safety
- Additional modules: Add more modules under modules directory as needed
- Command System Features:
- Unified command interface with subcommands
- Tab completion support for better UX
- Reusable helper functions for DRY code
- Comprehensive type annotations for better development experience
- Add test code to the tests directory
- Update the README with your plugin's functionality
- Tweak the docs action file to reflect your plugin name, commit email and username
- Generating vimdocs needs read and write access to actions (repo settings > actions > general > workflow permissions)
Configuration
template.nvim can be configured using the following options:
template.setup({
name = 'template.nvim', -- Name to be greeted, 'World!' by default
add_default_keybindings = true, -- Whether to add default keybindings
})
Commands
template.nvim
provides a unified command interface with tab completion:
Template greet [name]
- Shows a hello message with the specified name (with tab completion)
Template notify [message]
- Shows a notification with custom message
Keybindings
Here are the default keybindings:
Keybinding |
Command |
Description |
<leader>th |
Template greet |
Template greet default name |
<leader>tH |
Template greet Neovim |
Template greet Neovim |
You can disable default keybindings by setting add_default_keybindings = false
in your config.
Help
Run :help template.txt
for more details.
🏗️ What's Next
Planning to add <feature/module>
.
✅ To-Do
⛅ Behind The Code
🌈 Inspiration
template.nvim was inspired by nvim-plugin-template, I added some changes on top to make setting up a new plugin faster.
💡 Challenges/Learnings
- The main challenges were
<issue/difficulty>
- I learned about
<learning/accomplishment>
🧰 Tooling
🔍 More Info
⭐ hit the star button if you found this useful ⭐
Source
| Blog
| Twitter
| LinkedIn
| More Links
| Other Projects