vim을위한 자동 완성 플러그인이 있습니까?


12

vim 용 자동 완성 플러그인이 있습니까? 내 옵션은 무엇입니까?

현재 AutoComplPop을 사용 하고 있지만 snipMate와의 통합이 좋지 않아 Ruby 파일 (100 줄 미만)을 느리게 사용합니다.

몇 가지 다른 플러그인을 보았지만 적어도 1 년 이상 지난 후에 플러그인이 종료되었습니다. 그래서 어떤 아이디어?


1
ACP는 여기서 매우 잘 작동하며 SnipMate에는 아무런 문제가 없습니다. .vimrc에 추가해야하는 설정이 있습니다 ( let g:acp_behaviorSnipmateLength=-1참조 :help autocomplpop). 추가 했습니까?
romainl

답변:


16

이것은 오래된 질문이지만, 나는 계속해서 그 문제로 되돌아오고 있으며, 언젠가는 Vim에서 완벽한 자동 완성 기능을 제공하는 플러그인의 올바른 조합을 찾을 것이라고 생각하면서 희미한 희망으로 번쩍입니다. 검색은 계속되지만 이것이 몇 년 동안 수행 한 모든 연구입니다.

우선 Vim은 코드 편집기가 아니라 텍스트 편집기라는 것을 이해해야합니다 . 코드 편집기 인 IDES는 Jetbrains 도구 모음, Visual Studio Code, Eclipse 등과 같은 도구입니다.

Vim은 기본적으로 코드를 "자동 완성"할 수 없습니다. 자동 완성을 위해서는 소스 코드를 검사하고 AST를 분석해야합니다. Vim이 2016 년에 Vim 8이 출시 될 때까지 비동기 작업을 수행 할 수 없었기 때문에 Vim 플러그인에서 코드 검사 소프트웨어를 실행하는 것은 악몽 일 것입니다. 이것을하지 않는 Vim 생태계의 역사에 구워졌습니다. Tern For Vim과 같이이 작업을 수행하려는 모든 사용자는 실제로 악몽을 씁니다.

텍스트 편집기가 할 수 있는 최선의 방법은 스 니펫이며 알고있는 것과 동일한 단어 / 줄 / 등을 완성하는 것입니다. 자동 완성 코드를 찾으려면 텍스트 편집기가 아닌 코드 편집기를 사용해야합니다.

다음은 내가 시도한 옵션 입니다.

  • 두 유용한 단축키는 Ctrl- n당신이 (더 코드 반성) 열려, 현재의 버퍼에만 기반으로 단어를 자동으로 완성되는, 그리고 Ctrl- xCtrl- l당신이 하나를 복제 할 경우 코드의 전체 라인을 자동 완성 것이다. 당신은 아마 알 Ctrl- xCtrl- f, 현재에 상대 경로를 포함한 파일 이름을 자동으로 완료되는 :pwd. 로 검색하지 않으면 패턴 완성 플러그인이 약간 유용 할 수 있습니다 /\v.

  • 내장 된 Vim " Omnicompletion " 은 언어 별 플러그인 (있을 경우 )과 함께 Ctrl- x, Ctrl- o(Vim 작성자가 매번 입력하기를 원함) 에 의해 트리거됩니다 . 당신은 할 수 있습니다 당신은 이미 Omnicompletion 선택의 파일에 빔에 의해 설정 한 경우 파일에 볼 수 있습니다.:echo &omnifunc

  • 입력시 위의 Omnicompletion 메뉴를 자동으로 여는 AutoComplPop .

  • TabVim의 내장 완료 를 누르기 위해 누르는 SuperTab .

  • 키워드 완성 인 NeoComplCache (Vim의 완성 된 완성과 다른 점은 지정되지 않음), 복잡한 .vimrc설정 및 스 니펫 완성을위한 NeoSnippet 입니다.

  • exuberant-ctags그리고 DoctorJS(1 년 동안 죽은 모질라 프로젝트), TagBar 및 태그 파일에서 완성을 추출하기 위해 에서 만든 것의 괴물 조합 .

  • SnipMate , 기본 태그 완료와 함께 플러그인, 조각 이 조금 까다로운로, 조각을 추가하는 방법을 자신에 밖으로, 그리고 그림.

  • UltiSnips 와 함께 위의 스 니펫 과 다른 UltiSnips-Snippets .

  • 올바른 자동 완성을 얻기 위해 실제 코드 검사를 수행하는 유망한 라이브러리 인 Tern for Vim . 그러나 버그가 많고 매우 느리며 메모리 누수가 발생하여 Vim에 충돌이 발생하여 버릴 수 있습니다.

  • YouCompleteMe , 스 니펫 완료를위한 자체 개발 함수 와 함께 백그라운드에서 서버를 실행하는 퍼지 형 사용자 정의 완료입니다.

  • Eclim- 백그라운드에서 Eclipse 서버를 실행하고 Vim에게 자동 완성되는 자동 완성을 알리려 는 고귀한 시도. Tern뿐만 아니라 잘 작동합니다.

  • 마지막으로 태그 입력시 태그 및 괄호를 자동으로 닫기위한 Closetag 또는 delimitMate 또는 autoclose 또는 자체 제작 바나나 그램 입니다.

