<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: taku25</title>
    <description>The latest articles on Forem by taku25 (@taku25).</description>
    <link>https://forem.com/taku25</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3499503%2F5d838b97-000f-4bd8-8075-54e85875de00.jpeg</url>
      <title>Forem: taku25</title>
      <link>https://forem.com/taku25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/taku25"/>
    <language>en</language>
    <item>
      <title>UNL.nvim Update: Shifting from LSP to DB-based Completion &amp; Preparing for UE6/Verse Unreal Engine development in Neovim.</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 06 Apr 2026 08:25:30 +0000</pubDate>
      <link>https://forem.com/taku25/unlnvim-update-shifting-from-lsp-to-db-based-completion-preparing-for-ue6verse-unreal-engine-3lf7</link>
      <guid>https://forem.com/taku25/unlnvim-update-shifting-from-lsp-to-db-based-completion-preparing-for-ue6verse-unreal-engine-3lf7</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;I've been a bit quiet lately due to my day job, but I’m excited to share a long-awaited update! This release brings a fundamental architectural shift to the &lt;strong&gt;UNL.nvim&lt;/strong&gt; ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 The Big Change: Moving from LSP to DB-based Completion
&lt;/h2&gt;

&lt;p&gt;To solve performance bottlenecks and remove the strict dependency on &lt;code&gt;compile_commands.json&lt;/code&gt;, I’ve completely migrated the completion engine to a &lt;strong&gt;DB (Database) managed system&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt;: It offers much faster, more flexible completion without being tethered to a static &lt;code&gt;compile_commands.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current Status&lt;/strong&gt;: While there might be some rough edges, it works perfectly for my personal daily development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqadl46aruoxdb3o0bgve.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqadl46aruoxdb3o0bgve.gif" alt="auto complete from db" width="760" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ New Feature: Module Creation (&lt;code&gt;UDEV create_module&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;This feature was born from a community Pull Request. It significantly streamlines the process of adding new modules to your UE project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge thanks to &lt;a href="https://github.com/notfound4" rel="noopener noreferrer"&gt;notfound4&lt;/a&gt; for this amazing contribution!!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Bug Fixes
&lt;/h2&gt;

&lt;p&gt;Improved stability with several fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resolved server-side memory leaks.&lt;/li&gt;
&lt;li&gt;Fixed bugs in the File Watcher.&lt;/li&gt;
&lt;li&gt;Various minor stability improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Looking Ahead: UE6 and Verse Language Support
&lt;/h2&gt;

&lt;p&gt;With the whispers of &lt;strong&gt;Unreal Engine 6&lt;/strong&gt; growing louder, I’ve started working on &lt;a href="https://github.com/taku25/tree-sitter-verse" rel="noopener noreferrer"&gt;tree-sitter-verse&lt;/a&gt;, built from the language specs up.&lt;/p&gt;

&lt;p&gt;The migration to a DB-based system is a strategic move to eventually provide &lt;strong&gt;official Verse language support&lt;/strong&gt;. I’ll be refining the command structure and DB schema while we wait for the dawn of UE6.&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>unrealengine</category>
      <category>cpp</category>
      <category>verse</category>
    </item>
    <item>
      <title>[Neovim x UE] Optimization via Rust Server &amp; .uasset Binary Parsing (Weekly Update)(2026/02/16)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 16 Feb 2026 13:42:58 +0000</pubDate>
      <link>https://forem.com/taku25/neovim-x-ue-optimization-via-rust-server-uasset-binary-parsing-weekly-update20260216-1688</link>
      <guid>https://forem.com/taku25/neovim-x-ue-optimization-via-rust-server-uasset-binary-parsing-weekly-update20260216-1688</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
Here is this week's update!&lt;br&gt;
Unlike previous posts, I don't have flashy screenshots of new UI features to show off today. Instead, this update focuses on significant under-the-hood optimizations and foundational improvements using Unl-server (Rust).&lt;br&gt;
Here are the main changes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Full Migration of Syntax Parsing to the Server
I have moved all syntax parsing logic—previously handled by Neovim (Lua) using Tree-sitter or Regex—entirely to the Unl-server side.

&lt;ul&gt;
&lt;li&gt;Removed Dependencies: This removes the Tree-sitter dependency from the plugin suite (except for syntax highlighting). If you primarily use LSP for syntax highlighting, you no longer need to install treesitter-unreal-cpp.&lt;/li&gt;
&lt;li&gt;Improved Accuracy: Running Tree-sitter on the server side (Rust) allows for faster and more accurate syntax analysis than ever before.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;.uasset Parsing: Moving to Binary Analysis
I have completely overhauled the method for parsing .uasset files, moving from simple string searches (using ripgrep) to direct binary parsing via Rust.

&lt;ul&gt;
&lt;li&gt;Supported Versions: UE 5.3 - 5.7&lt;/li&gt;
&lt;li&gt;Higher Precision: This significantly improves the accuracy of retrieving Children and References. Specifically, UFUNCTION references, which were previously difficult to capture, can now be retrieved reliably.
⚠️ Note:
Currently, this analysis data is not persisted to the database. Therefore, there may be a short wait time after startup while the parsing completes. Please keep this in mind.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Enhanced Picker API Extensibility
I have extended the Picker functionality to allow for more flexibility. You can now easily add custom pickers beyond the defaults provided.
By setting an arbitrary function in the picker model, you can create and integrate your own custom pickers.
For detailed specifications and usage, please refer to the README below:
&lt;a href="https://github.com/taku25/UNL.nvim#-unified-picker-api" rel="noopener noreferrer"&gt;Unified Picker API - UNL.nvim README&lt;/a&gt;
Summary: Performance Improvements
By offloading these heavy tasks to the server (Rust), the CPU load on Neovim itself has decreased, resulting in a much smoother and more comfortable editing environment.
Please update to the latest version and enjoy a lighter, faster Neovim x UE development experience!
&lt;a href="https://github.com/taku25/unrealdev.nvim" rel="noopener noreferrer"&gt;taku25/unrealdev.nvim&lt;/a&gt;
If you like this project, giving the repository a ⭐️ (Star) would mean the world to me (and make me do a little happy dance)!
Happy Neovim x UE life!!&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>gamedev</category>
      <category>neovim</category>
    </item>
    <item>
      <title>Making Neovim a Lightweight Unreal Engine IDE: Implementing Blazing Fast Completion without LSP</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 09 Feb 2026 06:24:21 +0000</pubDate>
      <link>https://forem.com/taku25/making-neovim-a-lightweight-unreal-engine-ide-implementing-blazing-fast-completion-without-lsp-4b5c</link>
      <guid>https://forem.com/taku25/making-neovim-a-lightweight-unreal-engine-ide-implementing-blazing-fast-completion-without-lsp-4b5c</guid>
      <description>&lt;p&gt;Hi everyone! I’m the creator of the &lt;code&gt;UnrealDev.nvim&lt;/code&gt; suite, a project dedicated to turning Neovim into the ultimate IDE for Unreal Engine (UE) development.&lt;/p&gt;

&lt;p&gt;After migrating our core logic to the Rust-based &lt;strong&gt;"unl-server"&lt;/strong&gt;, I've shifted focus to a major milestone: &lt;strong&gt;Improving the built-in completion engine.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠 The "Why": Moving Beyond LSP
&lt;/h3&gt;

