<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Personal Neovim Setup on Development using Neovim</title><link>https://shaaf.dev/nvim/</link><description>Recent content in Personal Neovim Setup on Development using Neovim</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://shaaf.dev/nvim/index.xml" rel="self" type="application/rss+xml"/><item><title>Installation</title><link>https://shaaf.dev/nvim/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/install/</guid><description>&lt;h1 id="how-to-install"&gt;How to Install&lt;a class="anchor" href="#how-to-install"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before starting, ensure you have the following installed:&lt;/p&gt;
&lt;h3 id="required-all-users"&gt;Required (All Users)&lt;a class="anchor" href="#required-all-users"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://neovim.io/doc/install/"&gt;Neovim&lt;/a&gt; v0.11+ (earlier versions may work but are untested)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt; - for plugin management&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BurntSushi/ripgrep"&gt;ripgrep (rg)&lt;/a&gt; - for Telescope file searching&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sharkdp/fd"&gt;fd&lt;/a&gt; - for Telescope extended file finding capabilities&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.nerdfonts.com/"&gt;Nerd Font&lt;/a&gt; installed and configured in your terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="language-specific"&gt;Language-Specific&lt;a class="anchor" href="#language-specific"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;For Java Development:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JDK 11 or later - &lt;a href="https://sdkman.io/install/"&gt;SDKMan&lt;/a&gt; is recommended for Java installation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For Rust Development:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rustup.rs/"&gt;Rust toolchain&lt;/a&gt; - Install via &lt;code&gt;rustup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;rust-analyzer - Will be auto-installed via Mason on first use&lt;/li&gt;
&lt;li&gt;codelldb - Will be auto-installed via Mason for debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="first-time-setup"&gt;First Time Setup&lt;a class="anchor" href="#first-time-setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Clone this configuration to your Neovim config directory:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/sshaaf/neovim.git ~/.config/nvim&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;Open Neovim for the first time:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nvim&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;Lazy.nvim will automatically:&lt;/p&gt;</description></item><item><title>Getting Started</title><link>https://shaaf.dev/nvim/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/getting-started/</guid><description>&lt;h1 id="getting-started"&gt;Getting Started&lt;a class="anchor" href="#getting-started"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Welcome! This guide will help you get started with Java and Rust development in Neovim.&lt;/p&gt;
&lt;h3 id="just-want-to-start-coding"&gt;Just Want to Start Coding?&lt;a class="anchor" href="#just-want-to-start-coding"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Basic workflow:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open project: &lt;code&gt;nvim .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;File explorer: &lt;code&gt;&amp;lt;Space&amp;gt;ne&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Find files: &lt;code&gt;&amp;lt;Space&amp;gt;fp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Auto-complete: Just start typing!&lt;/li&gt;
&lt;li&gt;Go to definition: &lt;code&gt;gd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run tests: &lt;code&gt;&amp;lt;Space&amp;gt;jt&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Read more:&lt;/strong&gt; &lt;a href="https://shaaf.dev/nvim/quick-reference/"&gt;Quick Reference&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="first-time-with-neovim-with-java"&gt;First time with Neovim with Java?&lt;a class="anchor" href="#first-time-with-neovim-with-java"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The tutorial covers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setting up Java projects&lt;/li&gt;
&lt;li&gt;Writing code with auto-completion&lt;/li&gt;
&lt;li&gt;Navigating codebases&lt;/li&gt;
&lt;li&gt;Debugging applications&lt;/li&gt;
&lt;li&gt;Running tests&lt;/li&gt;
&lt;li&gt;Real-world workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://shaaf.dev/nvim/tutorial/"&gt;&lt;strong&gt;Tutorial →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Cheatsheet</title><link>https://shaaf.dev/nvim/cheatsheet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/cheatsheet/</guid><description>&lt;h1 id="neovim4j-complete-cheatsheet"&gt;Neovim4J Complete Cheatsheet&lt;a class="anchor" href="#neovim4j-complete-cheatsheet"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Leader key:&lt;/strong&gt; &lt;code&gt;&amp;lt;Space&amp;gt;&lt;/code&gt; (Space bar)&lt;/p&gt;
&lt;h2 id="quick-help-access"&gt;Quick Help Access&lt;a class="anchor" href="#quick-help-access"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you forget a keybinding, use any of these methods:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;&lt;/code&gt; (wait 500ms)&lt;/td&gt;
 &lt;td&gt;Show all keybindings automatically&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show all keybindings (which-key popup)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;&amp;lt;Space&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show all keybindings (which-key popup)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ck&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle persistent keymaps sidebar (right panel)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;cs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open searchable cheatsheet (Telescope)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="vim-essentials"&gt;Vim Essentials&lt;a class="anchor" href="#vim-essentials"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="modes"&gt;Modes&lt;a class="anchor" href="#modes"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Normal mode (exit any mode)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insert mode (before cursor)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insert mode (after cursor)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;I&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insert mode (start of line)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;A&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insert mode (end of line)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;v&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Visual mode (character selection)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;V&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Visual line mode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Visual block mode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Command mode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="basic-navigation"&gt;Basic Navigation&lt;a class="anchor" href="#basic-navigation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move left&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;j&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move down&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move up&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move right&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to next word&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to previous word&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to end of word&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to start of line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to first non-blank character&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;$&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to end of line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to top of file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;G&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to bottom of file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;{&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to previous paragraph&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to next paragraph&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;%&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jump to matching bracket&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Scroll down half page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-u&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Scroll up half page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Scroll down full page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-b&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Scroll up full page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="basic-editing"&gt;Basic Editing&lt;a class="anchor" href="#basic-editing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insert before cursor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Insert after cursor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;o&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open new line below&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;O&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open new line above&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete character (no copy)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yank (copy) line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Paste after cursor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Paste before cursor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Undo&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Redo&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Repeat last change&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;~&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle case&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Indent line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Unindent line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;==&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Auto-indent line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="search--replace"&gt;Search &amp;amp; Replace&lt;a class="anchor" href="#search--replace"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/pattern&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Search forward&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;?pattern&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Search backward&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;n&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Next match&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;N&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Previous match&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Search word under cursor (forward)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Search word under cursor (backward)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;nh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Clear search highlights&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:s/old/new/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Replace first occurrence in line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:s/old/new/g&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Replace all in line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:%s/old/new/g&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Replace all in file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:%s/old/new/gc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Replace all with confirmation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="file-operations"&gt;File Operations&lt;a class="anchor" href="#file-operations"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:w&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Save file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:w filename&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Save as filename&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:q&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Quit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:q!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Quit without saving&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:wq&lt;/code&gt; or &lt;code&gt;:x&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Save and quit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:qa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Quit all windows&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:wa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Save all files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:e filename&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Edit file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:bd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="file-explorer-nvim-tree"&gt;File Explorer (nvim-tree)&lt;a class="anchor" href="#file-explorer-nvim-tree"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="opening-file-explorer"&gt;Opening File Explorer&lt;a class="anchor" href="#opening-file-explorer"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ne&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle file explorer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;nf&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle file explorer on current file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;nc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Collapse file explorer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;nr&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Refresh file explorer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="inside-file-explorer"&gt;Inside File Explorer&lt;a class="anchor" href="#inside-file-explorer"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Enter&lt;/code&gt; or &lt;code&gt;o&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Create new file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Rename file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cut file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Copy file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Paste file/folder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;R&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Refresh&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle hidden files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close explorer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show help&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open in vertical split&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-x&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open in horizontal split&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-t&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open in new tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="file-finding-telescope"&gt;File Finding (Telescope)&lt;a class="anchor" href="#file-finding-telescope"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ff&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Find files in current directory&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;fp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Find files (same as ff)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;fr&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Find recent files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;fs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Live grep (search in files)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;fw&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Find word under cursor&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ct&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Change colorscheme/theme (with live preview)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="inside-telescope"&gt;Inside Telescope&lt;a class="anchor" href="#inside-telescope"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-j&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move to next result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move to previous result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-n&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Create new file from prompt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-q&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Send selected to quickfix list&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Enter&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Select item&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close Telescope&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="lsp--code-navigation"&gt;LSP &amp;amp; Code Navigation&lt;a class="anchor" href="#lsp--code-navigation"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="go-to-navigation"&gt;Go To Navigation&lt;a class="anchor" href="#go-to-navigation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to definition&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gD&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to declaration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gi&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to implementation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to type definition&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gr&lt;/code&gt; or &lt;code&gt;gR&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Find references&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;K&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show hover documentation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="code-actions--refactoring"&gt;Code Actions &amp;amp; Refactoring&lt;a class="anchor" href="#code-actions--refactoring"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ca&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show code actions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;rn&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Rename symbol&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;rs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Restart LSP server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="diagnostics-errors--warnings"&gt;Diagnostics (Errors &amp;amp; Warnings)&lt;a class="anchor" href="#diagnostics-errors--warnings"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;D&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show all diagnostics in buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show diagnostic on current line&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;]d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to next diagnostic&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[d&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to previous diagnostic&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="autocompletion-nvim-cmp"&gt;Autocompletion (nvim-cmp)&lt;a class="anchor" href="#autocompletion-nvim-cmp"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-Space&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Trigger completion manually&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-j&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Next completion item&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Previous completion item&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; (Enter)&lt;/td&gt;
 &lt;td&gt;Accept completion&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-e&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close completion menu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="window-management"&gt;Window Management&lt;a class="anchor" href="#window-management"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="window-splits"&gt;Window Splits&lt;a class="anchor" href="#window-splits"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;sv&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Split window vertically&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;sh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Split window horizontally&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;se&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Make splits equal size&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;sx&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close current split&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="window-navigation"&gt;Window Navigation&lt;a class="anchor" href="#window-navigation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;h&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move cursor to left window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;j&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move cursor to bottom window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;k&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move cursor to top window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;l&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move cursor to right window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;w&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Cycle through windows&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;h/j/k/l&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Move to left/down/up/right window&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="window-resizing"&gt;Window Resizing&lt;a class="anchor" href="#window-resizing"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;+&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Increase height&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;-&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Decrease height&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Increase width&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Decrease width&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-w&amp;gt;=&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Make all equal size&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="tab-management"&gt;Tab Management&lt;a class="anchor" href="#tab-management"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;to&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open new tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;tx&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close current tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;tn&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to next tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;tp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to previous tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;tf&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open current buffer in new tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Next tab (Vim default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gT&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Previous tab (Vim default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1gt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to tab 1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2gt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to tab 2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="buffer-management"&gt;Buffer Management&lt;a class="anchor" href="#buffer-management"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Next buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;S-Tab&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Previous buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:bn&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Next buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:bp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Previous buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:bd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Close/delete buffer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:ls&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;List all buffers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:b&amp;lt;number&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to buffer number&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;:b &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Go to buffer by name (partial match)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="clipboard-operations"&gt;Clipboard Operations&lt;a class="anchor" href="#clipboard-operations"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-c&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Copy to system clipboard (visual mode)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;+y&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yank to system clipboard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;+p&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Paste from system clipboard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;*y&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Yank to selection clipboard (Linux)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;*p&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Paste from selection clipboard (Linux)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="git-integration-lazygit"&gt;Git Integration (Lazygit)&lt;a class="anchor" href="#git-integration-lazygit"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;gg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open Lazygit TUI&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="inside-lazygit"&gt;Inside Lazygit&lt;a class="anchor" href="#inside-lazygit"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Space&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stage/unstage file&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stage all files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Commit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;P&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Push&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Pull&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Next tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Previous tab&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Quit&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show help&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="terminal"&gt;Terminal&lt;a class="anchor" href="#terminal"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-7&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle floating terminal&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;C-\&amp;gt;&amp;lt;C-n&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Exit terminal mode to normal mode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;i&lt;/code&gt; or &lt;code&gt;a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Enter terminal mode&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="ai-assistant-codecompanion-with-ollama"&gt;AI Assistant (CodeCompanion with Ollama)&lt;a class="anchor" href="#ai-assistant-codecompanion-with-ollama"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ac&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open AI chat&lt;/td&gt;
 &lt;td&gt;Normal/Visual&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ae&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Edit selection with AI&lt;/td&gt;
 &lt;td&gt;Visual&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ax&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Explain code&lt;/td&gt;
 &lt;td&gt;Visual&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;aa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show AI actions menu&lt;/td&gt;
 &lt;td&gt;Normal/Visual&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;at&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle AI chat window&lt;/td&gt;
 &lt;td&gt;Normal&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ai-chat-commands"&gt;AI Chat Commands&lt;a class="anchor" href="#ai-chat-commands"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Inside the AI chat, you can use:&lt;/p&gt;</description></item><item><title>Quick Reference</title><link>https://shaaf.dev/nvim/quick-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/quick-reference/</guid><description>&lt;h1 id="development-quick-reference"&gt;Development Quick Reference&lt;a class="anchor" href="#development-quick-reference"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="quick-access-to-keybindings"&gt;Quick Access to Keybindings&lt;a class="anchor" href="#quick-access-to-keybindings"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t remember a keybinding?&lt;/strong&gt; Multiple ways to get help:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Key&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;&lt;/code&gt; (wait)&lt;/td&gt;
 &lt;td&gt;Show all keybindings automatically (which-key popup)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show all keybindings (which-key popup)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;&amp;lt;Space&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Show all keybindings (which-key popup)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ck&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Toggle keymaps sidebar (persistent right panel)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Space&amp;gt;cs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Open cheatsheet (searchable via Telescope)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The keymaps sidebar (&lt;code&gt;&amp;lt;Space&amp;gt;ck&lt;/code&gt;) provides a persistent view of all your shortcuts on the right side of the screen. Press &lt;code&gt;q&lt;/code&gt; to close it.&lt;/p&gt;</description></item><item><title>Plugin Dependencies</title><link>https://shaaf.dev/nvim/plugins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/plugins/</guid><description>&lt;h1 id="plugin-dependencies"&gt;Plugin Dependencies&lt;a class="anchor" href="#plugin-dependencies"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page lists all the plugins that power this Neovim configuration, including their versions and descriptions.&lt;/p&gt;
