<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Development on Chris Titus Tech | Tech Content Creator</title><link>https://christitus.com/categories/development/</link><description>Recent content in Development on Chris Titus Tech | Tech Content Creator</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><managingEditor>Chris Titus</managingEditor><webMaster>Chris Titus</webMaster><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://christitus.com/categories/development/index.xml" rel="self" type="application/rss+xml"/><item><title>Neovim the Elite Editor</title><link>https://christitus.com/neovim-the-elite-editor/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Chris Titus</author><guid>https://christitus.com/neovim-the-elite-editor/</guid><description>&lt;p&gt;Most editors today are bloated, slow, and pretending to be IDEs while burning your RAM. Neovim 0.12 goes the other direction: less junk, more control, better speed.&lt;/p&gt;
&lt;p&gt;This is the no-BS breakdown of what changed in my Neovim setup, why I removed the old pieces, and what actually matters in daily use.&lt;/p&gt;
&lt;p&gt;
&lt;img loading="lazy" decoding="async" src="https://christitus.com/images/2026/neovim.webp" alt="neovim" class="img-fluid"&gt;
&lt;/p&gt;
&lt;h2 id="what-changed-in-the-012-upgrade"&gt;What Changed in the 0.12 Upgrade&lt;/h2&gt;
&lt;p&gt;The big architectural change was ripping out the old plugin flow and moving to Neovim&amp;rsquo;s native package path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removed &lt;code&gt;lazy.nvim&lt;/code&gt; from the stack.&lt;/li&gt;
&lt;li&gt;Migrated plugin loading to built-in &lt;code&gt;vim.pack.add(...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cut back external Treesitter management and used Neovim 0.12 built-in behavior first.&lt;/li&gt;
&lt;li&gt;Kept one focused Treesitter UI addon (&lt;code&gt;nvim-treesitter-context&lt;/code&gt;) for sticky context lines.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="why-this-matters"&gt;Why This Matters&lt;/h3&gt;
&lt;p&gt;This is not just &amp;ldquo;new syntax.&amp;rdquo; It is a real maintenance win:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fewer moving parts at startup.&lt;/li&gt;
&lt;li&gt;Native APIs instead of plugin-specific abstractions.&lt;/li&gt;
&lt;li&gt;Easier debugging because package flow is visible and explicit.&lt;/li&gt;
&lt;li&gt;Cleaner upgrades for future Neovim releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-new-design-philosophy"&gt;The New Design Philosophy&lt;/h2&gt;
&lt;p&gt;This config is structured like a real project, not a spaghetti pile:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init.lua&lt;/code&gt; handles global options and startup behavior.&lt;/li&gt;
&lt;li&gt;Plugin responsibilities are split by concern (&lt;code&gt;lsp.lua&lt;/code&gt;, &lt;code&gt;ui.lua&lt;/code&gt;, &lt;code&gt;completion.lua&lt;/code&gt;, etc).&lt;/li&gt;
&lt;li&gt;Keymaps are centralized and predictable.&lt;/li&gt;
&lt;li&gt;Linux and Windows dependency scripts fix missing tools fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is opinionated, fast, and resilient.&lt;/p&gt;
&lt;h2 id="feature-highlights"&gt;Feature Highlights&lt;/h2&gt;
&lt;h3 id="1-modern-navigation-and-search"&gt;1) Modern Navigation and Search&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;snacks.nvim&lt;/code&gt; runs project/file/symbol/grep workflows with a fast picker experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Smart file picking&lt;/li&gt;
&lt;li&gt;Live grep&lt;/li&gt;
&lt;li&gt;Project switching&lt;/li&gt;
&lt;li&gt;Diagnostics search&lt;/li&gt;
&lt;li&gt;Explorer tree + status column enhancements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img loading="lazy" decoding="async" src="https://christitus.com/images/2026/explorer-snacks.webp" alt="explorer-snacks" class="img-fluid"&gt;
&lt;/p&gt;
&lt;p&gt;If you bounce between repos all day, this is a massive quality-of-life upgrade.&lt;/p&gt;
&lt;h3 id="2-lsp-that-feels-native"&gt;2) LSP That Feels Native&lt;/h3&gt;
&lt;p&gt;The LSP stack uses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvim-lspconfig&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mason.nvim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mason-tool-installer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fidget.nvim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;conform.nvim&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why this stack works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto-provisioning of language tools&lt;/li&gt;
&lt;li&gt;Clean per-server config&lt;/li&gt;
&lt;li&gt;Fast formatting workflow&lt;/li&gt;
&lt;li&gt;Better diagnostics defaults and symbols&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It behaves like a serious IDE without turning into one of those slow, opaque monsters.&lt;/p&gt;
&lt;h3 id="3-completion--ai-that-do-not-fight-each-other"&gt;3) Completion + AI That Do Not Fight Each Other&lt;/h3&gt;
&lt;p&gt;Completion is built around &lt;code&gt;blink.cmp&lt;/code&gt; and &lt;code&gt;LuaSnip&lt;/code&gt;, with GitHub Copilot integrated as a completion source:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blink.cmp&lt;/code&gt; as core engine&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blink-cmp-copilot&lt;/code&gt; for AI suggestions in the same completion flow&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CopilotChat&lt;/code&gt; for interactive prompts and model switching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This avoids the classic popup wars where completion systems fight each other.&lt;/p&gt;
&lt;h3 id="4-ui-that-is-clean-not-bloated"&gt;4) UI That Is Clean, Not Bloated&lt;/h3&gt;
&lt;p&gt;Core UI stack includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bufferline.nvim&lt;/code&gt; for tab-like buffers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;which-key.nvim&lt;/code&gt; for discoverability&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trouble.nvim&lt;/code&gt; + &lt;code&gt;aerial.nvim&lt;/code&gt; for code structure and diagnostics&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oil.nvim&lt;/code&gt; for file-system editing inside Neovim&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toggleterm.nvim&lt;/code&gt; for terminal workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything here has a job. No filler, no random plugin bloat.&lt;/p&gt;
&lt;h3 id="5-editing-and-content-workflows"&gt;5) Editing and Content Workflows&lt;/h3&gt;
&lt;p&gt;This setup is not only for code. It also handles writing and content production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown linting with &lt;code&gt;markdownlint-cli2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Image paste pipeline with automatic WebP conversion&lt;/li&gt;
&lt;li&gt;TODO highlighting&lt;/li&gt;
&lt;li&gt;Multi-cursor editing&lt;/li&gt;
&lt;li&gt;Undo tree visualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For content creators and technical writing, these are huge time savers.&lt;/p&gt;
&lt;h2 id="before-vs-after-012-direction"&gt;Before vs After (0.12 Direction)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plugin Management&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lazy.nvim&lt;/code&gt; lifecycle&lt;/td&gt;
&lt;td&gt;Native &lt;code&gt;vim.pack.add(...)&lt;/code&gt; flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Treesitter Strategy&lt;/td&gt;
&lt;td&gt;Heavier external management&lt;/td&gt;
&lt;td&gt;Built-in Treesitter first, targeted extras only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config Structure&lt;/td&gt;
&lt;td&gt;More centralized complexity&lt;/td&gt;
&lt;td&gt;Concern-based modular plugin files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debuggability&lt;/td&gt;
&lt;td&gt;Plugin-manager indirection&lt;/td&gt;
&lt;td&gt;Direct, native, inspectable startup path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade Path&lt;/td&gt;
&lt;td&gt;Plugin compatibility friction&lt;/td&gt;
&lt;td&gt;Closer alignment with Neovim core APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/ChrisTitusTech/neovim ~/.config/nvim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.config/nvim
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If dependencies are missing, run the repair script for your platform:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash lin-depend.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.\&lt;/span&gt;&lt;span class="nb"&gt;win-depend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ps1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="who-this-setup-is-for"&gt;Who This Setup Is For&lt;/h2&gt;
&lt;p&gt;Use this setup if you want:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code-like discoverability with terminal speed&lt;/li&gt;
&lt;li&gt;Strong Lua customization&lt;/li&gt;
&lt;li&gt;Native Neovim 0.12 direction instead of legacy glue&lt;/li&gt;
&lt;li&gt;AI-assisted coding without UI clutter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skip this if you want a forever hands-off setup. This is for people who care about control, speed, and clarity.&lt;/p&gt;
&lt;h2 id="final-thoughts"&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Neovim 0.12 is a maturity milestone. The point is not swapping one trendy plugin manager for another. The point is reducing complexity by leaning on core Neovim features and adding only plugins that pull their weight.&lt;/p&gt;
&lt;p&gt;That is exactly what this project does now: fewer hacks, better defaults, and a tighter editing loop.&lt;/p&gt;
&lt;p&gt;The official Project is at &lt;a href="https://github.com/ChrisTitusTech/neovim"&gt;https://github.com/ChrisTitusTech/neovim&lt;/a&gt; and the README has detailed installation and troubleshooting steps.&lt;/p&gt;
&lt;h2 id="walkthrough-video"&gt;Walkthrough Video&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NYSYiiqk8SY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;</description></item></channel></rss>