SkillAgentSearch skills...

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.nvim
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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.

English | 日本語 (Japanese)


✨ 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 generation hash system.
  • Powerful File Searching:
    • Provides a flexible :UEP files command 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).
  • Intelligent Code Navigation:
    • The :UEP find_derived command instantly finds all child classes that inherit from a specified base class.
    • The :UEP find_parents command displays the entire inheritance chain from a specified class up to UObject.
    • The :UEP add_include command automatically finds and inserts the correct #include directive for a class name under the cursor or one chosen from a list.
    • The :UEP find_module command 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 edit Build.cs.
    • Leverages the class inheritance data cached by :UEP refresh for high-speed navigation.
  • Intelligent File Watching:
    • The :UEP start command 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 refresh automatically, then begins a low-overhead file watcher.
  • Intelligent Content Searching (Grep):
    • Performs high-speed content searches across the entire project and engine source code (requires ripgrep).
    • The :UEP grep command lets you specify the search scope (Game, Engine, Runtime, Editor, Full).
    • The :UEP module_grep command enables focused, noise-free searches within a specific module (<module_name>).
  • UI Integration:
    • Leverages UNL.nvim's UI abstraction layer to automatically use UI frontends like Telescope and fzf-lua.
    • Falls back to the native Neovim UI if no UI plugin is installed.
  • 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 tree command gives you an overview of the entire project structure (Game, Plugins, Engine).
    • The :UEP module_tree command allows you to switch to a view focused on a single module.
    • Running :UEP refresh automatically 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):

🚀 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
View on GitHub
GitHub Stars13
CategoryDevelopment
Updated5d ago
Forks2

Languages

Lua

Security Score

95/100

Audited on Apr 1, 2026

No findings