&lt;h2 id="core-infrastructure"&gt;Core Infrastructure&lt;a class="anchor" href="#core-infrastructure"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="lazynvim"&gt;lazy.nvim&lt;a class="anchor" href="#lazynvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 306a05526ada86a7b30af95c5cc81ffba93fef97&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Modern plugin manager for Neovim with lazy loading support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/folke/lazy.nvim"&gt;folke/lazy.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="plenarynvim"&gt;plenary.nvim&lt;a class="anchor" href="#plenarynvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: b9fd5226c2f76c951fc8ed5923d85e4de065e509&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Lua utility library used by many Neovim plugins&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/nvim-lua/plenary.nvim"&gt;nvim-lua/plenary.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nvim-web-devicons"&gt;nvim-web-devicons&lt;a class="anchor" href="#nvim-web-devicons"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 803353450c374192393f5387b6a0176d0972b848&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: File type icons for Neovim&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/nvim-tree/nvim-web-devicons"&gt;nvim-tree/nvim-web-devicons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lsp--language-support"&gt;LSP &amp;amp; Language Support&lt;a class="anchor" href="#lsp--language-support"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="nvim-lspconfig"&gt;nvim-lspconfig&lt;a class="anchor" href="#nvim-lspconfig"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 92ee7d42320edfbb81f3cad851314ab197fa324a&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Quickstart configurations for Neovim LSP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/neovim/nvim-lspconfig"&gt;neovim/nvim-lspconfig&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="masonnvim"&gt;mason.nvim&lt;a class="anchor" href="#masonnvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 44d1e90e1f66e077268191e3ee9d2ac97cc18e65&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Portable package manager for LSP servers, DAP servers, linters, and formatters&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/williamboman/mason.nvim"&gt;williamboman/mason.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mason-lspconfignvim"&gt;mason-lspconfig.nvim&lt;a class="anchor" href="#mason-lspconfignvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 80c0130c5f16b551865a69e832f1feadeedb5fbe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Extension to mason.nvim that bridges mason with lspconfig&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/williamboman/mason-lspconfig.nvim"&gt;williamboman/mason-lspconfig.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nvim-jdtls"&gt;nvim-jdtls&lt;a class="anchor" href="#nvim-jdtls"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: f73731b543f5971e0da9665eb1d7ceffe1fde71f&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Extensions for the built-in Language Server Protocol support for eclipse.jdt.ls (Java language server)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/mfussenegger/nvim-jdtls"&gt;mfussenegger/nvim-jdtls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="rustaceanvim"&gt;rustaceanvim&lt;a class="anchor" href="#rustaceanvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: ^5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Advanced Rust language support with rust-analyzer integration, code actions, and debugging&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/mrcjkb/rustaceanvim"&gt;mrcjkb/rustaceanvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cratesnvim"&gt;crates.nvim&lt;a class="anchor" href="#cratesnvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: LSP support for Cargo.toml with completion, version checking, and inline documentation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/saecki/crates.nvim"&gt;saecki/crates.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="neodevnvim"&gt;neodev.nvim&lt;a class="anchor" href="#neodevnvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 46aa467dca16cf3dfe27098042402066d2ae242d&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Neovim Lua development with type checking and documentation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/folke/neodev.nvim"&gt;folke/neodev.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nvim-lsp-file-operations"&gt;nvim-lsp-file-operations&lt;a class="anchor" href="#nvim-lsp-file-operations"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: b9c795d3973e8eec22706af14959bc60c579e771&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Neovim plugin that adds support for file operations using built-in LSP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/antosha417/nvim-lsp-file-operations"&gt;antosha417/nvim-lsp-file-operations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="code-completion"&gt;Code Completion&lt;a class="anchor" href="#code-completion"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="nvim-cmp"&gt;nvim-cmp&lt;a class="anchor" href="#nvim-cmp"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 85bbfad83f804f11688d1ab9486b459e699292d6&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Auto-completion plugin for Neovim&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/hrsh7th/nvim-cmp"&gt;hrsh7th/nvim-cmp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cmp-nvim-lsp"&gt;cmp-nvim-lsp&lt;a class="anchor" href="#cmp-nvim-lsp"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: cbc7b02bb99fae35cb42f514762b89b5126651ef&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: nvim-cmp source for Neovim&amp;rsquo;s built-in LSP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/hrsh7th/cmp-nvim-lsp"&gt;hrsh7th/cmp-nvim-lsp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cmp-buffer"&gt;cmp-buffer&lt;a class="anchor" href="#cmp-buffer"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: b74fab3656eea9de20a9b8116afa3cfc4ec09657&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: nvim-cmp source for buffer words&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/hrsh7th/cmp-buffer"&gt;hrsh7th/cmp-buffer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cmp-path"&gt;cmp-path&lt;a class="anchor" href="#cmp-path"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: c642487086dbd9a93160e1679a1327be111cbc25&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: nvim-cmp source for filesystem paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/hrsh7th/cmp-path"&gt;hrsh7th/cmp-path&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cmp_luasnip"&gt;cmp_luasnip&lt;a class="anchor" href="#cmp_luasnip"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 98d9cb5c2c38532bd9bdb481067b20fea8f32e90&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: nvim-cmp source for LuaSnip snippets&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/saadparwaiz1/cmp_luasnip"&gt;saadparwaiz1/cmp_luasnip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="lspkindnvim"&gt;lspkind.nvim&lt;a class="anchor" href="#lspkindnvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 53374a2dbcb959f1d0d5d3cf6c47c4b029151c6e&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: VSCode-like pictograms for Neovim LSP completion items&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/onsails/lspkind.nvim"&gt;onsails/lspkind.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="luasnip"&gt;LuaSnip&lt;a class="anchor" href="#luasnip"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 5a1e39223db9a0498024a77b8441169d260c8c25&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Snippet engine for Neovim written in Lua&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/L3MON4D3/LuaSnip"&gt;L3MON4D3/LuaSnip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="friendly-snippets"&gt;friendly-snippets&lt;a class="anchor" href="#friendly-snippets"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 572f5660cf05f8cd8834e096d7b4c921ba18e175&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Collection of pre-configured snippets for different languages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/rafamadriz/friendly-snippets"&gt;rafamadriz/friendly-snippets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="code-navigation--search"&gt;Code Navigation &amp;amp; Search&lt;a class="anchor" href="#code-navigation--search"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="telescopenvim"&gt;telescope.nvim&lt;a class="anchor" href="#telescopenvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: a0bbec21143c7bc5f8bb02e0005fa0b982edc026 (branch: 0.1.x)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Highly extendable fuzzy finder over lists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/nvim-telescope/telescope.nvim"&gt;nvim-telescope/telescope.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="telescope-fzf-nativenvim"&gt;telescope-fzf-native.nvim&lt;a class="anchor" href="#telescope-fzf-nativenvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 6fea601bd2b694c6f2ae08a6c6fab14930c60e2c&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: FZF sorter for Telescope written in C for better performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/nvim-telescope/telescope-fzf-native.nvim"&gt;nvim-telescope/telescope-fzf-native.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nvim-treesitter"&gt;nvim-treesitter&lt;a class="anchor" href="#nvim-treesitter"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 42fc28ba918343ebfd5565147a42a26580579482&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Neovim Treesitter configurations and abstraction layer for syntax parsing and highlighting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter"&gt;nvim-treesitter/nvim-treesitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="troublenvim"&gt;trouble.nvim&lt;a class="anchor" href="#troublenvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: bd67efe408d4816e25e8491cc5ad4088e708a69a&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Pretty list for showing diagnostics, references, quickfix and location lists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/folke/trouble.nvim"&gt;folke/trouble.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="editing-enhancements"&gt;Editing Enhancements&lt;a class="anchor" href="#editing-enhancements"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="nvim-autopairs"&gt;nvim-autopairs&lt;a class="anchor" href="#nvim-autopairs"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: c2a0dd0d931d0fb07665e1fedb1ea688da3b80b4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Autopairs plugin for Neovim that auto-closes brackets and quotes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/windwp/nvim-autopairs"&gt;windwp/nvim-autopairs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="nvim-surround"&gt;nvim-surround&lt;a class="anchor" href="#nvim-surround"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 1098d7b3c34adcfa7feb3289ee434529abd4afd1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Add/change/delete surrounding delimiter pairs with ease&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/kylechui/nvim-surround"&gt;kylechui/nvim-surround&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="indent-blanklinenvim"&gt;indent-blankline.nvim&lt;a class="anchor" href="#indent-blanklinenvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 005b56001b2cb30bfa61b7986bc50657816ba4ba&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Indentation guides for Neovim&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/lukas-reineke/indent-blankline.nvim"&gt;lukas-reineke/indent-blankline.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="todo-commentsnvim"&gt;todo-comments.nvim&lt;a class="anchor" href="#todo-commentsnvim"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 31e3c38ce9b29781e4422fc0322eb0a21f4e8668&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt;: Highlight and search for TODO, FIXME, and other comment annotations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/folke/todo-comments.nvim"&gt;folke/todo-comments.nvim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ui--appearance"&gt;UI &amp;amp; Appearance&lt;a class="anchor" href="#ui--appearance"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="color-schemes"&gt;Color Schemes&lt;a class="anchor" href="#color-schemes"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This configuration includes 8 color schemes with a Telescope-based theme switcher (&lt;code&gt;&amp;lt;Space&amp;gt;ct&lt;/code&gt;) that provides live preview and persistence.&lt;/p&gt;</description></item><item><title>Rust Development Guide</title><link>https://shaaf.dev/nvim/rust-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/rust-guide/</guid><description>&lt;h1 id="rust-development-guide"&gt;Rust Development Guide&lt;a class="anchor" href="#rust-development-guide"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This guide covers Rust-specific features and workflows in this Neovim configuration.&lt;/p&gt;
&lt;h2 id="overview"&gt;Overview&lt;a class="anchor" href="#overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Rust setup is based on &lt;a href="https://www.lazyvim.org/extras/lang/rust"&gt;LazyVim&amp;rsquo;s Rust extras&lt;/a&gt; and includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;rustaceanvim&lt;/strong&gt; - Advanced Rust language support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crates.nvim&lt;/strong&gt; - Cargo.toml dependency management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rust-analyzer&lt;/strong&gt; - Powerful LSP for Rust&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;codelldb&lt;/strong&gt; - Debugger for Rust applications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;neotest&lt;/strong&gt; - Test runner integration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-started-with-rust"&gt;Getting Started with Rust&lt;a class="anchor" href="#getting-started-with-rust"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="prerequisites"&gt;Prerequisites&lt;a class="anchor" href="#prerequisites"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Make sure you have Rust installed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Install Rust via rustup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl --proto &lt;span style="color:#e6db74"&gt;&amp;#39;=https&amp;#39;&lt;/span&gt; --tlsv1.2 -sSf https://sh.rustup.rs | sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Verify installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rustc --version
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cargo --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="creating-a-new-rust-project"&gt;Creating a New Rust Project&lt;a class="anchor" href="#creating-a-new-rust-project"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create a new binary project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cargo new my-project
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd my-project
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Or create a library&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cargo new --lib my-library&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then open the project in Neovim:&lt;/p&gt;</description></item><item><title>Lesson 1: Project Setup</title><link>https://shaaf.dev/nvim/tutorial/01-project-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/01-project-setup/</guid><description>&lt;h1 id="lesson-1-project-setup"&gt;Lesson 1: Project Setup&lt;a class="anchor" href="#lesson-1-project-setup"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn how to create and open a Java project in Neovim.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a simple Java project structure&lt;/li&gt;
&lt;li&gt;Create Maven and Gradle projects&lt;/li&gt;
&lt;li&gt;Open projects in Neovim&lt;/li&gt;
&lt;li&gt;Navigate the file explorer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="creating-a-simple-java-project"&gt;Creating a Simple Java Project&lt;a class="anchor" href="#creating-a-simple-java-project"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s start by creating a basic Java project structure manually:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create project directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p ~/java-projects/hello-neovim
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ~/java-projects/hello-neovim
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create standard Java directory structure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p src/main/java/com/example
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p src/test/java/com/example&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This creates the standard Maven/Gradle directory layout.&lt;/p&gt;</description></item><item><title>Lesson 2: Hello World</title><link>https://shaaf.dev/nvim/tutorial/02-hello-world/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/02-hello-world/</guid><description>&lt;h1 id="lesson-2-hello-world"&gt;Lesson 2: Hello World&lt;a class="anchor" href="#lesson-2-hello-world"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll write your first Java program in Neovim and learn the basics of editing with Vim motions.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write a simple Java program&lt;/li&gt;
&lt;li&gt;Understand Vim modes (Normal, Insert, Visual)&lt;/li&gt;
&lt;li&gt;Use basic editing commands&lt;/li&gt;
&lt;li&gt;Save and run your program&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vim-modes-quick-reference"&gt;Vim Modes Quick Reference&lt;a class="anchor" href="#vim-modes-quick-reference"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Neovim has different modes for different tasks:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;th&gt;How to Enter&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Normal&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Navigate and execute commands&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;Esc&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Insert&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Type and edit text&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;o&lt;/code&gt;, etc.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Visual&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Select text&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;v&lt;/code&gt;, &lt;code&gt;V&lt;/code&gt;, &lt;code&gt;Ctrl-v&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Run commands&lt;/td&gt;
 &lt;td&gt;Press &lt;code&gt;:&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: You&amp;rsquo;ll spend most time in Normal mode, briefly entering Insert mode to type.&lt;/p&gt;</description></item><item><title>Lesson 3: Code Completion</title><link>https://shaaf.dev/nvim/tutorial/03-code-completion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/03-code-completion/</guid><description>&lt;h1 id="lesson-3-code-completion"&gt;Lesson 3: Code Completion&lt;a class="anchor" href="#lesson-3-code-completion"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to use IntelliSense-style auto-completion powered by the Java Language Server (jdtls).&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use auto-completion while typing&lt;/li&gt;