&lt;p&gt;For a long time, I relied on LSPs like &lt;code&gt;clangd&lt;/code&gt;. However, UE development—especially on Windows—poses unique challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LSP Overhead:&lt;/strong&gt; Waiting for indexers and compilation in massive UE projects can be frustratingly slow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Clang Database" Headache:&lt;/strong&gt; Generating and maintaining &lt;code&gt;.compile_commands.json&lt;/code&gt; or &lt;code&gt;.rsp&lt;/code&gt; files often conflicts with standard UBT (Unreal Build Tool) workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I love Neovim for its speed. It felt wrong that "heavy" IDEs like Rider were sometimes more responsive than my Neovim setup. So, I decided to build a &lt;strong&gt;database-driven completion engine&lt;/strong&gt; that doesn't rely on a full LSP stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Performance Showcase
&lt;/h3&gt;

&lt;p&gt;Take a look at the custom completion in action:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7vg6drv8kuhorde1ccw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7vg6drv8kuhorde1ccw.gif" alt="complete" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is powered entirely by &lt;code&gt;unl-server&lt;/code&gt; and our custom DB. It currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard variable declarations.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;auto&lt;/code&gt; keyword type resolution.&lt;/li&gt;
&lt;li&gt;UE-specific templates like &lt;code&gt;TObjectPtr&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Return values of functions (e.g., Getters/Setters) — *&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚙️ How it works
&lt;/h3&gt;

&lt;p&gt;When completion is triggered, the current buffer and cursor position are sent to &lt;code&gt;unl-server&lt;/code&gt;. The server infers the class context and returns candidates via &lt;strong&gt;MessagePack-RPC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’m currently using &lt;a href="https://github.com/taku25/blink-cmp-unreal" rel="noopener noreferrer"&gt;taku25/blink-cmp-unreal&lt;/a&gt;, but since the core logic resides on the server, it can be adapted to other completion engines easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❤️ Growing Community
&lt;/h3&gt;

&lt;p&gt;I’m thrilled to see the community growing! Huge thanks to &lt;a href="https://github.com/notfound4" rel="noopener noreferrer"&gt;notfound4&lt;/a&gt; for the amazing contributions and PRs lately.&lt;/p&gt;

&lt;p&gt;Your stars and contributions keep this project moving forward. Let’s make Neovim the best place to build Unreal Engine games!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;taku25/UnrealDev.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>rust</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Unrealdev.nvim Update: Migration to Rust Server and MessagePack-RPC for High-Performance UE Development 2026/02/02</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Tue, 03 Feb 2026 01:14:49 +0000</pubDate>
      <link>https://forem.com/taku25/unrealdevnvim-update-migration-to-rust-server-and-messagepack-rpc-for-high-performance-ue-2eo6</link>
      <guid>https://forem.com/taku25/unrealdevnvim-update-migration-to-rust-server-and-messagepack-rpc-for-high-performance-ue-2eo6</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
Hello everyone, I’m taku25, the developer of unrealdev.nvim.&lt;br&gt;
After two intense weeks of development, I’m excited to announce the largest architectural overhaul in the history of this project.&lt;br&gt;
I have introduced several breaking changes regarding cache formats in the past, but this update is a complete "heart transplant" for the plugin's core. While I apologize for the disruption, this new foundation is designed for long-term stability—I don't expect any more major architectural shifts for the foreseeable future.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Core: Moving to "unl-server" (Rust)
The biggest change is the migration of all heavy-lifting tasks—including SQLite database management and C++ parsing via tree-sitter—to a dedicated external server written in Rust, called unl-server.
Previously, UEP.nvim handled the DB directly. Now, unl.nvim acts as the primary gateway, retrieving data directly from the Rust server using MessagePack-RPC. By using a binary format instead of plain text, we’ve laid the groundwork for extremely low-latency communication.
unl.nvim, which started as a simple base library, has now truly become the "heart" of the unrealdev.nvim ecosystem.&lt;/li&gt;
&lt;li&gt;Command Changes &amp;amp; Auto-Server Start
With the shift in responsibility, server management has moved from UEP to UNL.

&lt;ul&gt;
&lt;li&gt;Command Migration:&lt;/li&gt;
&lt;li&gt;UEP refresh/start/stop → Deprecated&lt;/li&gt;
&lt;li&gt;UNL refresh/start/stop → New
To improve the developer experience (DX), I’ve implemented an Auto-Server Start feature (auto_server_start, enabled by default). When you launch Neovim or cd into a directory containing a .uproject file, the Rust server will automatically spin up in the background. No more manual setup is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Real-time Project Monitoring
The server does more than just fetch data; it now includes a file system watcher. It monitors your project files in real-time, ensuring that the symbol database is always up-to-date as you code. You no longer need to worry about stale indices while navigating your C++ classes.
What's Next?
While core commands have been debugged, I'm aware there are still minor bugs and areas where performance can be further optimized. Starting this week, I will focus on:

&lt;ul&gt;
&lt;li&gt;System Stability and Performance Tuning.&lt;/li&gt;
&lt;li&gt;Developing a Custom Completion Engine that leverages our internal database instead of relying solely on external LSPs.
Thank you for your continued support as we build the ultimate Unreal Engine development environment for Neovim!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>gamedev</category>
      <category>neovim</category>
    </item>
    <item>
      <title>[UnrealDev.nvim] Enhanced IDE Integration &amp; Custom Actions (Weekly Update 2026/01/24)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Sat, 24 Jan 2026 05:24:54 +0000</pubDate>
      <link>https://forem.com/taku25/unrealdevnvim-enhanced-ide-integration-custom-actions-weekly-update-20260124-45pc</link>
      <guid>https://forem.com/taku25/unrealdevnvim-enhanced-ide-integration-custom-actions-weekly-update-20260124-45pc</guid>
      <description>&lt;p&gt;Hello everyone! I am developing a suite of Neovim plugins for Unreal Engine development called &lt;a href="https://www.google.com/search?q=https://github.com/taku25/unrealdev.nvim" rel="noopener noreferrer"&gt;taku25/unrealdev.nvim&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are the updates for this week! The main focus is on &lt;strong&gt;strengthening bi-directional integration with IDEs&lt;/strong&gt; (like Rider) and enhancing &lt;strong&gt;UNX.nvim&lt;/strong&gt; features.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. UEP.nvim: Enhanced IDE Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Auto-start Neovim Server
&lt;/h3&gt;

&lt;p&gt;I've updated &lt;code&gt;UEP start&lt;/code&gt; to automatically launch the Neovim server.&lt;br&gt;
This allows you to seamlessly &lt;strong&gt;open files in your currently running Neovim instance directly from your IDE&lt;/strong&gt; (Rider, Visual Studio, etc.).&lt;/p&gt;

&lt;p&gt;You can configure the server name in the &lt;code&gt;UEP.nvim&lt;/code&gt; options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"UEP_nvim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;-- You can change the name here&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note for Windows Users:&lt;/strong&gt;&lt;br&gt;
On Windows environments, &lt;code&gt;.pipe&lt;/code&gt; is automatically appended to the specified server name. Please keep this in mind when connecting from external tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Setup Example: Open in Neovim from JetBrains Rider
&lt;/h3&gt;

