2013-01-18 2 views
3

OS의 X에 트리거 될 때 작동합니다, 나는 다음과 같은 명령을 사용하여 포함하는 시스템에 대한 ctags를 세트를 생성 디렉토리, 여기에 시스템 전체 헤더 파일을 생성하는 모든 ctags를 넣습니다 (조건부로로드하는 ROS 및 CPP에 대한 내용도 있지만 여기 또는 여기에 없습니다).빔 자동 완성은 팝업 수동

어쨌든. ctags 파일은 내 .vimrc에 올바르게 설정되어 있으므로 vim에서 ctags를 확실히 볼 수는 있지만 어떤 이유로 전체 기호를 작성한 다음 백 스페이스를 시작하면 자동 완료 팝업은 #include 개의 헤더 파일의 결과 만 표시합니다. 예를 들어 프로젝트에서 내가 #include <string.h>이고, 그 다음에 strlen()을 호출하려고하고 활성 vim 버퍼에 str을 입력하기 시작하면 현재 vim 버퍼에있는 심볼에 대한 결과 만 얻습니다. 그러나 strlen을 입력 한 다음 한두 개의 문자를 백 스페이스로 시작하고 <C-n>을 누르면 팝업 메뉴에 포함 된 다른 헤더 파일의 일치 항목이 채워집니다.

편집 : 방금 "s"를 누른 다음 <C-n>을 누르면 해당 기능이 작동합니다. 그래서 문제는 팝업 메뉴가 수동으로 시작될 때만 작동하는 것으로 보입니다. 어느 날

추가 정보 (아래 참조)는 플러그인 문제가 있다고 생각합니다 :

  • completeoptcompleteopt=menuone,menu,preview,longest 내가 OmniCppComplete

  • 로 설정되어, 내가 방해 할 수도있을 것 같군요 행동. 현재 이 아니며은 조건부로 C++ 파일로만로드됩니다. .vimrc에서 OmniCppComplete 설정을 편집하고 게시하려면 그냥 묻습니다.

  • 또한 AutoComplPop이 설치되어 있지만 설정을 완료하지 않았으므로 기본 설정으로 실행됩니다. 플러그인을 실제로 조사하지 않았으므로 일부 동작이 결과를 방해 할 수 있는지 전혀 모릅니다.

  • 나는 AutoTagTagBar을 설치했으나 현재 디렉토리의 로컬 태그 파일로만 조작해야합니다.

나는 빔에 솔직히 꽤 새로운 해요, 난 그냥 임의의 플러그인 또는 내의 .vimrc 설정을 할 수 있는지,이 문제를 디버깅을 시작 할 생각이 없다.

답변

3

Vim에는 많은 구체적인 완료 메커니즘이 있습니다.

  • <C-n><C-p> 사용 complete 옵션에 의해 정의 된 많은 소스. 기본적으로 현재 및 모든로드 및 언로드 된 버퍼, 태그 및 포함 된 파일을 사용하여 완료를 제공합니다. 일반적으로 꽤 유용한 제안을 얻을 수 있지만, 다소 포괄적 인 해결책입니다. 합리적으로 큰 프로젝트를 수행하는 경우에는 전혀 신뢰할 수 없습니다.이 당신에게 좀 더 유용 할 수 있도록

  • 태그를 사용합니다.

  • 그리고 더 많은 것이 있습니다 (:h ins-completion 참조).

  • Omni 완료는 더 똑똑합니다. 일반적으로 의미있는 완료를 제공하기 위해 노력하는 사용자 지정 파일 형식 별 스크립트가 실행됩니다. <C-x><C-o>에 의해 실행되며 :h ft-c-omni에서 읽을 수 있습니다. 코드로 작업 할 때 옴니 완성은 종종 더 나은 선택입니다. 두 오버랩하는 "자동"-completion 플러그인을 가지고 있기 때문에

는 직장에서 무엇을 완료 메커니즘 말할 어렵다. 이러한 플러그인을 사용 중지하고 사용 가능한 여러 가지 완료 메커니즘으로 재생해야합니다.

+0

이 문제는 AutoComplPop에 C 및 C++ 파일에 대해 정의 된 기본 제공 동작이 없으며 그 내용이 무엇이든간에 ''을 사용하여 다시 실패하는 것으로 보입니다. ''는 C 파일에서 사용할 때 패턴을 찾을 수 없다는 오류를 반환하므로, 지금은 단지 AutoComplopop을 비활성화하고 최소한의 결과에만 ''을 사용하고 있습니다. 나는 더 많은 연구와 실험을해야 할 것이다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! –

+0

''은 사용자 정의 함수를 호출하지 않으므로 오류가 발생합니다. 나는 ACP도 사용한다. JavaScript를 지원하지 않았으므로 수정했습니다. 실제로, 나는 그 당시의 멍청한 놈에 대해서조차도 꽤 쉽습니다. [here] (https://github.com/romainl/dotvim/blob/master/bundle/autocomplpop/plugin/acp.vim#L33)와 같은 위치의 다른 곳을 참조하십시오. – romainl

+0

링크를 제공해 주셔서 감사합니다. 그래도 나는'vim runtime에 C 파일의 주어진 패턴에 응답하는 함수가 존재하지 않는다고 가정하고 있는데,''라는 에러가 나타났습니다. AutoComplopop을 configs에 기반하여 제작할 수 없는지 알 수 있습니다. 꽤 사소한 것 같습니다. 나의 유일한 질문은'acp # meetsForJavaScriptOmni'를 어떻게 만들었습니까? 내가 이해하는 모든 것. –

0

나는 이것을 아직 습득하지 못했지만 다음과 같은 관찰이 도움이 될 것이라고 생각합니다.

Vim의 자동 완성 기능은 잡음이 심할 수 있으며 종종 <C-x><C-o>으로 전화를 걸기 시작합니다. 구체적으로 말하자면, <C-x><C-o>이라는 태그 기반 완료를 호출하여 으로 바 꾸었습니다. 오픈 버퍼를 사용하여 Vim의 기본 제안을 계속 입력했습니다.

플러그인 중 하나를 종료하는 것이 좋습니다. 필자의 경우 핵심은 Vim의 기본 동작을 종료하는 방법이었다. 나는 몇몇 사람들을 보았고 (그리고 지금 내가 내 자신을 포함하고있다), Vim의 기본값을 트리거하기 전에 표현식의 길이를 높게 설정한다. 나를 위해 :

let g:deoplete#auto_complete_start_length = 99 

... 이렇게하면 작업을 알리기 위해 의도 한 명령에 상관없이오고가는 완료의 기본 계층을 제거 할 수 있습니다.

여전히 해킹처럼 느껴지지만 내 작업이 태그 기반 완료에 집중하는 데 도움이됩니다.

참고 : Mac에서는 NVIM을 사용합니다.