vim 용 자동 완성 플러그인이 있습니까? 내 옵션은 무엇입니까?
현재 AutoComplPop을 사용 하고 있지만 snipMate와의 통합이 좋지 않아 Ruby 파일 (100 줄 미만)을 느리게 사용합니다.
몇 가지 다른 플러그인을 보았지만 적어도 1 년 이상 지난 후에 플러그인이 종료되었습니다. 그래서 어떤 아이디어?
vim 용 자동 완성 플러그인이 있습니까? 내 옵션은 무엇입니까?
현재 AutoComplPop을 사용 하고 있지만 snipMate와의 통합이 좋지 않아 Ruby 파일 (100 줄 미만)을 느리게 사용합니다.
몇 가지 다른 플러그인을 보았지만 적어도 1 년 이상 지난 후에 플러그인이 종료되었습니다. 그래서 어떤 아이디어?
답변:
이것은 오래된 질문이지만, 나는 계속해서 그 문제로 되돌아오고 있으며, 언젠가는 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와 유사한 언어에 대해 언어에 대한 편견이 없으며, 그렇지 않으면 사용자가 언어 별 기능을 플러그인으로 추가 할 것으로 기대합니다. 불행하게도, 이것은 자동 완성 생태계를 쪼개었다. 일부 옵션은 괜찮지 만 완벽한 것은 아니며 대다수의 리더 / 모범 사례는 거의 없습니다.
여기 좋은 것이 있습니다 : YouCompleteMe
입력 할 때 드롭 다운 메뉴가 자동으로 표시하고, 당신이 식별자를 불렀다 그렇다면, 퍼지 선택을 지원하게 YouCompleteMe partition_finder
하고 같은 입력 ptf
++ 파일은 C를 편집하는 동안의 드롭 다운 추천 목록이 모두 포함됩니다 printf
그리고 partition_finder
그들은 같은 문자가 포함되어 있으므로, 같은 순서로. 이라는 변수가 있으면 myBrain
입력 brn
하면됩니다. YouCompleteMe는 또한 이전 사용 빈도에 따라 제안을 우선 순위로 둡니다.
내가 사용 neocomplcache을 snipmate + snipmate 조각으로
let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'
내 vimrc를 볼 수 있습니다
neosnippet으로 necomplecache를 시도하고 있습니다. 둘 다 같은 사람이 작성했기 때문에 더 나은 통합을 기대합니다.
vim에는 OmniComplete라는 내장 기능이 내장되어 있다고 생각합니다. 삽입 모드에서을 사용하십시오 ctrl+x,ctrl+o
.
그렇지 않으면을 사용하여 삽입 모드에서 키워드 완성을 수행 할 수 있습니다 ctrl+n
. 호출하면 편집중인 파일에서 찾은 다른 단어와 열려있는 다른 파일에서 찾은 일치하는 단어를 표시하는 드롭 다운이 표시됩니다. 계속 ctrl+n
해서 옵션을 살펴보십시오. 원하는 단어가 나오면 평소처럼 계속 입력하십시오.
당신은 당신이 원하는 단어를 찾을 수없는 경우 ctrl+n
목록 떨어져 결국주기 입력을 유지할 수 있습니다, 또는 당신이 칠 수됩니다 ESC
다음과가 bcw
가는 b
잘못된 단어의 시작 ACK와 c
hange w
당신이 원하는 것과 ORD합니다.
<c-x><c-o>
vim이 명시 적으로 지원하는 방법을 알려주는 것에 만 작동합니다. 기본적으로 몇 가지 사소한 일만 할 수 있다고 생각합니다. CSS 완성과 같지만 이클립스와 같은 것을 원한다면 몇 가지 vim 플러그인이있다.
partition_finder
있고 ptf
C ++ 파일을 편집하는 동안 같은 것을 입력 하면 드롭 다운 메뉴 printf
와 partition_finder
같은 순서로 같은 글자를 포함하기 때문입니다. 이라는 변수가 있으면 myBrain
입력 할 수 있으며 brn
나타납니다. YouCompleteMe는 또한 이전 사용 빈도에 따라 제안을 우선 순위로 둡니다. 여기에서 확인하십시오 : valloric.github.io/YouCompleteMe
원래 AutoComplPop에서 새로운 플러그인 SimpleAutoComplPop을 가져 왔습니다 . 나는 루비 나 snipMate에 익숙하지 않지만 시도해 볼 수도 있고 피드백을 얻을 수있어서 기쁘다 :)
let g:acp_behaviorSnipmateLength=-1
참조:help autocomplpop
). 추가 했습니까?