Introduction: Why I Built a Neovim Plugin Suite for Unreal Engine
As a long-time developer who has used Vim/Neovim for development, I found Unreal Engine development quite challenging without IDE support, gradually shifting towards an IDE-centric workflow. However, the editors within these IDEs offered limited freedom compared to my familiar Vim/Neovim coding style, preventing me from performing at my true potential.
While traditional IDEs like Visual Studio and Rider offer robust and excellent features, my sole dissatisfaction lay with the coding experience. This prompted me to make the decision to return to Vim/Neovim.
My goal was simple:
Rather than mimicking all the powerful features of an IDE, I aimed to recreate the essential functionalities needed during coding within the IDE through plugins, thereby returning to my preferred coding style.
This article introduces a suite of Neovim plugins specifically designed for Unreal Engine developers. It demonstrates how these tools can significantly enhance your productivity by integrating key UE development coding workflows directly into Neovim.
The Core Plugin Suite: Bringing UE to Neovim
At the heart of this integration is UNL.nvim
, a foundational library that enables the entire plugin suite to interact intelligently with Unreal Engine projects. Built upon it, these plugins cover critical aspects of UE development.
UBT.nvim: Asynchronous Builds & Error Navigation
Challenge: Project builds and build log navigation.
Solution: UBT.nvim
allows you to execute UBT asynchronously from within Neovim. If a build fails, it provides an interactive error list, letting you jump directly to the problematic line of code. By using ULG.nvim
, asynchronous build logs are written to a dedicated buffer in Neovim.
Features:
- Asynchronous UBT execution with real-time feedback.
- Interactive error list for quick navigation (using Telescope.nvim/fzf-lua).
- Creates
compile_commands.json
for LSP. - Unreal Header Tool (UHT) integration.
- Generate project files.
UCM.nvim: Efficient Unreal Class Management
Challenge: Manually creating new Unreal Engine classes (.h
and .cpp
files), setting up boilerplate code, and ensuring correct folder structure can be repetitive and error-prone.
Solution: UCM.nvim
streamlines the class creation process. You can interactively select a parent class and specify a new class name, and it will generate the necessary files with boilerplate code in the correct locations, ready for development.
Features:
- Interactive class creation with parent class selection.
- Automatically generates
.h
and.cpp
files with standard boilerplate. - Guarantees correct file placement within
Private
/Public
folders. - Move, rename, and delete files within
Private
/Public
folders correctly. - Toggle between Source/Header files.
UEP.nvim: Project-Wide File Search & Grep
Challenge: Navigating large Unreal Engine projects and finding specific files or code snippets can be difficult, especially across multiple modules.
Solution: UEP.nvim
parses your .uproject
file to understand the entire project structure. This enables extremely fast and accurate project-wide file searching and Grepping (using Telescope.nvim), making it easy to locate any file or definition.
Features:
- Fast project-wide file search.
- Efficient Grep across all project files.
- Module-aware file picking for precise navigation.
ULG.nvim: Real-time Unreal Engine Log Viewer & Console
Challenge: Constantly switching to the Unreal Editor to view logs or execute console commands disrupts the development workflow.
Solution: ULG.nvim
provides a real-time log viewer directly in Neovim. You can dynamically filter logs and, crucially, send console commands directly to the running Unreal Editor, functioning as a powerful remote console.
Features:
- Real-time display of Unreal Editor logs.
- Dynamic log filtering by category or level.
- Send console commands to the Unreal Editor from Neovim.
neo-tree-unl.nvim: Logical Project Tree & Insights Data in Neo-tree
Challenge: Standard file trees don't always reflect the logical structure of an Unreal Engine project.
Solution: neo-tree-unl.nvim
extends Neo-tree to display a logical view of your .uproject
structure, offering a solution explorer-like experience.
Features:
- Logical tree view of your Unreal Engine project.
- Integration with Unreal Insights data within Neo-tree.
UNL.nvim: The Foundation (Library)
UNL.nvim
serves as the core library for the entire plugin suite. It handles communication with the Unreal Engine environment, parses .uproject
files, and provides common utilities that empower the other plugins. This modular design ensures consistency and maintainability across all tools.
Installation Guide
To get started with these plugins, I recommend using lazy.nvim
(or your preferred plugin manager).
Prerequisites
- Neovim (version 0.11.3 or later recommended)
- Unreal Engine (latest versions are generally supported)
- Telescope.nvim (for interactive picking UBT errors, files, etc.)
- fzf-lua (for interactive picking UBT errors, files, etc.)
- neo-tree.nvim (for neo-tree-unl.nvim)
- fidget.nvim (for asynchronous progress display)
- fd (for file/folder search)
- rg (for file content search)
lazy.nvim
Configuration Example
-- In your plugins/init.lua or similar lazy.nvim configuration file
return {
-- Core library (essential)
{
"taku25/UNL.nvim",
opts = {}, -- Add any UNL.nvim specific options here
},
-- UBT.nvim (Build Tool Integration)
{
"taku25/UBT.nvim",
dependencies = {
"taku25/UNL.nvim", -- Dependency on the core library
"nvim-telescope/telescope.nvim", -- For interactive error picking
--"https://github.com/ibhagwan/fzf-lua", -- or fzf-lua for interactive error picking
},
ft = { "cpp", "h" }, -- Only load for C++ files (optional)
opts = {}, -- UBT.nvim specific options
},
-- UCM.nvim (Class Creation)
{
"taku25/UCM.nvim",
dependencies = {
"taku25/UNL.nvim",
"nvim-telescope/telescope.nvim",
--"https://github.com/ibhagwan/fzf-lua", -- or fzf-lua for interactive picking
},
ft = { "cpp", "h" },
opts = {}, -- UCM.nvim specific options
},
-- ULG.nvim (Log Viewer & Console)
{
"taku25/ULG.nvim",
dependencies = { "taku25/UNL.nvim" },
opts = {}, -- ULG.nvim specific options
--"https://github.com/ibhagwan/fzf-lua", -- or fzf-lua for interactive picking
},
-- UEP.nvim (Project-wide Search & Grep)
{
"taku25/UEP.nvim",
dependencies = {
"taku25/UNL.nvim",
"nvim-telescope/telescope.nvim",
--"https://github.com/ibhagwan/fzf-lua", -- or fzf-lua for interactive picking
},
ft = { "cpp", "h" },
opts = {}, -- UEP.nvim specific options
},
-- neo-tree-unl.nvim (Neo-tree integration)
{
"taku25/neo-tree-unl.nvim",
dependencies = {
"taku25/UNL.nvim",
},
opts = {}, -- neo-tree-unl.nvim specific options
},
{
"nvim-neo-tree/neo-tree.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
"nvim-tree/nvim-web-devicons",
{ 'taku25/neo-tree-unl.nvim' },
},
opts = {
sources = {
"filesystem",
"buffers",
"git_status",
"neo-tree.sources.uproject",
"neo-tree.sources.insights",
},
source_selector = {
winbar = true,
sources = {
{ source = "filesystem", display_name = "filesystem" },
{ source = "uproject", display_name = "uproject" },
{ source = "insights", display_name = "insights" },
},
},
}
}
}
Conclusion & Future Plans
This plugin suite fundamentally changes how you develop Unreal Engine projects in Neovim, offering a highly integrated and efficient workflow that rivals traditional IDEs. By bringing key development tasks directly to your editor, it minimizes context switching and keeps you in your flow.
I am currently focused on bug fixes for these plugins. Moving forward, I am considering deeper integration with tree-sitter and the development of efficient asset search functionalities.
Your feedback and contributions are highly valued! Please feel free to open issues or submit pull requests on the respective GitHub repositories if you have any suggestions or encounter any problems.
A Special Note on AI Assistance: The speed at which these plugins were developed, and indeed a significant portion of this very article, was made possible with the help of AI. AI has been a powerful partner in shaping my ideas and drastically accelerating the writing process.
Thank you for reading, and happy coding!
-
GitHub Repositories:
- UBT.nvim: https://github.com/taku25/UBT.nvim
- UCM.nvim: https://github.com/taku25/UCM.nvim
- UEP.nvim: https://github.com/taku25/UEP.nvim
- ULG.nvim: https://github.com/taku25/ULG.nvim
- neo-tree-unl.nvim: https://github.com/taku25/neo-tree-unl.nvim
- UNL.nvim (Library): https://github.com/taku25/UNL.nvim
Top comments (0)