지능적인 C ++ 자동 완성을 얻는 방법


32

일부 편집기 (예 : Windows의 Visual Studio)는 C ++을 이해하는 C ++ 자동 완성을 수행합니다. 예를 들면 다음과 같습니다.

#include <vector>

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

Visual Studio에서 자동 완성은 std::vector<int>i로 시작 하는 유일한 방법을 알고 insert있습니다.

vim에서 이러한 종류의 자동 완성을 얻을 수 있습니까?


3
YouCompleteMe 플러그인은 자동 완성 용어를 배울 수 있고, C 계열 언어를 이해할 수있다.
alxndr

@alxndr 설명서는 Vundle과 함께 설치하기위한 me-in 경우에 매우 혼동되었습니다. 그리고 그것을 시작하자마자 YCM 서버가 추락했습니다!
Abhinav Gauniyal

시스템에 looooots의 laod를 추가하는 템플릿 무거운 (boost.geo) 항목이 없으면 YCM이 비교적 잘 작동합니다. 내 설정은 ..., 추출 YCM 부품 하드 엉망 한편입니다
요하네스

@yo '이 질문은 C ++에서 vim을 사용하는 것과 관련이 있습니다. Vim을 사용하여 Perl을 쓰는 사람에게는 적용되지 않을 것입니다. 그래서 C ++ 은 나에게 괜찮아 보입니다. 물론 Vi와 Vim Meta 는 그 점을 논의하기에 적합한 장소입니다.
derobert

2
@AbhinavGauniyal 그것은 YCM을 사용하여 이전에 본 문제와 비슷하게 들립니다. 어떤 시스템을 사용하고 있습니까? OSX의 경우 여기를 참조 하십시오 . MacVim을 사용하지 않지만 Homebrew와 함께 CMake를 설치했습니다. 그런 다음 cdYCM 플러그인 디렉토리 ( ~/.vim/bundle나를 위해)로 가서 실행했습니다 ./install --clang-completer.
bsmith89

답변:


28

나는 이것을 위해 clang_complete 를 정말로 좋아 한다. clang이 필요하며 시스템에서 libclang이있는 위치를 알려야합니다. 그 후에는 훌륭하게 작동합니다.

사람들은 YouCompleteMe를 제안 할 수도 있지만, 솔직히 말해서 플러그인은 그것이 말한 것에 크게 부풀어 있으며 설치하는 데 너무 많은 단계가 필요합니다. 또한 여러 차례에 걸쳐 segfault Vim을 사용했습니다. clang_complete로 더 행복 할 수 없었습니다.

이것은 내가 타이핑 할 때 얻는 것입니다 v..클랜 완료


4
동의했다. 나는 YCM (많은 언급 된 segfaults 포함)에 많은 문제가있었습니다. 그리고 몇 시간의 구성 후에도 완전히 작동하지 않았습니다.
CharlesL

1
내가 YCM 서버가 clang_complete 기대, 여러 번 충돌했다, 여기에 다른 사용자에 대한 관련 정보는 다음과 같습니다 github.com/Rip-Rip/clang_complete/blob/master/doc/...
Abhinav Gauniyal

1
나는 그 반대였다. YCM은
제대로

코드를 몇 줄 아래로 볼 수 있도록 모든 것을 숨길 수 있습니까?
Matt C

@MatthewCliatt, 무엇을 숨기시겠습니까? 팝업 메뉴? 코드에는 특별한 것이 없습니다. return 0팝업 메뉴 바로 아래에 있습니다.
akshay

8

YouCompleteMe ( Link ) 플러그인은 저에게 큰 도움이되었습니다. libclang을 사용하여 자동 완성 기능을 생성하여 정확한 완료를 제공합니다.

특히 컴파일 플래그로 작업 할 때 많은 사용자 정의가 있습니다. 프로젝트 당 파이썬 스크립트를 편집하는 "플래그 생성기"를 편집 할 수 있습니다 ( ). 그러나 나에게 가장 큰 장점은 Clang Compilation Database ( Link! )를 지원한다는 것 입니다. 즉, 코드를 정상적으로 컴파일하고 clang에게 컴파일에 사용 된 모든 플래그를 뱉어 내고 해당 플래그를 YouCompleteMe와 함께 사용하도록 요청할 수 있습니다. 자동 완성 도구가 수동으로 입력하지 않고도 매크로 정의 나 시스템의 모든 헤더 파일 위치를 인식하도록하려는 경우 매우 유용합니다.


3

YouCompleteMe는 설치하기가 어렵지 않으며 매우 안정적입니다. 몇 년 전에 clang_complete에서 YouCompleteMe로 마이그레이션했습니다. 내가 동의하는 한 가지는 실제로 커밋 기록, 많은 내부 의존성 및 관심없는 많은 언어에 대한 지원으로 가득 차 있지만 여전히 관련 하위 모듈을 복제하게됩니다. 그것은 여전히 ​​YouComplemeMe의 문제입니다.

나는 C ++을 더 잘 지원하기 위해 특별한 목적으로 포크 작업을 해왔다 .

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

Clang이 제공 할 수있는 새로운 매개 변수 정보를 활용 하므로이 기사 ( http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/) 에서 이에 대해 자세히 배울 수 있습니다 .


오늘은 대신 coc.nvim + ccls를 사용합니다.
pepper_chico
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.