Tóm Tắt
LSP trong Neovim gặp khó khăn trong việc hoàn thành nhiều macro và specifiers đặc thù của Unreal Engine. Để khắc phục "khoảng cách cuối cùng" này, tôi đã tạo ra
blink-cmp-unreal, một nguồn hoàn thiện tùy chỉnh choblink.cmp. Với sự bổ sung này, bạn sẽ nhận được sự hoàn thiện chính xác cho các từ khóa đặc thù của UE, nâng cao trải nghiệm phát triển.
Giới Thiệu
Chào các bạn! Như thường lệ, tôi đang tập trung vào việc tạo ra các plugin để giúp phát triển với Unreal Engine trong Neovim trở nên dễ dàng hơn một chút. (Thật lòng mà nói, tôi cảm thấy mình đang ngày càng xa rời mục tiêu ban đầu là "thực sự tạo ra điều gì đó trong UE", nhưng đó là một câu chuyện cho ngày khác...!)
Lần này, tôi muốn chia sẻ câu chuyện về một plugin mới mà tôi đã hoàn thành: blink-cmp-unreal, một nguồn hoàn thiện tùy chỉnh cho plugin hoàn thiện yêu thích của tôi, blink.cmp.
Rào Cản Không Thể Vượt Qua Chỉ Bằng LSP
Phát triển với Unreal Engine liên quan đến rất nhiều macro đặc biệt như UCLASS, UPROPERTY, và UFUNCTION, cùng với vô số "specifiers" được sử dụng bên trong chúng, chẳng hạn như BlueprintReadWrite và meta.
Thường thì, nếu bạn bao gồm các header như #include "CoreMinimal.h" ở đầu các tệp .h của mình, LSP của bạn sẽ cố gắng giải thích một số trong số chúng. Tuy nhiên, nó thường không theo dõi tất cả các định nghĩa, thường để bạn không có ứng viên hoàn thiện ngay khi bạn cần nhất.
blink-cmp-unreal đã ra đời để lấp đầy "khoảng cách cuối cùng" đáng thất vọng này.
Cài Đặt và Thiết Lập
Bắt đầu rất đơn giản nếu bạn đang sử dụng lazy.nvim.
return {
{
"Saghen/blink.cmp",
dependencies = {
{ "taku25/blink-cmp-unreal" },
},
opts = {
sources = {
default = { "lsp", "buffer", "path", "unreal" },
providers = {
unreal = {
module = "blink-cmp-unreal",
name = "unreal",
score_offset = 15,
},
},
},
},
},
}
Với chỉ một thiết lập như vậy, các specifiers macro của UE sẽ bắt đầu hoàn thiện mượt mà trong các vị trí như UCLASS().
Tùy Chỉnh Linh Hoạt
Nếu một số hoàn thiện trùng lặp với LSP của bạn? Không vấn đề gì. Bạn có thể vô hiệu hóa các nhóm hoàn thiện cụ thể thông qua các tùy chọn của plugin.
Chỉ cần thêm một bảng opts vào phần providers.unreal với bất kỳ cài đặt nào sau đây:
| Tùy Chọn | Mặc Định | Mô Tả |
|---|---|---|
enable_uclass |
true |
Bật hoàn thiện cho các specifiers UCLASS. |
enable_uproperty |
true |
Bật hoàn thiện cho các specifiers UPROPERTY. |
enable_ufunction |
true |
Bật hoàn thiện cho các specifiers UFUNCTION. |
enable_ustruct |
true |
Bật hoàn thiện cho các specifiers USTRUCT. |
enable_uenum |
true |
Bật hoàn thiện cho các specifiers UENUM. |
enable_uinterface |
true |
Bật hoàn thiện cho các specifiers UINTERFACE. |
enable_meta_specifiers |
true |
Bật hoàn thiện cho các từ khóa bên trong các specifiers meta (ví dụ: DisplayName). |
enable_delegate_macros |
true |
Bật hoàn thiện cho các macro liên quan đến delegate (ví dụ: DECLARE_DELEGATE). |
enable_module_macros |
true |
Bật hoàn thiện cho các macro liên quan đến module (ví dụ: IMPLEMENT_MODULE). |
enable_log_levels |
true |
Bật hoàn thiện cho các cấp độ log được sử dụng trong UE_LOG (ví dụ: Log, Warning). |
enable_slate_macros |
true |
Bật hoàn thiện cho các macro của framework UI Slate (ví dụ: SLATE_BEGIN_ARGS). |
Mẹo Tối Ưu Hiệu Suất
- Sử Dụng Cache: Nếu bạn thấy rằng thời gian hoàn thiện chậm, hãy kiểm tra xem có thể cache các kết quả hoàn thiện hay không để giảm tải cho LSP.
- Tùy Chỉnh Cấu Hình: Điều chỉnh các tùy chọn hoàn thiện để phù hợp hơn với quy trình làm việc của bạn.
Lỗi Thường Gặp và Giải Quyết
- LSP Không Hoạt Động: Nếu LSP không hoạt động, hãy đảm bảo rằng bạn đã cài đặt tất cả các phụ thuộc cần thiết và header đã được bao gồm đúng cách.
- Hoàn Thiện Không Hoạt Động: Kiểm tra xem bạn đã bật các tùy chọn hoàn thiện cần thiết trong cấu hình của mình chưa. Nếu không, hãy cập nhật lại.
Kết Luận và Tương Lai
Với sự hoàn thành của plugin này, tôi cảm thấy bộ công cụ mà tôi đang xây dựng đã được hoàn thiện để đáp ứng hầu hết các nhu cầu cơ bản cho phát triển UE trong Neovim: Xây dựng, Tạo lớp, Tìm kiếm tệp, Ghi log, Đánh dấu, và giờ là Hoàn thiện.
Tất nhiên, vẫn còn những tính năng nâng cao có trong các IDE hoàn chỉnh như Rider, chẳng hạn như việc hiển thị các tài sản Blueprint đang sử dụng một lớp C++ cụ thể. Tuy nhiên, việc đạt được điều đó có thể cần phân tích nhị phân, một nhiệm vụ khó khăn cho một lập trình viên độc lập.
Thay vào đó, ưu tiên ngay lập tức của tôi là hỗ trợ đa nền tảng. Hiện tại, tôi chỉ phát triển và thử nghiệm trong môi trường Windows, vì vậy tôi rất muốn đảm bảo tất cả các plugin này hoạt động chính xác trên Mac và Linux nữa.
Hy vọng bài viết này hữu ích cho bất kỳ ai đang đối mặt với thách thức phát triển cho Unreal Engine trong Neovim.
Bạn có mẹo hoặc công cụ nào cho phát triển UE trong Neovim không? Nếu bạn có bất kỳ plugin hoặc cấu hình hữu ích nào, tôi rất muốn nghe chúng trong phần bình luận!