UEP.nvim
A Neovim plugin that parses Unreal Engine .uproject files to provide project-wide information management and file operations.
Install / Use
/learn @taku25/UEP.nvimREADME
UEP.nvim
Unreal Engine Project Explorer 💓 Neovim
<table> <tr> <td><div align=center><img width="100%" alt="UEP Refresh Demo" src="https://raw.githubusercontent.com/taku25/UEP.nvim/images/assets/uep_refresh.gif" /></div></td> <td><div align=center><img width="100%" alt="UEP Tree Demo" src="https://raw.githubusercontent.com/taku25/UEP.nvim/images/assets/uep_tree.gif" /></div></td> </tr> </table>UEP.nvim is a Neovim plugin designed to understand, navigate, and manage the structure of Unreal Engine projects. It asynchronously parses and caches module and file information for the entire project, providing an exceptionally fast and intelligent file navigation experience.
This is a core plugin in the Unreal Neovim Plugin suite and depends on UNL.nvim as its library.
✨ Features
- Fast Asynchronous Caching:
- Scans the entire project (game and linked engine modules) in the background without blocking the UI.
- Intelligently separates game and engine caches, maximizing efficiency by allowing multiple projects to share a single engine cache.
- Ensures the file list is always in sync with the module structure through a
generationhash system.
- Powerful File Searching:
- Provides a flexible
:UEP filescommand to find your most-used source and config files instantly. - High-Performance Filtering: If you provide search keywords as arguments (e.g.,
:UEP files Game MyActor), filtering is performed on the server side beforehand, allowing instant results even in large-scale projects. - Offers specialized commands for targeted searches within a single module (
:UEP module_files). - Allows filtering files by scope (Game, Engine, Runtime, Editor, Full).
- Supports including module dependencies in the search (--no-deps, --shallow-deps, --deep-deps).
- Instantly search for all classes, structs, or enums within the specified scope (:UEP classes, :UEP structs, :UEP enums).
- Provides a flexible
- Intelligent Code Navigation:
- The
:UEP find_derivedcommand instantly finds all child classes that inherit from a specified base class. - The
:UEP find_parentscommand displays the entire inheritance chain from a specified class up toUObject. - The
:UEP add_includecommand automatically finds and inserts the correct#includedirective for a class name under the cursor or one chosen from a list. - The
:UEP find_modulecommand allows you to select a class from a list and copies the name of the module it belongs to (e.g., "Core", "Engine") to the clipboard, making it easy to editBuild.cs. - Leverages the class inheritance data cached by
:UEP refreshfor high-speed navigation.
- The
- Intelligent File Watching:
- The
:UEP startcommand starts monitoring the project for changes. - It automatically compares the current VCS (Git) revision with the last cached state.
- If changes are detected (or on first run), it triggers a
:UEP refreshautomatically, then begins a low-overhead file watcher.
- The
- Intelligent Content Searching (Grep):
- Performs high-speed content searches across the entire project and engine source code (requires ripgrep).
- The
:UEP grepcommand lets you specify the search scope (Game, Engine, Runtime, Editor, Full). - The
:UEP module_grepcommand enables focused, noise-free searches within a specific module (<module_name>).
- UI Integration:
- IDE-like Logical Tree View:
- Provides a logical tree view similar to an IDE's solution explorer through integration with neo-tree-unl.nvim.
- The
:UEP treecommand gives you an overview of the entire project structure (Game, Plugins, Engine). - The
:UEP module_treecommand allows you to switch to a view focused on a single module. - Running
:UEP refreshautomatically updates the open tree to the latest state.
🔧 Requirements
- Neovim v0.11.3 or later
- UNL.nvim (Required)
- fd (Required for project scanning)
- rg (Required for project Grep)
- Optional (Strongly recommended for the full experience):
- UI (Picker):
- UI (Tree View):
- UNX.nvim (Required for
:UEP treeand:UEP module_treecommands)
- UNX.nvim (Required for
🚀 Installation
Install with your favorite plugin manager.
lazy.nvim
return {
'taku25/UEP.nvim',
-- UNL.nvim is a required dependency
dependencies = {
'taku25/UNL.nvim',
'nvim-telescope/telescope.nvim', -- Optional
},
-- All settings are inherited from UNL.nvim, but can be overridden here
opts = {
-- UEP-specific settings can be placed here
},
}
⚙️ Configuration
This plugin is configured through the setup function of its library, UNL.nvim. However, you can also pass opts directly to UEP.nvim to configure settings in the UEP namespace.
Below are the default values related to UEP.nvim.
-- Place inside the spec for UEP.nvim or UNL.nvim in lazy.nvim
opts = {
-- UEP-specific settings
uep = {
-- Automatically start Neovim server (named pipe) on :UEP start
server = {
enable = true,
name = "UEP_nvim", -- \\.\pipe\UEP_nvim on Windows
},
-- Command template for opening files in external IDEs
ide = {
-- {file} and {line} will be replaced with actual values
open_command = "rider --line {line} \"{file}\"",
},
},
-- Directory names to search for files during tree construction
include_directory = { "Source", "Plugins", "Config", },
-- Folder names to exclude during tree construction
excludes_directory = { "Intermediate", "Binaries", "Saved" },
-- File extensions to be scanned by the ':UEP refresh' command
files_extensions = {
"cpp", "h", "hpp", "inl", "ini", "cs",
},
-- Manually specify the engine path if automatic detection fails.
-- Example: "C:/Program Files/Epic Games/UE_5.4"
engine_path = nil,
-- UI backend settings (inherited from UNL.nvim)
ui = {
picker = {
mode = "auto", -- "auto", "telescope", "fzf_lua", "native"
prefer = { "telescope", "fzf_lua", "native" },
},
grep_picker = {
mode = "auto",
prefer = { "telescope", "fzf-lua" }
},
progress = {
enable = true,
mode = "auto", -- "auto", "fidget", "window", "notify"
prefer = { "fidget", "window", "notify" },
},
},
}
⚡ Usage
All commands start with :UEP.
" Re-scan the project and update the cache. This is the most important command.
:UEP refresh [Game|Engine]
" Open a UI to search for commonly-used source and config files.
:UEP files[!] [Game|Engine|Runtime|Editor|Full] [--no-deps|--shallow-deps|--deep-deps]
" Search for files belonging to a specific module.
:UEP module_files[!] [ModuleName]
" LiveGrep across the project or engine source code.
:UEP grep [Game|Engine|Runtime|Editor|Full]
" LiveGrep files belonging to a specific module.
:UEP module_grep [ModuleName]
" Open an include file by searching the project cache.
:UEP open_file [Path]
" Find and insert an #include directive for a class.
:UEP add_include[!] [ClassName]
" Delete ALL structural (*.project.json) and file (*.files.json) caches for the current project.
:UEP cleanup
" Find derived classes. Use [!] to open the base class picker.
:UEP find_derived[!] [ClassName]
" Find the inheritance chain. Use [!] to open the starting class picker.
:UEP find_parents[!] [ClassName]
" Search for C++ classes (use '!' to refresh cache).
:UEP classes[!] [Game|Engine|Runtime|Editor|Full] [--no-deps|--shallow-deps|--deep-deps]
" Search for C++ structs (use '!' to refresh cache).
:UEP structs[!] [Game|Engine|Runtime|Editor|Full] [--no-deps|--shallow-deps|--deep-deps]
" Search for C++ enums (use '!' to refresh cache).
:UEP enums[!] [Game|Engine|Runtime|Editor|Full] [--no-deps|--shallow-deps|--deep-deps]
" Display the logical tree for the entire project (requires neo-tree-unl.nvim).
:UEP tree
" Display the logical tree for a specific module (requires neo-tree-unl.nvim).
:UEP module_tree [ModuleName]
" Close the UEP tree and clear its expanded state.
:UEP close_tree
" Display a list of known projects in a UI and change the current directory to the selected project.
:UEP cd
" Remove a project from the list of known projects (does not delete files).
:UEP delete
" Create a new Unreal Engine project from a template.
:UEP new_project
" Start project monitoring. Checks for Git updates, runs refresh if needed, then watches for file changes.
:UEP start
" Stop the project monitor.
:UEP stop
" Jumps to the actual class or struct definition file, skipping forward declarations.
:UEP goto_definition[!] [ClassName]
" Select a class first, then select a symbol (function/property) within it to jump.
:UEP class_symbol[!] [Game|Engine|Runtime|Editor|Full] [--no-deps|--shallow-deps|--deep-deps]
" Open the file location in the system file explorer.
:UEP system_open[!] [Path]
" Jumps to the parent class definition of the current function.
:UEP goto_super_def
" Jumps to the parent class implementation of the current function.
:UEP goto_super_impl
" Override a virtual func