&lt;li&gt;Navigate completion suggestions&lt;/li&gt;
&lt;li&gt;Accept and dismiss completions&lt;/li&gt;
&lt;li&gt;Understand completion sources (LSP, snippets, buffer)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-auto-completion-works"&gt;How Auto-Completion Works&lt;a class="anchor" href="#how-auto-completion-works"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Neovim4j uses &lt;code&gt;nvim-cmp&lt;/code&gt; for completion, which combines multiple sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LSP (jdtls)&lt;/strong&gt; - Intelligent Java completions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snippets&lt;/strong&gt; - Common code patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buffer&lt;/strong&gt; - Words from open files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Path&lt;/strong&gt; - File paths&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="basic-completion-usage"&gt;Basic Completion Usage&lt;a class="anchor" href="#basic-completion-usage"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="auto-trigger"&gt;Auto-Trigger&lt;a class="anchor" href="#auto-trigger"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Start typing, and completions appear automatically:&lt;/p&gt;</description></item><item><title>Lesson 4: Creating Classes</title><link>https://shaaf.dev/nvim/tutorial/04-creating-classes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/04-creating-classes/</guid><description>&lt;h1 id="lesson-4-creating-classes"&gt;Lesson 4: Creating Classes&lt;a class="anchor" href="#lesson-4-creating-classes"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn different ways to create Java classes and use code actions to generate boilerplate code.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create classes using the file explorer&lt;/li&gt;
&lt;li&gt;Use fuzzy finder to create files quickly&lt;/li&gt;
&lt;li&gt;Generate constructors, getters, and setters&lt;/li&gt;
&lt;li&gt;Use code actions effectively&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="method-1-file-explorer"&gt;Method 1: File Explorer&lt;a class="anchor" href="#method-1-file-explorer"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The traditional way using nvim-tree:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open file explorer: &lt;code&gt;&amp;lt;Space&amp;gt;ne&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Navigate to &lt;code&gt;src/main/java/com/example/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;a&lt;/code&gt; (add file)&lt;/li&gt;
&lt;li&gt;Type filename: &lt;code&gt;Person.java&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The file opens, ready for editing.&lt;/p&gt;</description></item><item><title>Lesson 5: Managing Packages</title><link>https://shaaf.dev/nvim/tutorial/05-managing-packages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/05-managing-packages/</guid><description>&lt;h1 id="lesson-5-managing-packages"&gt;Lesson 5: Managing Packages&lt;a class="anchor" href="#lesson-5-managing-packages"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn how to organize Java code using packages and navigate package structures efficiently.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand Java package structure&lt;/li&gt;
&lt;li&gt;Create new packages&lt;/li&gt;
&lt;li&gt;Move classes between packages&lt;/li&gt;
&lt;li&gt;Navigate package hierarchies&lt;/li&gt;
&lt;li&gt;Handle package declarations and imports&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="understanding-java-packages"&gt;Understanding Java Packages&lt;a class="anchor" href="#understanding-java-packages"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Packages are Java&amp;rsquo;s way of organizing related classes. They:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prevent naming conflicts&lt;/li&gt;
&lt;li&gt;Control access with package-private visibility&lt;/li&gt;
&lt;li&gt;Make code easier to find and maintain&lt;/li&gt;
&lt;li&gt;Map to directory structure&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="package-naming-conventions"&gt;Package Naming Conventions&lt;a class="anchor" href="#package-naming-conventions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Standard format: &lt;code&gt;com.company.project.module&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Lesson 6: Buffer Navigation</title><link>https://shaaf.dev/nvim/tutorial/06-buffer-navigation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/06-buffer-navigation/</guid><description>&lt;h1 id="lesson-6-buffer-navigation"&gt;Lesson 6: Buffer Navigation&lt;a class="anchor" href="#lesson-6-buffer-navigation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to efficiently work with multiple files (buffers) open simultaneously in Neovim.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand buffers, windows, and tabs&lt;/li&gt;
&lt;li&gt;Switch between open files quickly&lt;/li&gt;
&lt;li&gt;Split windows horizontally and vertically&lt;/li&gt;
&lt;li&gt;Navigate between splits&lt;/li&gt;
&lt;li&gt;Manage buffer lifecycle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="understanding-buffers-windows-and-tabs"&gt;Understanding Buffers, Windows, and Tabs&lt;a class="anchor" href="#understanding-buffers-windows-and-tabs"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="buffers"&gt;Buffers&lt;a class="anchor" href="#buffers"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;buffer&lt;/strong&gt; is an in-memory representation of a file. When you open a file, it loads into a buffer.&lt;/p&gt;</description></item><item><title>Lesson 7: Code Navigation</title><link>https://shaaf.dev/nvim/tutorial/07-code-navigation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/07-code-navigation/</guid><description>&lt;h1 id="lesson-7-code-navigation"&gt;Lesson 7: Code Navigation&lt;a class="anchor" href="#lesson-7-code-navigation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to navigate large Java codebases efficiently using LSP-powered features.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jump to definitions and declarations&lt;/li&gt;
&lt;li&gt;Find all references to a symbol&lt;/li&gt;
&lt;li&gt;Navigate type hierarchies&lt;/li&gt;
&lt;li&gt;Search for symbols across the project&lt;/li&gt;
&lt;li&gt;Use the jump list effectively&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="core-navigation-commands"&gt;Core Navigation Commands&lt;a class="anchor" href="#core-navigation-commands"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="go-to-definition"&gt;Go to Definition&lt;a class="anchor" href="#go-to-definition"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Place cursor on a class, method, or variable and press:&lt;/p&gt;</description></item><item><title>Lesson 8: Debugging</title><link>https://shaaf.dev/nvim/tutorial/08-debugging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/08-debugging/</guid><description>&lt;h1 id="lesson-8-debugging"&gt;Lesson 8: Debugging&lt;a class="anchor" href="#lesson-8-debugging"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to debug Java applications using Neovim&amp;rsquo;s DAP (Debug Adapter Protocol) integration.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set and remove breakpoints&lt;/li&gt;
&lt;li&gt;Start debug sessions&lt;/li&gt;
&lt;li&gt;Step through code&lt;/li&gt;
&lt;li&gt;Inspect variables&lt;/li&gt;
&lt;li&gt;Evaluate expressions&lt;/li&gt;
&lt;li&gt;Use the debug REPL&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-is-dap"&gt;What is DAP?&lt;a class="anchor" href="#what-is-dap"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DAP (Debug Adapter Protocol) is like LSP but for debugging. Neovim4j uses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvim-dap&lt;/code&gt; - Debug adapter client&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvim-dap-ui&lt;/code&gt; - Beautiful debug UI&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvim-jdtls&lt;/code&gt; - Java debug adapter integration for jdtls&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="debug-ui-overview"&gt;Debug UI Overview&lt;a class="anchor" href="#debug-ui-overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you start debugging, the UI shows:&lt;/p&gt;</description></item><item><title>Lesson 9: Testing</title><link>https://shaaf.dev/nvim/tutorial/09-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/09-testing/</guid><description>&lt;h1 id="lesson-9-testing"&gt;Lesson 9: Testing&lt;a class="anchor" href="#lesson-9-testing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this lesson, you&amp;rsquo;ll learn to write, run, and manage JUnit tests directly from Neovim.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write JUnit tests&lt;/li&gt;
&lt;li&gt;Run individual tests&lt;/li&gt;
&lt;li&gt;Run test classes and test suites&lt;/li&gt;
&lt;li&gt;Interpret test results&lt;/li&gt;
&lt;li&gt;Debug failing tests&lt;/li&gt;
&lt;li&gt;Use test-driven development workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="junit-basics"&gt;JUnit Basics&lt;a class="anchor" href="#junit-basics"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="test-structure"&gt;Test Structure&lt;a class="anchor" href="#test-structure"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A typical JUnit test class:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; com.example;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.junit.Test;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import static&lt;/span&gt; org.junit.Assert.*;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;CalculatorTest&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;testAdd&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Calculator calc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Calculator();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; calc.&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(2, 3);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; assertEquals(5, result);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;testDivide&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Calculator calc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Calculator();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; calc.&lt;span style="color:#a6e22e"&gt;divide&lt;/span&gt;(10, 2);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; assertEquals(5, result);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Test&lt;/span&gt;(expected &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ArithmeticException.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;testDivideByZero&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Calculator calc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Calculator();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; calc.&lt;span style="color:#a6e22e"&gt;divide&lt;/span&gt;(10, 0); &lt;span style="color:#75715e"&gt;// Should throw exception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="common-assertions"&gt;Common Assertions&lt;a class="anchor" href="#common-assertions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertEquals(expected, actual);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertTrue(condition);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertFalse(condition);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertNull(object);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertNotNull(object);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertSame(expected, actual); &lt;span style="color:#75715e"&gt;// Same reference&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assertArrayEquals(expectedArray, actualArray);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="running-tests-in-neovim"&gt;Running Tests in Neovim&lt;a class="anchor" href="#running-tests-in-neovim"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="run-tests-via-build-tool"&gt;Run Tests via Build Tool&lt;a class="anchor" href="#run-tests-via-build-tool"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most reliable way to run tests is using your build tool directly:&lt;/p&gt;</description></item><item><title>Lesson 10: Common Workflows</title><link>https://shaaf.dev/nvim/tutorial/10-common-workflows/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://shaaf.dev/nvim/tutorial/10-common-workflows/</guid><description>&lt;h1 id="lesson-10-common-workflows"&gt;Lesson 10: Common Workflows&lt;a class="anchor" href="#lesson-10-common-workflows"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In this final lesson, you&amp;rsquo;ll learn real-world workflows that combine everything you&amp;rsquo;ve learned into productive development patterns.&lt;/p&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;a class="anchor" href="#learning-objectives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By the end of this lesson, you&amp;rsquo;ll be able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implement new features efficiently&lt;/li&gt;
&lt;li&gt;Fix bugs systematically&lt;/li&gt;
&lt;li&gt;Refactor code safely&lt;/li&gt;
&lt;li&gt;Work with existing codebases&lt;/li&gt;
&lt;li&gt;Optimize your development workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="workflow-1-implementing-a-new-feature"&gt;Workflow 1: Implementing a New Feature&lt;a class="anchor" href="#workflow-1-implementing-a-new-feature"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="scenario-add-user-authentication"&gt;Scenario: Add User Authentication&lt;a class="anchor" href="#scenario-add-user-authentication"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s implement a complete authentication feature.&lt;/p&gt;
&lt;h3 id="step-1-plan-the-implementation"&gt;Step 1: Plan the Implementation&lt;a class="anchor" href="#step-1-plan-the-implementation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Create a TODO list (use comments or &lt;code&gt;:TodoWrite&lt;/code&gt;):&lt;/p&gt;</description></item></channel></rss>