Giới thiệu: Tại Sao Tôi Xây Dựng Bộ Plugin Neovim cho Unreal Engine
Là một lập trình viên đã sử dụng Vim/Neovim trong nhiều năm, tôi nhận thấy việc phát triển Unreal Engine khá thách thức mà không có sự hỗ trợ của IDE. Tôi dần chuyển sang một quy trình làm việc tập trung vào IDE. Tuy nhiên, các trình soạn thảo trong những IDE này lại không mang lại sự tự do mà tôi quen thuộc với phong cách lập trình của Vim/Neovim, khiến tôi không thể phát huy hết tiềm năng của mình.
Mặc dù các IDE truyền thống như Visual Studio và Rider cung cấp nhiều tính năng mạnh mẽ và xuất sắc, sự không hài lòng của tôi chỉ nằm ở trải nghiệm lập trình. Điều này đã khiến tôi quyết định trở lại với Vim/Neovim.
Mục tiêu của tôi rất đơn giản:
Thay vì cố gắng sao chép tất cả các tính năng mạnh mẽ của một IDE, tôi muốn tái hiện các chức năng cần thiết trong quá trình lập trình thông qua các plugin, từ đó quay trở lại với phong cách lập trình mà tôi yêu thích.
Bài viết này giới thiệu một bộ plugin Neovim được thiết kế đặc biệt cho các nhà phát triển Unreal Engine. Nó mô tả cách mà những công cụ này có thể nâng cao năng suất của bạn bằng cách tích hợp các quy trình lập trình chính của UE trực tiếp vào Neovim.
Bộ Plugin Cốt Lõi: Đưa UE Vào Neovim
Tâm điểm của sự tích hợp này là UNL.nvim, một thư viện nền tảng cho phép toàn bộ bộ plugin tương tác thông minh với các dự án Unreal Engine. Dựa trên thư viện này, các plugin này bao gồm các khía cạnh quan trọng của phát triển UE.
UBT.nvim: Xây Dựng Bất Đồng Bộ & Điều Hướng Lỗi
Thách thức: Xây dựng dự án và điều hướng nhật ký xây dựng.
Giải pháp: UBT.nvim cho phép bạn thực hiện UBT bất đồng bộ từ bên trong Neovim. Nếu một bản xây dựng thất bại, nó cung cấp danh sách lỗi tương tác, cho phép bạn nhảy trực tiếp đến dòng mã gặp sự cố. Bằng cách sử dụng ULG.nvim, nhật ký xây dựng bất đồng bộ được ghi vào một bộ đệm riêng trong Neovim.
Tính năng:
- Thực hiện UBT bất đồng bộ với phản hồi theo thời gian thực.
- Danh sách lỗi tương tác cho điều hướng nhanh (sử dụng Telescope.nvim/fzf-lua).
- Tạo
compile_commands.jsoncho LSP. - Tích hợp Unreal Header Tool (UHT).
- Tạo tệp dự án.
UCM.nvim: Quản Lý Lớp Unreal Hiệu Quả
Thách thức: Tạo thủ công các lớp Unreal Engine mới (.h và .cpp), thiết lập mã khởi tạo, và đảm bảo cấu trúc thư mục đúng có thể gây nhàm chán và dễ xảy ra lỗi.
Giải pháp: UCM.nvim đơn giản hóa quy trình tạo lớp. Bạn có thể chọn lớp cha một cách tương tác và chỉ định tên lớp mới, nó sẽ tự động tạo ra các tệp cần thiết với mã khởi tạo ở các vị trí chính xác, sẵn sàng cho việc phát triển.
Tính năng:
- Tạo lớp một cách tương tác với việc chọn lớp cha.
- Tự động tạo tệp
.hvà.cppvới mã khởi tạo tiêu chuẩn. - Đảm bảo vị trí tệp chính xác trong các thư mục
Private/Public. - Di chuyển, đổi tên và xóa tệp trong các thư mục
Private/Publicmột cách chính xác. - Chuyển đổi giữa các tệp Nguồn/Đầu.
UEP.nvim: Tìm Kiếm Tệp Toàn Dự Án & Grep
Thách thức: Điều hướng các dự án Unreal Engine lớn và tìm kiếm các tệp hoặc đoạn mã cụ thể có thể khó khăn, đặc biệt là qua nhiều mô-đun.
Giải pháp: UEP.nvim phân tích tệp .uproject của bạn để hiểu toàn bộ cấu trúc dự án. Điều này cho phép tìm kiếm tệp toàn dự án nhanh chóng và chính xác (sử dụng Telescope.nvim), giúp dễ dàng xác định bất kỳ tệp hoặc định nghĩa nào.
Tính năng:
- Tìm kiếm tệp toàn dự án nhanh chóng.
- Grep hiệu quả trên tất cả các tệp dự án.
- Lựa chọn tệp theo mô-đun cho điều hướng chính xác.
ULG.nvim: Trình Xem Nhật Ký Unreal Engine Thời Gian Thực & Bảng Điều Khiển
Thách thức: Liên tục chuyển đổi giữa Unreal Editor để xem nhật ký hoặc thực hiện các lệnh bảng điều khiển làm gián đoạn quy trình phát triển.
Giải pháp: ULG.nvim cung cấp trình xem nhật ký thời gian thực trực tiếp trong Neovim. Bạn có thể lọc nhật ký một cách động và, quan trọng nhất, gửi các lệnh bảng điều khiển trực tiếp đến Unreal Editor đang chạy, hoạt động như một bảng điều khiển từ xa mạnh mẽ.
Tính năng:
- Hiển thị nhật ký của Unreal Editor theo thời gian thực.
- Lọc nhật ký động theo loại hoặc cấp độ.
- Gửi lệnh bảng điều khiển đến Unreal Editor từ Neovim.
neo-tree-unl.nvim: Cây Dự Án Logic & Dữ Liệu Insights Trong Neo-tree
Thách thức: Cây tệp tiêu chuẩn không phải lúc nào cũng phản ánh cấu trúc logic của một dự án Unreal Engine.
Giải pháp: neo-tree-unl.nvim mở rộng Neo-tree để hiển thị cái nhìn logic về cấu trúc .uproject của bạn, cung cấp trải nghiệm tương tự như trình khám phá giải pháp.
Tính năng:
- Cái nhìn cây logic của dự án Unreal Engine của bạn.
- Tích hợp dữ liệu Unreal Insights trong Neo-tree.
UNL.nvim: Cơ Sở (Thư Viện)
UNL.nvim phục vụ như một thư viện cốt lõi cho toàn bộ bộ plugin. Nó xử lý giao tiếp với môi trường Unreal Engine, phân tích các tệp .uproject, và cung cấp các tiện ích chung giúp nâng cao các plugin khác. Thiết kế mô-đun này đảm bảo tính nhất quán và khả năng bảo trì giữa tất cả các công cụ.
Hướng Dẫn Cài Đặt
Để bắt đầu với các plugin này, tôi khuyên bạn nên sử dụng lazy.nvim (hoặc trình quản lý plugin ưa thích của bạn).
Yêu cầu trước
- Neovim (phiên bản 0.11.3 trở lên được khuyến nghị)
- Unreal Engine (các phiên bản mới nhất thường được hỗ trợ)
- Telescope.nvim (để chọn tương tác lỗi UBT, tệp, v.v.)
- fzf-lua (để chọn tương tác lỗi UBT, tệp, v.v.)
- neo-tree.nvim (đối với neo-tree-unl.nvim)
- fidget.nvim (để hiển thị tiến trình bất đồng bộ)
- fd (để tìm kiếm tệp/thư mục)
- rg (để tìm kiếm nội dung tệp)
Ví dụ Cấu Hình lazy.nvim
lua
-- Trong tệp plugins/init.lua hoặc tệp cấu hình lazy.nvim tương tự
return {
-- Thư viện cốt lõi (cần thiết)
{
"taku25/UNL.nvim",
opts = {}, -- Thêm bất kỳ tùy chọn nào cho UNL.nvim ở đây
},
-- UBT.nvim (Tích hợp Công Cụ Xây Dựng)
{
"taku25/UBT.nvim",
dependencies = {
"taku25/UNL.nvim", -- Phụ thuộc vào thư viện cốt lõi
"nvim-telescope/telescope.nvim", -- Để chọn lỗi tương tác
--"https://github.com/ibhagwan/fzf-lua", -- hoặc fzf-lua cho chọn lỗi tương tác
},
ft = { "cpp", "h" }, -- Chỉ tải cho các tệp C++ (tùy chọn)
opts = {}, -- Tùy chọn cụ thể cho UBT.nvim
},
-- UCM.nvim (Tạo Lớp)
{
"taku25/UCM.nvim",
dependencies = {
"taku25/UNL.nvim",
"nvim-telescope/telescope.nvim",
--"https://github.com/ibhagwan/fzf-lua", -- hoặc fzf-lua cho chọn tương tác
},
ft = { "cpp", "h" },
opts = {}, -- Tùy chọn cụ thể cho UCM.nvim
},
-- ULG.nvim (Trình Xem Nhật Ký & Bảng Điều Khiển)
{
"taku25/ULG.nvim",
dependencies = { "taku25/UNL.nvim" },
opts = {}, -- Tùy chọn cụ thể cho ULG.nvim
--"https://github.com/ibhagwan/fzf-lua", -- hoặc fzf-lua cho chọn tương tác
},
-- UEP.nvim (Tìm Kiếm & Grep Toàn Dự Án)
{
"taku25/UEP.nvim",
dependencies = {
"taku25/UNL.nvim",
"nvim-telescope/telescope.nvim",
--"https://github.com/ibhagwan/fzf-lua", -- hoặc fzf-lua cho chọn tương tác
},
ft = { "cpp", "h" },
opts = {}, -- Tùy chọn cụ thể cho UEP.nvim
},
-- neo-tree-unl.nvim (Tích hợp Neo-tree)
{
"taku25/neo-tree-unl.nvim",
dependencies = {
"taku25/UNL.nvim",
},
opts = {}, -- Tùy chọn cụ thể cho neo-tree-unl.nvim
},
{
"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" },
},
},
}
}
}
Kết Luận & Kế Hoạch Tương Lai
Bộ plugin này thay đổi căn bản cách bạn phát triển các dự án Unreal Engine trong Neovim, cung cấp một quy trình làm việc tích hợp và hiệu quả mà không kém gì các IDE truyền thống. Bằng cách đưa các nhiệm vụ phát triển chính trực tiếp vào trình soạn thảo của bạn, nó giảm thiểu việc chuyển đổi ngữ cảnh và giữ bạn trong dòng chảy sáng tạo.
Hiện tại, tôi tập trung vào việc sửa lỗi cho các plugin này. Trong tương lai, tôi đang xem xét việc tích hợp sâu hơn với tree-sitter và phát triển các chức năng tìm kiếm tài sản hiệu quả.
Phản hồi và sự đóng góp của bạn rất được trân trọng! Xin vui lòng mở các vấn đề hoặc gửi yêu cầu kéo trên các kho lưu trữ GitHub tương ứng nếu bạn có bất kỳ đề xuất nào hoặc gặp bất kỳ vấn đề nào.
Một Lưu Ý Đặc Biệt Về Hỗ Trợ AI: Tốc độ phát triển của các plugin này, và thực tế một phần lớn của bài viết này, đã được thực hiện nhờ sự trợ giúp của AI. AI đã trở thành một đối tác mạnh mẽ trong việc hình thành ý tưởng của tôi và đẩy nhanh quá trình viết.
Cảm ơn bạn đã đọc, chúc bạn lập trình vui vẻ!
- Kho Lưu Trữ GitHub:
- 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 (Thư viện): https://github.com/taku25/UNL.nvim