Cách nhận tự động hoàn thành C ++ thông minh


32

Một số trình soạn thảo (chẳng hạn như studio hình ảnh trên windows) thực hiện tự động hoàn thành C ++, hiểu C ++. Ví dụ: đã cho:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

Trong studio trực quan, tự động hoàn thành biết phương pháp duy nhất std::vector<int>bắt đầu bằng chữ i insert.

Có thể có được loại tự động hoàn thành trong vim?


3
Các Plugin YouCompleteMe có thể học hỏi điều kiện để tự động hoàn thành, và có thể hiểu được ngôn ngữ gia đình C.
alxndr

Tài liệu @alxndr khá khó hiểu đối với tôi - trong trường hợp cài đặt với vundle. Và ngay khi tôi bắt đầu với nó, máy chủ YCM đã bị sập!
Abhinav Gauniyal

YCM hoạt động với tôi tương đối tốt, trừ khi tôi có các công cụ nặng (boost.geo) trong đó nó thêm các looooots của laod vào hệ thống. Thiết lập của tôi là một mớ hỗn độn trong khi đó, khó có thể trích xuất các phần YCM ...
johannes

@yo 'Câu hỏi này khá cụ thể để sử dụng vim với C ++. Các giải pháp cho nó có lẽ sẽ không áp dụng cho người sử dụng Vim để viết Perl (và ngược lại). Vì vậy, c ++ có vẻ tốt với tôi; nhưng tất nhiên Vi và Vim Meta là nơi thích hợp để thảo luận về điều đó.
derobert

2
@AbhinavGauniyal Nghe có vẻ giống với các vấn đề tôi đã thấy trước đây khi sử dụng YCM. Bạn đang trên hệ thống nào? Đối với OSX xem tại đây . Tôi không sử dụng MacVim, nhưng tôi đã cài đặt CMake với Homebrew. Sau đó, tôi cded vào thư mục plugin YCM ( ~/.vim/bundlecho tôi) và chạy ./install --clang-completer.
bsmith89

Câu trả lời:


28

Tôi thực sự thích clang_complete cho việc này. Nó đòi hỏi tiếng kêu, và bạn cần nói cho nó biết libclang nằm trong hệ thống của bạn. Sau đó, nó hoạt động tuyệt vời.

Mọi người có thể đề xuất YouCompleteMe, nhưng thành thật mà nói, plugin đó cực kỳ bực bội vì những gì nó nói và nó yêu cầu quá nhiều bước để cài đặt. Tôi cũng đã có nó segfault Vim nhiều lần. Tôi không thể hạnh phúc hơn với clang_complete.

Đây là những gì tôi nhận được khi tôi gõ v.:hoàn thành


4
Đã đồng ý. Tôi đã có rất nhiều vấn đề với YCM (bao gồm cả các lỗi được đề cập). Và thậm chí sau nhiều giờ cấu hình, tôi không bao giờ có nó hoạt động đầy đủ.
CharlesL

1
Tôi đã gặp sự cố máy chủ YCM nhiều lần, mong chờ clang_complete, đây là thông tin có liên quan cho những người dùng khác: github.com/Rip-Rip/clang_complete/blob/master/doc/
trộm

1
Tôi đã có điều ngược lại. YCM đã hoạt động tốt (ngay cả khi nó là Pita để cài đặt) nhưng hoàn thành tiếng kêu không bao giờ hoạt động ...
Sardathrion - Tái lập lại Monica

Bạn có thể ẩn tất cả những điều đó để bạn có thể thấy mã của mình một vài dòng không?
Matt C

@MatthewCliatt, giấu cái gì? Menu bật lên? Không có gì đặc biệt trong mã. Nó chỉ return 0ở bên dưới menu bật lên.
akshay

8

Plugin YouCompleteMe ( Link ) đã hoạt động rất tốt đối với tôi. Nó sử dụng libclang để tạo ra tính năng tự động hoàn thành, cung cấp sự hoàn thành chính xác.

Nó có rất nhiều tùy chỉnh, đặc biệt khi làm việc với các cờ biên dịch. Bạn có thể chỉnh sửa "trình tạo cờ" chỉnh sửa tập lệnh python cho mỗi dự án ( Ví dụ ). Nhưng, với tôi, ưu điểm chính là nó hỗ trợ Cơ sở dữ liệu tổng hợp Clang ( Link! ). Điều này có nghĩa là bạn có thể biên dịch mã của mình một cách bình thường và yêu cầu clang nhổ tất cả các cờ được sử dụng để biên dịch và sử dụng các cờ đó với YouCompleteMe. Rất tiện dụng nếu bạn muốn công cụ tự động hoàn thành của mình nhận thức được các định nghĩa macro của bạn hoặc vị trí của tất cả các tệp tiêu đề trong hệ thống của bạn mà không cần phải gõ thủ công.


3

YouCompleteMe không khó cài đặt và nó khá ổn định đối với tôi, tôi đã chuyển từ clang_complete sang YouCompleteMe từ nhiều năm trước. Một điều tôi đồng ý, nó thực sự đã nở rộ với một lịch sử cam kết lớn, nhiều phụ thuộc nội bộ và hỗ trợ cho nhiều ngôn ngữ mà bạn có thể không quan tâm nhưng cuối cùng vẫn sẽ nhân bản các mô đun con liên quan của nó. Đó là một vấn đề với YouComplemeMe, nhưng .... nó vẫn hoạt động.

Tôi đã làm việc trên một ngã ba với mục đích đặc biệt để hỗ trợ C ++ tốt hơn, bạn có thể kiểm tra gif này hiển thị nó:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

Nó thúc đẩy thông tin tham số mới mà Clang có thể cung cấp, bạn có thể tìm hiểu thêm về điều này từ bài viết này của tôi: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/ .


Hôm nay tôi dùng coc.nvim + ccls thay thế.
pepper_chico
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.