Tóm lại, tôi đang tìm kiếm một công tác tính năng tự động hoàn cho các biên tập Vim. Tôi đã lập luận trước đó rằng Vim thay thế hoàn toàn IDE trong Linux và trong khi điều đó chắc chắn là đúng, nó thiếu một tính năng quan trọng: tự động hoàn thành.
Tôi biết về Ctrl+ N, hội nhập cởi mở Ctags , TagList , cppcomplete và OmniCppComplete . Than ôi, không có cái nào trong số này phù hợp với mô tả của tôi về chế độ tự động hoàn thành:
- Ctrl+N hoạt động độc đáo (chỉ) nếu bạn đã quên cách đánh vần
class
hoặcwhile
. Ồ tốt - Ctags mang đến cho bạn sự thô sơ nhưng có nhiều nhược điểm.
- Taglist chỉ là một trình bao bọc Ctags và như vậy, thừa hưởng hầu hết các nhược điểm của nó (mặc dù nó hoạt động tốt để liệt kê các khai báo).
- cppcomplete đơn giản là không hoạt động như đã hứa và tôi không thể hiểu mình đã làm gì sai, hoặc nếu nó hoạt động chính xác thì đúng là hạn chế và các hạn chế là do thiết kế.
- OmniCppComplete dường như có cùng các vấn đề như cppcomplete, tức là tự động hoàn thành không hoạt động đúng. Ngoài ra,
tags
tệp một lần nữa cần phải được cập nhật thủ công.
Tôi nhận thức được thực tế rằng các IDE hoàn toàn hiện đại, thậm chí không cung cấp khả năng hoàn thành mã C ++ tốt. Đó là lý do tại sao tôi đã chấp nhận sự thiếu hụt của Vim trong lĩnh vực này cho đến bây giờ. Nhưng tôi nghĩ rằng một mức độ cơ bản của việc hoàn thành mã không phải là quá nhiều để yêu cầu, và trên thực tế là cần thiết để sử dụng hiệu quả. Vì vậy, tôi đang tìm kiếm thứ gì đó có thể hoàn thành ít nhất những điều sau đây.
Nhận thức cú pháp . cppcomplete hứa hẹn (nhưng không cung cấp cho tôi), chính xác, hoàn thành tự động nhận biết phạm vi sau đây:
variableName.abc variableName->abc typeName::abc
Và thực sự, bất cứ điều gì khác là hoàn toàn vô dụng.
Cấu hình . Tôi cần xác định (dễ dàng) vị trí của các tệp nguồn và do đó tập lệnh lấy thông tin tự động hoàn tất từ đó. Trong thực tế, tôi đã có một Makefile trong thư mục của mình, trong đó chỉ định các đường dẫn bao gồm bắt buộc. Eclipse có thể giải thích thông tin tìm thấy trong đó, tại sao không phải là tập lệnh Vim?
Up-to-dately . Ngay khi tôi thay đổi một cái gì đó trong tệp của mình, tôi muốn tự động hoàn thành phản ánh điều này. Tôi không muốn kích hoạt thủ công
ctags
(hoặc một cái gì đó có thể so sánh). Ngoài ra, các thay đổi sẽ tăng dần , tức là khi tôi chỉ thay đổi một tệp, việc phân tích lại toàn bộ cây thư mục (có thể rất lớn) là không thể chấp nhậnctags
được.
Tôi có quên gì không? Hãy cập nhật.
Tôi cảm thấy thoải mái với khá nhiều cấu hình và / hoặc mày mò nhưng tôi không muốn lập trình một giải pháp từ đầu và tôi không giỏi gỡ lỗi các tập lệnh Vim.
Một lưu ý cuối cùng, tôi thực sự thích một cái gì đó tương tự cho Java và C # nhưng tôi đoán đó là quá nhiều hy vọng: ctags
chỉ phân tích các tệp mã và cả Java và C # đều có các khung công tác được biên dịch sẵn rất lớn cần được lập chỉ mục. Thật không may, phát triển .NET mà không có IDE thậm chí còn giống PITA hơn C ++.
clang_complete
về mặt kỹ thuật là âm thanh nhất nhưng chậm nghiêm trọng do thiếu bộ nhớ đệm kết quả và biên dịch một phần. Tôi phải thừa nhận rằng tôi đã không thử tất cả các câu trả lời vì một số yêu cầu thiết lập phức tạp, tốn thời gian. Bây giờ tôi sẽ nín thở để có một plugin có thể sử dụng được vì clang cuối cùng cũng cho phép các nhà phát triển xây dựng AST từ các nguồn C ++ (cho đến nay, không có trình phân tích cú pháp miễn phí tốt nào cho C ++).
clang_complete
gần đây? Nó có thể sử dụng libclang
với bộ nhớ đệm ngay bây giờ và do đó sẽ nhanh hơn.
formatted like this
.)
sh
(có nghĩa là trong thư viện của tôi) và theo sau là chữ viết tắt của lớp tôi. Ví dụshP
choParser
lớp học. Sau đó, tất cả những gì bạn cần làm là viếtshP
và nhấn CTRL + p (hoặc CTRL + n nếu bạn muốn) và đưa các thành viên lớp từ lần sử dụng cuối cùng đến lần đầu tiên (hoặc lần đầu tiên kéo dài nếu CTRL + n)