&lt;p&gt;By adding an "External Tool" in Rider, you can jump to Neovim via the right-click menu.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Tools&lt;/strong&gt; -&amp;gt; &lt;strong&gt;External Tools&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add a new tool with the following settings:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Program&lt;/strong&gt;: &lt;code&gt;nvim.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arguments&lt;/strong&gt;: &lt;code&gt;--server \\.\pipe\UEP_nvim --remote-send "&amp;lt;C-\&amp;gt;&amp;lt;C-n&amp;gt;:e $FilePath$&amp;lt;CR&amp;gt;:$LineNumber$&amp;lt;CR&amp;gt;zz"&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0498z809zltgata0566.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0498z809zltgata0566.png" alt="rider setting" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does this argument do?&lt;/strong&gt;&lt;br&gt;
It sends a command to Neovim to: "Exit Insert Mode -&amp;gt; Open the file -&amp;gt; Go to the specific line -&amp;gt; Center the screen."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Insert your screenshot of Rider settings here)&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  2. UEP.nvim: Open IDE from Neovim (&lt;code&gt;open_ide&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvim9t2b6fyk23eev7r16.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvim9t2b6fyk23eev7r16.gif" alt="open ide" width="2172" height="824"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conversely, I added a feature to open the file you are currently editing in Neovim directly in your IDE using &lt;code&gt;UEP open_ide&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This command is fully configurable in your config. It defaults to Rider, but you can easily set it up for Visual Studio or VS Code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;ide&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;-- For Rider (Default)&lt;/span&gt;
  &lt;span class="n"&gt;open_command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"rider --line {line} \"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 

  &lt;span class="c1"&gt;-- Example for VS Code&lt;/span&gt;
  &lt;span class="c1"&gt;-- open_command = "code -g {file}:{line}",&lt;/span&gt;

  &lt;span class="c1"&gt;-- Example for Visual Studio (Adjust the path to devenv as needed)&lt;/span&gt;
  &lt;span class="c1"&gt;-- open_command = "devenv /edit {file} /command \"Edit.GoTo {line}\"", &lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. UNX.nvim: Project Tree &amp;amp; Diff Enhancements
&lt;/h2&gt;

&lt;p&gt;I also added some convenient features to &lt;code&gt;UNX.nvim&lt;/code&gt;, which handles the UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open in IDE from Project Tree
&lt;/h3&gt;

&lt;p&gt;You can now press &lt;code&gt;&amp;lt;C-o&amp;gt;&lt;/code&gt; on a file in the project tree to open it in your configured IDE (using the &lt;code&gt;open_ide&lt;/code&gt; setting mentioned above).&lt;/p&gt;

&lt;h3&gt;
  
  
  Diff View Support
&lt;/h3&gt;

&lt;p&gt;Pressing &lt;code&gt;D&lt;/code&gt; on the project tree now displays the standard Neovim VCS diff. This is great for quickly checking changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom User Functions (Keymaps)
&lt;/h3&gt;

&lt;p&gt;If the standard diff is hard to read, or if you want to run specific commands on a file, you can now define custom functions in your keymaps.&lt;/p&gt;

&lt;p&gt;Define them in your &lt;code&gt;config&lt;/code&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;keymaps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;custom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;-- Key = Function to execute&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;p"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="c1"&gt;-- 'node' contains file info for the current line&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Selected file path: "&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;-- You can also define it as a named action (for future extensions)&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;C-z&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Custom action for: "&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"My custom notification"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;That’s it for this week's updates.&lt;/p&gt;

&lt;p&gt;For next week and beyond, I plan to work on &lt;strong&gt;expanding the Database (DB) features&lt;/strong&gt; and implementing detailed analysis using &lt;strong&gt;Rust + Tree-sitter&lt;/strong&gt;. My goal is to create a robust completion system that understands the specific structures of Unreal Engine, without relying solely on LSP.&lt;/p&gt;

&lt;p&gt;Although it is still experimental, I have already started introducing a Rust program called &lt;code&gt;scanner&lt;/code&gt; into &lt;strong&gt;UNL.nvim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I will continue to add more features to make Unreal Engine development in Neovim the best experience possible!&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Bringing Neovim Closer to Rider: Auto-Generation &amp; Tree Enhancements (Weekly Update)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Sat, 17 Jan 2026 08:34:26 +0000</pubDate>
      <link>https://forem.com/taku25/bringing-neovim-closer-to-rider-auto-generation-tree-enhancements-weekly-update-1hmn</link>
      <guid>https://forem.com/taku25/bringing-neovim-closer-to-rider-auto-generation-tree-enhancements-weekly-update-1hmn</guid>
      <description>&lt;p&gt;Here are the updates for this week.&lt;br&gt;
Along with fixing some persistent database-related bugs, I've focused on implementing convenient features found in JetBrains Rider—specifically &lt;strong&gt;"Create Definition"&lt;/strong&gt; and &lt;strong&gt;"Create Implementation"&lt;/strong&gt;—into &lt;strong&gt;UCM.nvim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neovim is getting one step closer to a full IDE experience for Unreal Engine development!&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 UCM.nvim: Seamless Definitions &amp;amp; Implementations
&lt;/h3&gt;

&lt;p&gt;I’ve automated the boilerplate code writing that usually requires manual switching between header and source files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;UCM create_impl&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Executing this command on a function definition in a header file automatically inserts the implementation template into the corresponding source (&lt;code&gt;.cpp&lt;/code&gt;) file.&lt;br&gt;
A key feature is that if the function is marked with &lt;code&gt;override&lt;/code&gt;, it automatically generates the &lt;code&gt;Super::Function()&lt;/code&gt; call as well.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv39kpnf6c22pu4wk2zb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv39kpnf6c22pu4wk2zb.gif" alt="UCM impl" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;UCM create_decl&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
This performs the reverse of &lt;code&gt;create_impl&lt;/code&gt;. Executing it on a function implementation in the source file adds the definition to the header. It also supports signature updates, such as changes to arguments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d8g7oxuj1w36ozrqg1f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d8g7oxuj1w36ozrqg1f.gif" alt="UCM decl" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UCM add_struct&lt;/code&gt;&lt;/strong&gt;
While classes are typically managed as "one class per file," there are often times when you want to quickly add a struct to a header.
This command provides a wizard where you can simply select a name and parent struct to insert the appropriate &lt;code&gt;USTRUCT&lt;/code&gt; definition right at your cursor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fmebhwmueigyulmazmn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fmebhwmueigyulmazmn.gif" alt="IUCM add" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Refactoring New File Creation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UCM new_class&lt;/code&gt;&lt;/strong&gt;: Dedicated command for creating new class files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UCM new_struct&lt;/code&gt;&lt;/strong&gt;: Dedicated command for creating new struct files.&lt;/li&gt;
&lt;li&gt;I refactored the internal logic of &lt;code&gt;UCM new&lt;/code&gt; to properly handle both classes and structs independently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌲 UNX.nvim: Reducing File Tree Friction
&lt;/h3&gt;

&lt;p&gt;I've improved the usability of the file tree to reduce friction during navigation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tree State Persistence&lt;/strong&gt;
Unreal Engine project hierarchies tend to be very deep. Reopening folders every time I restarted Neovim was tedious, so I added the ability to save and restore the tree's open/close state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UNX focus&lt;/code&gt;&lt;/strong&gt;
I implemented a feature to focus the file tree on the currently edited file.
This is extremely useful when you want to create a new file in the same directory as the one you are currently working on—you can instantly locate your position in the tree.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 UEP.nvim: Enhanced Navigation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UEP structs&lt;/code&gt;&lt;/strong&gt;
Implemented a feature to display a list of structs and jump directly to their definitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti3vwir6mkd5gt4ppij7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti3vwir6mkd5gt4ppij7.gif" alt="UEP struct" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;That wraps up this week's changes.&lt;br&gt;
With the addition of implementation/definition auto-generation and the struct wizard, I feel that Neovim has reached a level where it can be my &lt;strong&gt;primary battlefield&lt;/strong&gt; for editing code.&lt;/p&gt;

&lt;p&gt;Looking ahead, I'm exploring ways to integrate Neovim with IDEs like Rider.&lt;br&gt;
For example, it would be amazing to instantly open a file hitting a breakpoint in Rider directly in Neovim, or conversely, open the file being edited in Neovim inside Rider. If I can achieve this seamless interaction, I think it will create the ultimate development environment. I'm currently researching the technical feasibility of this workflow.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>gamedev</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Turning Neovim into a UE5 IDE: File Watching &amp; Architecture Shifts (Weekly Update 2026-01-09)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Fri, 09 Jan 2026 04:23:51 +0000</pubDate>
      <link>https://forem.com/taku25/turning-neovim-into-a-ue5-ide-file-watching-architecture-shifts-weekly-update-2026-01-09-30od</link>
      <guid>https://forem.com/taku25/turning-neovim-into-a-ue5-ide-file-watching-architecture-shifts-weekly-update-2026-01-09-30od</guid>
      <description>&lt;p&gt;Happy New Year! 🎉 It's 2026, and I'm kicking off the year with a renewed focus: making Neovim the ultimate IDE for Unreal Engine development.&lt;/p&gt;

&lt;p&gt;Here is this week's progress report. We have some major architectural changes and new features that bring us significantly closer to that "IDE-like" experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Polishing the SQLite Migration 🧹&lt;br&gt;
Following the recent migration to SQLite, I've squashed a number of bugs that popped up. The foundation is now much more stable, ensuring a smoother experience overall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UNX: Ditching the Cache for a Pure File Tree 🌳&lt;br&gt;
Previously, the file tree implementation was heavily tied to unl-neotree, relying on a cached tree structure. This week, I completely overhauled this.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Change: I moved away from the cache-dependent architecture to a pure file tree approach using a custom structure for UNX.&lt;/p&gt;

&lt;p&gt;The Benefit: We no longer rely on stale data. If you add or remove files externally (e.g., via Windows Explorer), the tree can now handle those changes immediately without waiting for a cache rebuild. It only displays the information strictly necessary for UE development, keeping it lightweight.&lt;/p&gt;

&lt;p&gt;New UNX Features:&lt;/p&gt;

&lt;p&gt;N Key (Create File): You can now create simple files directly in the tree!&lt;/p&gt;

&lt;p&gt;Why this matters: Previously, you could only create classes via wizards. Now, if you have a header file and just want to quickly add the corresponding .cpp source, you can simply hit N.&lt;/p&gt;

&lt;p&gt;R Key (Force Refresh): Added the ability to manually force a tree update/redraw.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One Step Closer to an IDE: UEP start 🚀
This is the highlight of the week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My goal is to make Neovim function as a "lightweight IDE" for UE. To achieve this, I implemented UEP start (alias: UDEV start_project), which replaces the old manual UEP refresh workflow.&lt;/p&gt;

&lt;p&gt;How it works: Instead of manually refreshing, you run UEP start. This kicks off a background process that:&lt;/p&gt;

&lt;p&gt;Watches VCS Revisions: Smartly detects git changes.&lt;/p&gt;

&lt;p&gt;Monitors Files with vim.uv: It watches the project folder for any file changes using Neovim's built-in Libuv loop.&lt;/p&gt;

&lt;p&gt;The Result: Changes are detected instantly. The cache updates file-by-file in real-time, meaning commands like UEP files reflect the current state of your project immediately. No more manual toggling!&lt;/p&gt;

&lt;p&gt;Note: If you want to stop the background monitoring, simply run UEP stop (UDEV stop_project).&lt;/p&gt;

&lt;p&gt;That's it for the first update of 2026. I'm excited to keep pushing the boundaries of what Neovim can do for Game Devs this year.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>game</category>
    </item>
    <item>
      <title>UnrealDev.nvim Update: Switching to SQLite for Blazing Fast Performance</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 29 Dec 2025 08:54:58 +0000</pubDate>
      <link>https://forem.com/taku25/unrealdevnvim-update-switching-to-sqlite-for-blazing-fast-performance-42jb</link>
      <guid>https://forem.com/taku25/unrealdevnvim-update-switching-to-sqlite-for-blazing-fast-performance-42jb</guid>
      <description>&lt;p&gt;Just in time for the end of the year, I've released a major update for &lt;code&gt;UnrealDev.nvim&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;Previously, &lt;code&gt;UnrealDev.nvim&lt;/code&gt; (and its core, &lt;code&gt;UEP.nvim&lt;/code&gt;) used JSON files to cache project information. However, for large Unreal Engine projects, the file I/O overhead for reading and writing massive JSON files became a noticeable bottleneck.&lt;/p&gt;

&lt;p&gt;To solve this, I have completely migrated the caching backend to &lt;strong&gt;SQLite&lt;/strong&gt;.&lt;br&gt;
This change significantly improves performance, making file navigation and project analysis faster than ever.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔧 Key Changes &amp;amp; Installation
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. New Dependency: &lt;code&gt;sqlite.lua&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;With this update, the following plugin is now required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/kkharji/sqlite.lua" rel="noopener noreferrer"&gt;kkharji/sqlite.lua&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Important Note for Windows Users:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sqlite.lua&lt;/code&gt; requires &lt;code&gt;sqlite3.dll&lt;/code&gt; to function.&lt;br&gt;
If you install SQLite via package managers like &lt;code&gt;winget&lt;/code&gt;, it might only provide the &lt;code&gt;.exe&lt;/code&gt; without the necessary &lt;code&gt;.dll&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Download the Windows binaries (containing the DLL) directly from the &lt;a href="https://www.sqlite.org/download.html" rel="noopener noreferrer"&gt;SQLite Download Page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Configure the path in your &lt;code&gt;init.lua&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Example: Set path to sqlite3.dll&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqlite_clib_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"C:\\Users\\username\\path\\to\\sqlite3.dll"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  2. Updated &lt;code&gt;:checkhealth&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;I've updated the health check to verify the SQLite status. If everything is set up correctly, you should see something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;UnrealDev&lt;span class="p"&gt;:&lt;/span&gt;                                                                  ✅

UnrealDev Dependencies &lt;span class="p"&gt;~&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Executable &lt;span class="s1"&gt;'fd'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Found &lt;span class="p"&gt;(&lt;/span&gt;File finder&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Executable &lt;span class="s1"&gt;'rg'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Found &lt;span class="p"&gt;(&lt;/span&gt;Ripgrep text searcher&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK UNL&lt;span class="p"&gt;.&lt;/span&gt;nvim&lt;span class="p"&gt;:&lt;/span&gt; Installed &lt;span class="p"&gt;(&lt;/span&gt;Core Library &amp;amp; Utilities&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Plugin &lt;span class="s1"&gt;'kkharji/sqlite.lua'&lt;/span&gt; found&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Path configured&lt;span class="p"&gt;:&lt;/span&gt; C&lt;span class="p"&gt;:&lt;/span&gt;\Users\taku3\AppData\Local\Programs\sqlite\sqlite3&lt;span class="p"&gt;.&lt;/span&gt;dll
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK SQLite &lt;span class="k"&gt;is&lt;/span&gt; working correctly&lt;span class="p"&gt;!&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;In&lt;span class="p"&gt;-&lt;/span&gt;memory DB test passed&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 Command Unification
&lt;/h3&gt;

&lt;p&gt;To streamline the workflow, several specific commands have been deprecated and merged into the main commands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Deprecated:&lt;/strong&gt; &lt;code&gt;:UEP config_files&lt;/code&gt;, &lt;code&gt;:UEP program_files&lt;/code&gt;, &lt;code&gt;:UEP config_grep&lt;/code&gt;, &lt;code&gt;:UEP program_grep&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Merged into:&lt;/strong&gt; &lt;code&gt;:UEP files&lt;/code&gt;, &lt;code&gt;:UEP grep&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The command arguments have been updated to support a new &lt;strong&gt;&lt;code&gt;mode&lt;/code&gt;&lt;/strong&gt; parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;scope&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;deps_flag&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;grep&lt;/span&gt;  &lt;span class="p"&gt;[&lt;/span&gt;scope&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;deps_flag&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now specify the file type using the &lt;code&gt;mode&lt;/code&gt; argument (default is &lt;code&gt;source&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="c"&gt;" Find Config (.ini) files in Runtime modules&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; &lt;span class="k"&gt;runtime&lt;/span&gt; config

&lt;span class="c"&gt;" Find source files for Programs (Tools) within the Game project&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; game programs

&lt;span class="c"&gt;" Find Shader (.usf/.ush) files in the Engine&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; engine shader
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows for flexible filtering by combining scope and mode.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Commands like &lt;code&gt;:UEP module_files&lt;/code&gt; remain separate to keep the argument logic simple for module-specific actions.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>neovim</category>
    </item>
    <item>
      <title>UnrealDev.nvim Weekly Update: Performance Tuning &amp; The Road to SQLite 🚀(2025/12/19)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Thu, 18 Dec 2025 15:03:54 +0000</pubDate>
      <link>https://forem.com/taku25/unrealdevnvim-weekly-update-performance-tuning-the-road-to-sqlite-20251219-17jl</link>
      <guid>https://forem.com/taku25/unrealdevnvim-weekly-update-performance-tuning-the-road-to-sqlite-20251219-17jl</guid>
      <description>&lt;p&gt;Happy Friday, developers! 👋&lt;/p&gt;

&lt;p&gt;This week has been a bit hectic with my day job, so the changelog is shorter than usual. However, I managed to squeeze in some crucial Quality of Life (QoL) improvements and bug fixes that should make your daily Unreal Engine development in Neovim smoother.&lt;/p&gt;

&lt;p&gt;More importantly, I've finally decided on the direction for the next major optimization phase. Let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Performance Improvements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  UNX: Faster Symbols View
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Symbols View&lt;/strong&gt; in UNX (the explorer UI) previously tried to fetch and display the entire parent class inheritance tree by default. While useful, this caused noticeable lag when opening large files in Unreal Engine projects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change:&lt;/strong&gt; To prioritize speed, the parent class tree is now &lt;strong&gt;OFF&lt;/strong&gt; by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Feature:&lt;/strong&gt; You can toggle the parent class information on demand by pressing &lt;code&gt;p&lt;/code&gt; inside the Symbols View.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Note: This keybinding is configurable via &lt;code&gt;config.keymaps.action_toggle_parents&lt;/code&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, the view opens instantly, and you only pay the performance cost when you actually need that deep inheritance context.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ New Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  UNX: Quickly Favorite the Current File
&lt;/h3&gt;

&lt;p&gt;I found myself frequently wanting to add the file I'm currently editing to my Favorites list without having to search for it in the tree or picker.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New Command:&lt;/strong&gt; Added &lt;code&gt;:UNX favorite_current&lt;/code&gt; (and &lt;code&gt;:UDEV favorite_current&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavior:&lt;/strong&gt; This command toggles the favorite status of your active buffer instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UNX Favorites:&lt;/strong&gt; Fixed a bug where the UI wouldn't refresh immediately after adding a file to favorites. It now updates in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UCM Symbols:&lt;/strong&gt; Fixed an issue where jumping to a selected symbol in the Unreal Class Manager (UCM) wasn't working correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🗺️ Roadmap: The Road to SQLite
&lt;/h2&gt;

&lt;p&gt;This is the part I'm most excited about.&lt;/p&gt;

&lt;p&gt;Unreal Engine projects are massive. Parsing thousands of header files and managing class relationships using text-based caches or large JSON files has its limits regarding startup time and memory usage.&lt;/p&gt;

&lt;p&gt;I have decided to migrate the heavy lifting of caching (files, class definitions, inheritance maps) to &lt;strong&gt;SQLite&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Progress so far:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I've started implementing the database layer in &lt;strong&gt;UNL.nvim&lt;/strong&gt; (the core library).&lt;/li&gt;
&lt;li&gt;The goal is to have &lt;code&gt;UEP.nvim&lt;/code&gt; connect to a local SQLite database for blazing-fast lookups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once this is implemented, commands like &lt;code&gt;UEP files&lt;/code&gt;, &lt;code&gt;UEP enums&lt;/code&gt;, and generating inheritance trees should become significantly faster and more robust.&lt;/p&gt;




&lt;p&gt;That's it for this week! Although development might slow down slightly due to work, the migration to SQLite is my top priority for the next major update.&lt;/p&gt;

&lt;p&gt;As always, feedback and contributions are welcome!&lt;/p&gt;

&lt;p&gt;Happy coding! 🎮 vim&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;UnrealDev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>unrealengine</category>
      <category>gamede</category>
    </item>
    <item>
      <title>[UnrealDev.nvim] Weekly Update (Dec 12, 2025): UNX Enhancements &amp; New Project Creation</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Fri, 12 Dec 2025 14:00:21 +0000</pubDate>
      <link>https://forem.com/taku25/unrealdevnvim-weekly-update-dec-12-2025-unx-enhancements-new-project-creation-242g</link>
      <guid>https://forem.com/taku25/unrealdevnvim-weekly-update-dec-12-2025-unx-enhancements-new-project-creation-242g</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;This week, I focused mainly on enhancing &lt;code&gt;UNX.nvim&lt;/code&gt;, cleaning up commands, and adding the ability to access features directly via commands without needing to open the UI (Explorer).&lt;/p&gt;

&lt;h3&gt;
  
  
  1. UNX: Features &amp;amp; Improvements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pending List View &amp;amp; &lt;code&gt;UNX pending_list&lt;/code&gt; Command
&lt;/h4&gt;

&lt;p&gt;I added a feature to display a list of files currently being edited in your VCS (Version Control System). This is incredibly effective when you want quick access to the files you are currently working on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ve4zgndceh6hxn4covv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ve4zgndceh6hxn4covv.png" alt="pending list" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rhsyqcs6f4fl9jg238h.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rhsyqcs6f4fl9jg238h.gif" alt="pending list gif" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Unpushed List View &amp;amp; &lt;code&gt;UNX unpushed_list&lt;/code&gt; Command
&lt;/h4&gt;

&lt;p&gt;This feature is currently for environments using Git (since Perforce pushes immediately upon commit).&lt;br&gt;
When you are stacking small commits for a single task, there are times when you want to see "a list of files modified in this session but not yet pushed." This list allows you to quickly access and navigate to those files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftx58gd7y3w3jbua1ppr8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftx58gd7y3w3jbua1ppr8.gif" alt="unpushed List" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Favorites List View &amp;amp; &lt;code&gt;UNX add_favorites&lt;/code&gt; / &lt;code&gt;UNX favorites_list&lt;/code&gt; Commands
&lt;/h4&gt;

&lt;p&gt;I added a bookmarking function for frequently used files and folders.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To Add:&lt;/strong&gt; Select the target in UNX and press the &lt;code&gt;b&lt;/code&gt; (&lt;strong&gt;b&lt;/strong&gt;ookmark) key, or use the &lt;code&gt;add_favorites&lt;/code&gt; command to select files via a Picker (multiple selections supported).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To Remove:&lt;/strong&gt; Press the &lt;code&gt;b&lt;/code&gt; key again on the target file within the UNX Favorites tree to remove it from the list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xu3co7hp1zfxipo9jl2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xu3co7hp1zfxipo9jl2.gif" alt="favorites" width="1218" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Folder Action: Files Picker
&lt;/h4&gt;

&lt;p&gt;Pressing the &lt;code&gt;F&lt;/code&gt; key on a folder in the UNX tree now opens a picker that allows you to search and select files contained within that folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. UCM: Symbols Command Added
&lt;/h3&gt;

&lt;p&gt;The "symbols list of the currently opened file," which was previously displayed on UNX, has been made independent as a &lt;code&gt;UCM.nvim&lt;/code&gt; command.&lt;br&gt;
Executing the &lt;code&gt;UCM symbols&lt;/code&gt; command allows you to cross-search symbols from both the Header (.h) and Source (.cpp) files via a picker and jump directly to their definitions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfh72cdrezadftrq2hpn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfh72cdrezadftrq2hpn.gif" alt="ucm symbos" width="760" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. UEP: Support for New Project Creation
&lt;/h3&gt;

&lt;p&gt;Previously, the plugins assumed an existing project. Now, the &lt;code&gt;new_project&lt;/code&gt; command enables the creation of new Unreal Engine projects directly from Neovim.&lt;br&gt;
To support this, &lt;code&gt;UNL&lt;/code&gt; (Unreal Launcher)'s &lt;code&gt;find_engine&lt;/code&gt; has been updated internally to search for installed Engine versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ULG: Tabbed Log View
&lt;/h3&gt;

&lt;p&gt;Previously, &lt;code&gt;unreal log&lt;/code&gt; and &lt;code&gt;build log&lt;/code&gt; were displayed using split buffers. To align with UNX's tab support, ULG logs have also been changed to a tab format.&lt;br&gt;
You can switch the display using the &lt;code&gt;Tab&lt;/code&gt; key within the log window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn9g7eh7bo3n280kscke.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn9g7eh7bo3n280kscke.gif" alt="ulg log " width="1218" height="814"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Reflections: Dogfooding in Production
&lt;/h3&gt;

&lt;p&gt;I'm happy to feel that the plugins are reaching a level where they work without issues not only in personal projects but also in massive, real-world work projects.&lt;br&gt;
However, as the project scale increases, I'm starting to feel some performance weight, so I've been thinking a lot about optimization lately.&lt;/p&gt;




&lt;h3&gt;
  
  
  [Tip] For Windows Users using UBT
&lt;/h3&gt;

&lt;p&gt;Here is a note on generating &lt;code&gt;compile_commands.json&lt;/code&gt; using &lt;code&gt;UnrealBuildTool&lt;/code&gt; (UBT) with &lt;code&gt;GenerateClangDatabase&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This command has a quirk where it rewrites &lt;code&gt;.rsp&lt;/code&gt; files that shouldn't need modification. As a result, if you try to run a normal build afterwards, the timestamp update triggers a &lt;strong&gt;Full Rebuild&lt;/strong&gt; (including the Engine), causing massive wait times.&lt;/p&gt;

&lt;p&gt;To avoid this, I recommend specifying the &lt;strong&gt;GameProject's Debug configuration&lt;/strong&gt; when generating &lt;code&gt;compile_commands.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You likely use &lt;code&gt;DebugGame&lt;/code&gt; or &lt;code&gt;Development&lt;/code&gt; configurations for actual development (since the &lt;code&gt;Debug&lt;/code&gt; configuration makes the Engine itself too heavy), but specifying the &lt;code&gt;Debug&lt;/code&gt; configuration solely for command definition generation helps prevent accidental full rebuild accidents.&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>gamedev</category>
      <category>unrealengine</category>
    </item>
    <item>
      <title>Neovim Unreal Engine: P4 Support, Macro Wizards, and Context-Aware Docs! 🚀(2025/12/04)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Thu, 04 Dec 2025 03:16:07 +0000</pubDate>
      <link>https://forem.com/taku25/neovim-x-unreal-engine-p4-support-macro-wizards-and-context-aware-docs-20251204-8jl</link>
      <guid>https://forem.com/taku25/neovim-x-unreal-engine-p4-support-macro-wizards-and-context-aware-docs-20251204-8jl</guid>
      <description>&lt;p&gt;I realize I'm building plugins for a "niche within a niche"—using Neovim for Unreal Engine C++ development. But honestly? It's becoming surprisingly capable.&lt;/p&gt;

&lt;p&gt;This week, I shipped some massive updates to the &lt;strong&gt;UnrealDev.nvim&lt;/strong&gt; ecosystem. From Perforce integration to a wizard for generating &lt;code&gt;UPROPERTY&lt;/code&gt; macros, here is what’s new!&lt;/p&gt;




&lt;h3&gt;
  
  
  📦 1. UnrealDev.nvim
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Health Checks for Peace of Mind&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Added &lt;code&gt;:checkhealth UnrealDev&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;I added a health check command to verify that your Unreal Engine development environment is set up correctly.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;nvim-treesitter&lt;/code&gt; parsers don't always auto-update with plugin managers, things can sometimes get out of sync. If something feels off, just run this command to troubleshoot instantly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvb8oiqlpfd09dxsd9f9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvb8oiqlpfd09dxsd9f9.png" alt="checkhealth" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌲 2. UNX.nvim (Explorer)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Finally... Perforce (P4) Support!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can't talk about Unreal Engine development without mentioning Perforce. It's the industry standard, and until now, UNX only supported Git.&lt;/p&gt;

&lt;p&gt;With this update, &lt;strong&gt;P4 status is now integrated into the file tree!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Status Icons:&lt;/strong&gt; Visualizes P4 states (Add, Edit, etc.) directly in the explorer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Checkout:&lt;/strong&gt; If you try to modify a read-only file, a dialog will pop up asking if you want to check it out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Say goodbye to those annoying "File is read-only" errors! 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivte9i7u8x71zmp4ugyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivte9i7u8x71zmp4ugyc.png" alt="p4 checkout" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ 3. UCM.nvim (Code Actions)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Speeding up Includes &amp;amp; Macros&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  📋 &lt;code&gt;:UCM copy_include[!]&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Tired of manually typing relative paths for &lt;code&gt;#include&lt;/code&gt;? This command calculates the correct include path for a C++ class and copies it to your clipboard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Resolution:&lt;/strong&gt; Run this on &lt;code&gt;MyActor.cpp&lt;/code&gt;, and it generates &lt;code&gt;#include "Actor/MyActor.h"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UCM copy_include&lt;/code&gt;&lt;/strong&gt;: Copies the include path for the &lt;em&gt;current&lt;/em&gt; file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UCM copy_include!&lt;/code&gt;&lt;/strong&gt;: Lets you fuzzy-search for a class name and copies its include path.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ⚡ &lt;code&gt;:UCM specifiers[!]&lt;/code&gt; (The Macro Wizard)
&lt;/h4&gt;

&lt;p&gt;Writing &lt;code&gt;UPROPERTY&lt;/code&gt;, &lt;code&gt;UFUNCTION&lt;/code&gt;, or &lt;code&gt;UCLASS&lt;/code&gt; macros by hand is tedious. This wizard handles it for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Normal Mode (&lt;code&gt;:UCM specifiers&lt;/code&gt;):&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1.  Select the macro type (e.g., `UPROPERTY`).
2.  Multi-select specifiers (e.g., `EditAnywhere`, `BlueprintReadWrite`).
3.  Inserts the full macro `UPROPERTY(EditAnywhere, ...)` at your cursor AND copies it to the clipboard.
4.  **Smart Cursor:** If you pick something like `Category=""`, the cursor automatically jumps between the quotes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Append Mode (&lt;code&gt;:UCM specifiers!&lt;/code&gt; with bang):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perfect for editing existing macros.&lt;/li&gt;
&lt;li&gt;It skips the wrapper and &lt;em&gt;only&lt;/em&gt; inserts the specifiers (e.g., &lt;code&gt;EditAnywhere&lt;/code&gt;) at your cursor position.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5k8bxfrfyms8obibfehc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5k8bxfrfyms8obibfehc.gif" alt="specifiers_1" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu9bjcno43kxrj6p92x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu9bjcno43kxrj6p92x.gif" alt="specifiers_2" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 4. UEP.nvim (Project Provider)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Smarter Navigation &amp;amp; Docs&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  File &amp;amp; Shader Enhancements
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Config/Shaders Visibility:&lt;/strong&gt; Fixed an issue where &lt;code&gt;UEP tree&lt;/code&gt; wasn't showing Config or Shaders directories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual Paths:&lt;/strong&gt; Added support for virtual include paths in &lt;code&gt;.ush&lt;/code&gt; / &lt;code&gt;.usf&lt;/code&gt; files. &lt;code&gt;open_files&lt;/code&gt; can now jump straight to them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UEP shaders[!] [Scope]&lt;/code&gt;:&lt;/strong&gt; A new command to search and open shader files quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  C# Config Navigation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UEP build_cs[!]&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Without &lt;code&gt;!&lt;/code&gt;: Instantly opens &lt;code&gt;Build.cs&lt;/code&gt; for the current module.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;!&lt;/code&gt;: Lists &lt;em&gt;all&lt;/em&gt; &lt;code&gt;Build.cs&lt;/code&gt; files in the project to choose from.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;:UEP target_cs[!]&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Without &lt;code&gt;!&lt;/code&gt;: Lists project &lt;code&gt;Target.cs&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;!&lt;/code&gt;: Includes Engine targets in the search.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  🌐 &lt;code&gt;:UEP web_doc[!]&lt;/code&gt; (Context-Aware Docs)
&lt;/h4&gt;

&lt;p&gt;Opens the official Unreal Engine documentation in your browser. The best part? &lt;strong&gt;It automatically detects your project's UE version&lt;/strong&gt; and opens the correct page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without &lt;code&gt;!&lt;/code&gt;&lt;/strong&gt;: Searches the docs for the word under your cursor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With &lt;code&gt;!&lt;/code&gt;&lt;/strong&gt;: Lets you select a class from your project to open its documentation.

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Note (Experimental): If the plugin can't guess the direct URL, it gracefully falls back to a site search.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh7y7ty5b6ut35lccpiq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh7y7ty5b6ut35lccpiq.gif" alt="web_doc" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This week was all about "Quality of Life" improvements. I focused on fixing those small frictions that made me miss my heavy IDE.&lt;/p&gt;

&lt;p&gt;Honestly, I'm finding myself opening Rider less and less these days. (Maybe I just forgot the Rider shortcuts? 🤔... nah, Neovim is just getting that good!)&lt;/p&gt;

&lt;p&gt;If you have any feature requests or ideas, let me know in the comments or issues. And if you find these plugins useful, a Star ⭐️ on &lt;strong&gt;&lt;a href="https://www.google.com/search?q=https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;UnrealDev.nvim&lt;/a&gt;&lt;/strong&gt; would make my day!&lt;/p&gt;

&lt;p&gt;Happy Hacking! 💻✨&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>unrealengine</category>
      <category>gamedev</category>
      <category>cpp</category>
    </item>
    <item>
      <title>Neovim x Unreal Engine: Visualizing Config Inheritance &amp; Jumping to Super Classes [Weekly Update]</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Fri, 28 Nov 2025 02:18:06 +0000</pubDate>
      <link>https://forem.com/taku25/neovim-x-unreal-engine-visualizing-config-inheritance-jumping-to-super-classes-weekly-update-5cm2</link>
      <guid>https://forem.com/taku25/neovim-x-unreal-engine-visualizing-config-inheritance-jumping-to-super-classes-weekly-update-5cm2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hello! I’m a developer who is frantically building plugins to make Neovim the most comfortable environment for Unreal Engine development.&lt;/p&gt;

&lt;p&gt;My goal is to make Neovim function just like a full-fledged IDE (like Rider or Visual Studio) for UE5.&lt;br&gt;
In this week's update, I've added a feature to instantly visualize the complex "Config (.ini)" hierarchy—a headache for every UE developer—and navigation features to boost coding speed.&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚠ Important: 1. Update &lt;code&gt;tree-sitter-unreal-cpp&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;This step is mandatory to use the new features.&lt;/strong&gt;&lt;br&gt;
I have updated the parser to improve the accuracy of Unreal C++ analysis. However, due to how Treesitter works, you need to manually update the revision number in your configuration.&lt;/p&gt;

&lt;p&gt;For features like &lt;code&gt;AActor&lt;/code&gt; class analysis, the &lt;strong&gt;Symbols View&lt;/strong&gt;, and the new &lt;code&gt;Goto Super&lt;/code&gt; (described below) to work correctly, please overwrite your plugin config with the following settings (The &lt;a href="https://github.com/taku25/UnrealDev.nvim/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt; has also been updated):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
   &lt;span class="s1"&gt;'nvim-treesitter/nvim-treesitter'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;branch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nvim_create_autocmd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'User'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'TSUpdate'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
          &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;parsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'nvim-treesitter.parsers'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="n"&gt;parsers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;install_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="n"&gt;url&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'https://github.com/taku25/tree-sitter-unreal-cpp'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="c1"&gt;-- Please update from the old hash (89f34...) to the one below:&lt;/span&gt;
              &lt;span class="n"&gt;revision&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'67198f1b35e052c6dbd587492ad53168d18a19a8'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="n"&gt;parsers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ushader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;install_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="n"&gt;url&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'https://github.com/taku25/tree-sitter-unreal-shader'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="n"&gt;revision&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'26f0617475bb5d5accb4d55bd4cc5facbca81bbd'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
       &lt;span class="k"&gt;end&lt;/span&gt;
     &lt;span class="p"&gt;})&lt;/span&gt;
     &lt;span class="c1"&gt;-- (Other installation settings...)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. [Killer Feature] Config Explorer: Escape from Config Hell
&lt;/h3&gt;

&lt;p&gt;The Unreal Engine Config (&lt;code&gt;.ini&lt;/code&gt;) system is powerful but incredibly complex.&lt;br&gt;
It starts with &lt;code&gt;Engine/Config/Base.ini&lt;/code&gt;, then &lt;code&gt;Project/Config/DefaultEngine.ini&lt;/code&gt;, overrides by &lt;code&gt;WindowsEngine.ini&lt;/code&gt;, and even further overrides by &lt;code&gt;DeviceProfiles&lt;/code&gt;...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"In the end, what is the actual final value of this parameter?" "Where was it overwritten?"&lt;/strong&gt;&lt;br&gt;
Have you ever gotten lost tracking this down?&lt;/p&gt;

&lt;p&gt;To solve this, I implemented the &lt;strong&gt;Config Explorer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchy View:&lt;/strong&gt; Displays config values relevant to your project in a tree structure organized by platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualizing Inheritance:&lt;/strong&gt; It merges and displays not just &lt;code&gt;Default&lt;/code&gt; settings, but also platform-specific settings (&lt;code&gt;Windows&lt;/code&gt;, &lt;code&gt;Android&lt;/code&gt;, &lt;code&gt;iOS&lt;/code&gt;) and even Device Profiles (like &lt;code&gt;Android_Low&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History Tracking:&lt;/strong&gt; You can track the history of a parameter: "In which file, on which line, and how was it changed (Overwritten, Added, Deleted)?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jump to Source:&lt;/strong&gt; Select a history entry to instantly jump to the definition line in the original &lt;code&gt;.ini&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;↑ It analyzes the actual project INIs and displays the final value and override history in one shot.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbpgtrlkj4qpntotokos.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbpgtrlkj4qpntotokos.gif" alt="config_tree" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Implement Virtual: Auto-generate Overrides
&lt;/h3&gt;

&lt;p&gt;When overriding a &lt;code&gt;virtual&lt;/code&gt; function in a parent class in C++, copying and pasting the signature between header files is tedious.&lt;br&gt;
I've implemented the "Override function..." feature found in Rider and VS into Neovim.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It traverses the inheritance chain of the current class and lists available &lt;code&gt;virtual&lt;/code&gt; functions.&lt;/li&gt;
&lt;li&gt;Simply pick one from the list, and it &lt;strong&gt;adds the declaration (with &lt;code&gt;override&lt;/code&gt;) to the header and copies the implementation code (with &lt;code&gt;Super::Call&lt;/code&gt;) to your clipboard&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc8tjtlqvfw1h2pr2rrs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc8tjtlqvfw1h2pr2rrs.gif" alt="implement_virtual" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Goto Super Definition / Implementation
&lt;/h2&gt;

&lt;p&gt;"How was this function implemented in the parent class?"&lt;br&gt;
To find out, we used to have to grep or trace the LSP hierarchy. Now, it's just one command.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UDEV goto_super_def&lt;/code&gt;&lt;/strong&gt;: Jump to the parent class function definition (Header).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UDEV goto_super_impl&lt;/code&gt;&lt;/strong&gt;: Jump to the parent class implementation (Source).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It recognizes the function name at the cursor, intelligently searches the inheritance tree, and jumps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftohx7e16cx45y8peagp5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftohx7e16cx45y8peagp5.gif" alt="goto super" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Symbols View Optimization (Lazy Initialization)
&lt;/h3&gt;

&lt;p&gt;As projects grew larger, the initialization cost of the Symbol Tree (Class/Function view) started to become noticeable.&lt;br&gt;
In this update, I completely refactored the architecture to perform &lt;strong&gt;analysis and initialization only at the moment it is needed (Lazy Loading)&lt;/strong&gt;.&lt;br&gt;
This significantly improves Neovim startup time and file opening response.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Find Module: Reverse Lookup for Dependencies
&lt;/h2&gt;

&lt;p&gt;When writing C++ in Unreal, a common friction point is editing &lt;code&gt;Build.cs&lt;/code&gt;. You often know the class name you want to use (e.g., &lt;code&gt;UNiagaraComponent&lt;/code&gt;), but you forget which module needs to be added to &lt;code&gt;PublicDependencyModuleNames&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UDEV find_module&lt;/code&gt;&lt;/strong&gt;: This command opens a picker listing all classes, structs, and enums. When you select one, it identifies the module it belongs to (e.g., &lt;code&gt;"Niagara"&lt;/code&gt;) and &lt;strong&gt;copies the module name to your clipboard, wrapped in double quotes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can then simply paste it directly into your &lt;code&gt;Build.cs&lt;/code&gt;. It’s a simple utility, but it saves a lot of context switching and documentation searching.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zadoqgn004siyvyc2wr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zadoqgn004siyvyc2wr.gif" alt="find_module" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Other Improvements
&lt;/h3&gt;

&lt;p&gt;Small but useful fixes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;UCM switch&lt;/strong&gt;: Added support for file paths in &lt;code&gt;Engine/Classes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;UEP find_parents&lt;/strong&gt;: Added support for &lt;code&gt;UObject&lt;/code&gt; (making the inheritance tree much clearer).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;UEP tree&lt;/strong&gt;: Fixed a bug where project files inside Plugins were hidden.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;UNL&lt;/strong&gt;: Added &lt;code&gt;.ini&lt;/code&gt; file parsing capability and standardized the C++ parser logic.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With this week's updates, Neovim is getting closer to a true "Unreal Engine Specialized IDE."&lt;br&gt;
I believe the &lt;strong&gt;Config Explorer&lt;/strong&gt;, in particular, is a unique feature not standard even in commercial IDEs.&lt;/p&gt;

&lt;p&gt;If you find this useful or want to support the project, please check out the repositories.&lt;br&gt;
&lt;strong&gt;While the number of Clones is increasing (yay!), the Star count is still a bit lonely (lol).&lt;/strong&gt; Your Stars give me the motivation to develop the next feature!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Links to Repositories]&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UnrealDev.nvim&lt;/strong&gt; (Integration Plugin): &lt;a href="https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;https://github.com/taku25/UnrealDev.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UEP.nvim&lt;/strong&gt; (Analysis Engine): &lt;a href="https://github.com/taku25/UEP.nvim" rel="noopener noreferrer"&gt;https://github.com/taku25/UEP.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UNX.nvim&lt;/strong&gt; (UI Explorer): &lt;a href="https://github.com/taku25/UNX.nvim" rel="noopener noreferrer"&gt;https://github.com/taku25/UNX.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nim</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