이 목록에있는 거의 모든 플러그인은이 목록에있는 거의 모든 다른 플러그인과 충돌합니다.

YouCompleteMe 가 팩 의 리더 인 것 같지만 태그 완성 기능으로 제대로 작동하지 못했으며 코드 검사 완료는 아직 강력하지 않습니다.

개인적인 의견 은 Vim 자동 완성 세계의 현재 상태가 좋지 않다는 것입니다. 소규모 프로젝트의 경우 위의 솔루션 중 하나를 사용하는 것이 좋습니다. 간단한 API를 다루는 경우 대부분 머리를 껴안을 수 있습니다. 코드 검사가 아닌 완성은 아마도 괜찮을 것입니다. 대규모 프로젝트를 처리하거나 프로그래밍하는 동안 형식 안전의 이점이 필요한 경우 완전한 IDE ( Eclipse , Visual Studio , WebStorm )가 Vim보다 훨씬 더 적합합니다.

물론 IDE의 단점은 더 이상 Vim의 힘을 사용할 수 없다는 것입니다. 허용되는 Vim 모드를 가진 단일 IDE를 사용하지 않았습니다.

Vim은 형식화되지 않은 C와 유사한 언어에 대해 언어에 대한 편견이 없으며, 그렇지 않으면 사용자가 언어 별 기능을 플러그인으로 추가 할 것으로 기대합니다. 불행하게도, 이것은 자동 완성 생태계를 쪼개었다. 일부 옵션은 괜찮지 만 완벽한 것은 아니며 대다수의 리더 / 모범 사례는 거의 없습니다.


6

여기 좋은 것이 있습니다 : YouCompleteMe

입력 할 때 드롭 다운 메뉴가 자동으로 표시하고, 당신이 식별자를 불렀다 그렇다면, 퍼지 선택을 지원하게 YouCompleteMe partition_finder하고 같은 입력 ptf++ 파일은 C를 편집하는 동안의 드롭 다운 추천 목록이 모두 포함됩니다 printf그리고 partition_finder그들은 같은 문자가 포함되어 있으므로, 같은 순서로. 이라는 변수가 있으면 myBrain입력 brn하면됩니다. YouCompleteMe는 또한 이전 사용 빈도에 따라 제안을 우선 순위로 둡니다.




1

vim에는 OmniComplete라는 내장 기능이 내장되어 있다고 생각합니다. 삽입 모드에서을 사용하십시오 ctrl+x,ctrl+o.

그렇지 않으면을 사용하여 삽입 모드에서 키워드 완성을 수행 할 수 있습니다 ctrl+n. 호출하면 편집중인 파일에서 찾은 다른 단어와 열려있는 다른 파일에서 찾은 일치하는 단어를 표시하는 드롭 다운이 표시됩니다. 계속 ctrl+n해서 옵션을 살펴보십시오. 원하는 단어가 나오면 평소처럼 계속 입력하십시오.

당신은 당신이 원하는 단어를 찾을 수없는 경우 ctrl+n목록 떨어져 결국주기 입력을 유지할 수 있습니다, 또는 당신이 칠 수됩니다 ESC다음과가 bcw가는 b잘못된 단어의 시작 ACK와 change w당신이 원하는 것과 ORD합니다.


Vim의 내장 된 것은 짜증나는 것 같습니다. <cx> <co>를 누를 때마다 "패턴을 찾을 수 없음"이라고 표시됩니다. 그러나 <cn>을 누르면 입력 한 단어 바로 아래의 드롭 다운에 완료가 나타납니다. 그것은 같은 것입니까? 바로 가기를 누르지 않고 자동 완성 드롭 다운을 자동으로 표시하는 방법이 있습니까?
trusktr

상호 작용없이 자동 완성 팝업을 만드는 플러그인을 알지 못합니다. 죄송합니다 :(. <c-x><c-o>vim이 명시 적으로 지원하는 방법을 알려주는 것에 만 작동합니다. 기본적으로 몇 가지 사소한 일만 할 수 있다고 생각합니다. CSS 완성과 같지만 이클립스와 같은 것을 원한다면 몇 가지 vim 플러그인이있다.
Conrad.Dean

1
입력 할 때 드롭 다운 메뉴가 자동으로 표시되도록 YouCompleteMe라는 vim 용 플러그인을 발견했으며 퍼지 선택을 지원하므로 호출자가있는 식별자가 partition_finder있고 ptfC ++ 파일을 편집하는 동안 같은 것을 입력 하면 드롭 다운 메뉴 printfpartition_finder같은 순서로 같은 글자를 포함하기 때문입니다. 이라는 변수가 있으면 myBrain입력 할 수 있으며 brn나타납니다. YouCompleteMe는 또한 이전 사용 빈도에 따라 제안을 우선 순위로 둡니다. 여기에서 확인하십시오 : valloric.github.io/YouCompleteMe
trusktr

1

원래 AutoComplPop에서 새로운 플러그인 SimpleAutoComplPop을 가져 왔습니다 . 나는 루비 나 snipMate에 익숙하지 않지만 시도해 볼 수도 있고 피드백을 얻을 수있어서 기쁘다 :)

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