https://github.com/melkyr/learn-vim
Plugin for neovim just focused on learning it.
https://github.com/melkyr/learn-vim
documentation neovim neovim-lua-plugin neovim-plugin tutorial-exercises tutorials vim
Last synced: 8 days ago
JSON representation
Plugin for neovim just focused on learning it.
- Host: GitHub
- URL: https://github.com/melkyr/learn-vim
- Owner: melkyr
- License: apache-2.0
- Created: 2025-04-23T20:23:06.000Z (2 months ago)
- Default Branch: dev
- Last Pushed: 2025-05-21T23:38:02.000Z (about 1 month ago)
- Last Synced: 2025-05-22T00:37:50.615Z (about 1 month ago)
- Topics: documentation, neovim, neovim-lua-plugin, neovim-plugin, tutorial-exercises, tutorials, vim
- Language: Lua
- Homepage:
- Size: 95.7 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# LearnVim.nvim
An interactive tutorial plugin for Neovim to help users learn Vim's modal editing and basic commands directly within the editor.
---
## 📚 About
**LearnVim.nvim** provides a structured, interactive way to learn the fundamentals of Vim's modal editing paradigm and essential commands without leaving your Neovim environment. It splits your window into a tutorial pane (explaining concepts) and an exercise pane (where you practice). Progress is saved automatically.
---
## ✨ Motivation and ComparisonLearning Vim can feel daunting at first due to its modal nature and vast command set. While resources like the built-in `vimtutor` and various books are invaluable, they often require switching contexts or don't fully leverage the interactive capabilities of the editor itself.
* **`vimtutor`**: Excellent for a quick, basic introduction, but limited in scope and structure. It's a single, linear experience without persistent progress or modular lessons.
* **Books/Online Guides**: Provide in-depth knowledge but require reading outside the editor you're trying to learn, making immediate practice less seamless.
**LearnVim.nvim** aims to bridge this gap by offering:
* **Integrated Experience**: Learn and practice directly within your Neovim instance, using the actual environment you'll be working in.
* **Structured Curriculum**: Progress through modules and lessons covering core concepts systematically.
* **Interactive Exercises**: Hands-on practice in a dedicated pane, with validation to check your understanding.
* **Persistent Progress**: Pick up where you left off across Neovim sessions.
* **Modular Design**: Easily add or modify lessons and modules.
This plugin is designed to be a stepping stone, providing a guided, practical introduction that complements other resources and helps build muscle memory for common Vim tasks in a real editing environment.
## ⚙️ Installation
Install using your favorite Neovim package manager.
### Using [lazy.nvim](https://github.com/folke/lazy.nvim)
Add this to your plugins list in `init.lua`:
```lua
{ 'melkyr/learn-vim.nvim' }
```### Using [Packer](https://github.com/wbthomason/packer.nvim)
Add this to your plugins list in `init.lua`:
```lua
use 'melkyr/learn-vim.nvim'
```### Using [vim-plug](https://github.com/junegunn/vim-plug)
Add this to your `init.vim` or `init.lua`:
```vim
Plug 'melkyr/learn-vim.nvim'
```After adding the plugin, run the appropriate command for your package manager to install it:
- `:Lazy sync`
- `:PackerSync`
- `:PlugInstall`---
## 🚀 Usage
The primary way to interact with the tutorial is through the `:LearnVim` command.
---
## 🧠 Curriculum (In Progress)
The tutorial covers the following topics:
Module 1: Introduction to VimWhat is Vim?
Modal Editing
Normal Mode
Insert Mode (i)
Command-line Mode (:)
Saving (:w) and Quitting (:q, :wq, :q!)Module 2: Basic Movements
Character Movements (h, j, k, l)
Word Movements (w, b, e)
Line Movements (0, ^, $)Module 3: Counts and Repetition
Repeating the Last Change (.)
Undo (u) and Redo ()
Combining Counts with MovementsModule 4: Deletion and Changing
Deleting Text (d)
Changing Text (c)
Deleting Lines (dd)
Changing Lines (cc)
Combining Deletion/Changing with MovementsModule 5: Yanking and Putting
Yanking (Copying) Text (y)
Putting (Pasting) Text (p, P)
Yanking Lines (yy)
Combining Yanking with MovementsModule 6: More Insertion Modes
Insert at Beginning of Line (I)
Append at End of Line (A)
Open Line Below (o)
Open Line Above (O)Module 7: Finding, Searching, and Replacing
Character Finding on a Line (f, F, t, T, ;, ,)
Basic Searching (/, ?, n, N)
Combining Counts with Find/Search
Simple Find and Replace (:s)
Search Highlighting (:set hlsearch, :nohlsearch)Module 8: Command-line Mode and Registers
Introduction to Command-line Mode (:)
Ranges with Commands (:1,5, :.,$, :%, :g/pattern/)
Introduction to Registers (", named registers a-z)
Special Registers (", 0, %, #, :, /, .)
The Black Hole Register (_)
The Selection and Clipboard Registers (*, +)
Testing System Clipboard IntegrationModule 9: Advanced Editing and Navigation
Multiline Visual Editing (V, )
Repeating Multiline Actions (.)
Matching Braces/Brackets/Parentheses (%)
Applying Actions with % (e.g., d%, c%, y%)Module 10: Macros
Recording Macros (q)
Playing Back Macros (@, counts with @)
Macros for Repetitive Editing (Parts 1-6, with various languages)Module 11: Final Test
Mixed exercises testing skills from previous modules, using various programming languages.
Congratulatory message and ASCII art.Module 12: Buffers, Windows, and Tabs
Introduction to Buffers, Windows, and Tabs
Navigating Buffers (:ls, :bnext, :bprev, :buffer, :bd)
Splitting Windows (:split, :vsplit)
Navigating Windows ( h/j/k/l/w/W/c/q)
Working with Tabs (:tabnew, :tabnext, :tabprev, :tabclose, :tabonly, {number}gt)
Combining Buffers, Windows, and TabsModule 13: Text Objects
Introduction to Text Objects (i, a)
Sentence and Paragraph Objects (s, p)
Delimiter Objects ((), [], {} etc., ", ', ```)
Combining Operators with Text Objects (d, c, y, v)Module 14: Customizing Vim
Your Vim Configuration File (~/.vimrc, init.lua, init.vim, $MYVIMRC)
Setting Options (:set, vim.opt)
Creating Mappings (:map, :noremap, modes)
The Leader Key ()
Using
Exploring Options and Colors (:h, :highlight, vim.api.nvim_set_hl)
Congratulatory message and ASCII art (End of Tutorial)---
## 🤝 Contributing
Contributions are welcome! If you'd like to improve the tutorial, fix bugs, or add new features, please:
1. Fork the repository
2. Create a new branch for your feature or fix
3. Commit your changes with clear messages
4. Push to your fork and submit a pull requestPlease ensure your code follows the existing style and includes relevant tests or documentation.
---
## 📄 License
This project is licensed under the [APACHE 2.0 License](LICENSE).
---
Happy Vimming! 🎉